广告
返回顶部
首页 > 资讯 > 数据库 >records_per_block参数的使用
  • 498
分享到

records_per_block参数的使用

2024-04-02 19:04:59 498人浏览 安东尼
摘要

1、BLOCK是数据库中的最小存储和处理单位,包含块本身的头信息数据或PL/sql代码。RECORDS_PER_BLOCK参数用于设定每个BLOCK中记录数的最大值,其先找到当前表所有BLOCK中容纳的最大

1、BLOCK是数据库中的最小存储和处理单位,包含块本身的头信息数据或PL/sql代码。RECORDS_PER_BLOCK参数用于设定每个BLOCK中记录数的最大值,其先找到当前表所有BLOCK中容纳的最大行数,并会把这个数字记录到数据字典,以后任何导致BLOCK行数超过这个数字的插入都会被拒绝(插入另一个块中)。

2、不能对空表设定此参数。
3、每个BLOCK中可以包含的记录数的最低下限是2。
4、不能在已经有 bitmap 的表中使用records_per_block参数,也就是说,如果要使用records_per_block参数,必须先alter table xxx minimize records_per_block,然后才能在表上建立索引
官方解释:

This facility improves the storage perfORMance of bitmap indexes and has a direct
effect on query performance. The way in which bitmap indexes operate is that the
maximum possible number of records that can fit in a block is computed from the
table definition, and a bit allocated for each of these records. This calculated value
may be much larger than any actual value resulting in many unnecessary zero bits at
the end of each block having to be compressed. By detecting the actual value with the
ALTER TABLE command, bitmap storage is improved.
If the row size decreases after the minimization step, poor table storage may result, as
blocks will be restricted to the calculated maximum. The feature is aimed at static
environments, such as data warehouses.
It is not possible to minimize RECORDS_PER_BLOCK if the table has an existing
bitmap index.
The MINIMIZE RECORDS_PER_BLOCK syntax populates TAB$ with a value in the
SPARE1 column. With this syntax, the maximum number of records currently stored
in any data block is recorded. There is currently no view available to query this
column.
A table that is not minimized will have a value in TAB$.SPARE1. The value varies
depending on block size, for example, it is 178 for a 2 KB block, and 736 for an 8 KB
block.
测试过程:
1、SQL> create table test(id int,name varchar2(10));

Table created.

SQL> alter table test minimize records_per_block;
alter table test minimize records_per_block
*
ERROR at line 1:
ORA-28603: statement not permitted on empty tables

----表明不能对空表使用此参数
所以接下来,我们往表里插入点具体数:
2、
SQL> BEGIN
2  FOR I IN 1..10 LOOP
3  INSERT INTO test VALUES(1,'test'||I);
4  END LOOP;
5  END;
6  /

PL/SQL procedure successfully completed.

SQL> select * from test;

    ID NAME
     1 test1
     1 test2
     1 test3
     1 test4
     1 test5
     1 test6
     1 test7
     1 test8
     1 test9
     1 test10

10 rows selected.

SQL> commit;

Commit complete.

SQL> CREATE BITMAP INDEX IDX_TEST_NAME ON TEST(NAME);

Index created.

SQL> alter table test minimize records_per_block;
alter table test minimize records_per_block
*
ERROR at line 1:
ORA-28602: statement not permitted on tables containing bitmap indexes

---表明在已经有 bitmap 的表中不能使用records_per_block参数。
SQL> drop index IDX_TEST_NAME;

Index dropped.

SQL> create index IDX_TEST_NAME ON TEST(NAME);

Index created.

SQL> alter table test minimize records_per_block;

Table altered.

----如果存在b 树索引,就没有事;普通表,没索引的,也可以使用此参数。
3、SQL> select dbms_rowid.rowid_block_number(rowid),count(*) from test group by dbms_rowid.rowid_block_number(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)   COUNT(*)


                            1439         10

我们可以看到,10行数据,全都集中在一个Block,
这时候,我们都知道,如果没有minimize records_per_block,那么后面继续插入的数据,还会在1439号block,
但是由于我们使用了minimize records_per_block,可以观察一下,继续插入后的情况:

SQL> BEGIN
2  FOR I IN 1..10 LOOP
3  INSERT INTO test VALUES(1,'test'||I);
4  END LOOP;
5  END;
6  /

PL/SQL procedure successfully completed.

SQL> BEGIN
2  FOR I IN 1..10 LOOP
3  INSERT INTO test VALUES(1,'test'||I);
4  END LOOP;
5  END;
6  /

PL/SQL procedure successfully completed.

SQL> BEGIN
2  FOR I IN 1..11 LOOP
3  INSERT INTO test VALUES(1,'test'||I);
4  END LOOP;
5  END;
6  /

PL/SQL procedure successfully completed.

SQL> select dbms_rowid.rowid_block_number(rowid),count(*) from test group by dbms_rowid.rowid_block_number(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)   COUNT(*)


                            1436         10
                            1439         10
                            1435         10
                            1437         10
                            1438          1

这里我们可以看见,所有的已使用的block中,最多只有10条记录,
也就是使用minimize records_per_block之前的块中最大记录数,最后一次的插入,我故意插入了11条,就是为了能够看的更清楚。即使是11条,由于之前最大记录数是10条,所以一个块中最多只能存10条,另外一条数据数据存储在另一个块中,分开了。
所以records_per_block能够限定表中每个块的最大大小
4、
SQL> drop table test purge;

Table dropped.

SQL> create table test(id int,name varchar2(10));

Table created.

SQL> insert into test values(1,'aaa');

1 row created.

SQL> commit;

Commit complete.

SQL> alter table test minimize records_per_block;

Table altered.

SQL> select dbms_rowid.rowid_block_number(rowid),count(*) from test group by dbms_rowid.rowid_block_number(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)   COUNT(*)


                            1439          1

SQL> BEGIN
2  FOR I IN 1..10 LOOP
3  INSERT INTO test VALUES(1,'test'||I);
4  END LOOP;
5  END;
6  /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> select dbms_rowid.rowid_block_number(rowid),count(*) from test group by dbms_rowid.rowid_block_number(rowid);

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)   COUNT(*)


                            1436          2
                            1439          2
                            1435          2
                            1437          2
                            1438          2
                            1443          1

6 rows selected.

---使用records_per_block参数之前,表里只有一条数据,存储在1443块中,然后使用records_per_block参数,插入10条数据,并不是每个块中存一条数据,而是2条,所以,records_per_block最小值为2。

您可能感兴趣的文档:

--结束END--

本文标题: records_per_block参数的使用

本文链接: https://www.lsjlt.com/news/36884.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • records_per_block参数的使用
    1、BLOCK是数据库中的最小存储和处理单位,包含块本身的头信息数据或PL/SQL代码。RECORDS_PER_BLOCK参数用于设定每个BLOCK中记录数的最大值,其先找到当前表所有BLOCK中容纳的最大...
    99+
    2022-10-18
  • 通过案例学调优之--RECORDS_PER_BLOCK参数
    通过案例学调优之--RECORDS_PER_BLOCK参数      RECORDS_PER_BLOCK参数用于设定每个BLOCK中记录数的最大值,其先找到当前表所有BLOCK...
    99+
    2022-10-18
  • 使用springmvc参数接收boolean类型参数的问题
    目录springmvc参数接收boolean类型参数如何接收以is开头的boolean类型的参数开发环境问题小结一下springmvc参数接收boolean类型参数 在开发项目过程中...
    99+
    2022-11-13
  • oracle中Parallel参数的使用
    在Oracle数据库中,Parallel参数用于控制并行查询和并行DML操作的行为。以下是一些常见的Parallel参数及其使用方法...
    99+
    2023-08-08
    oracle
  • python的函数参数怎么使用
    本篇内容主要讲解“python的函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python的函数参数怎么使用”吧!位置参数这是一个求等差数列和的函数,使用必需要传入一个参数n,这...
    99+
    2023-06-22
  • antdupload控件的data参数使用
    目录antd upload控件的data参数经测试antd upload组件使用项目场景使用总结antd upload控件的data参数 通过data属性传递的参数,在后台可以通过r...
    99+
    2023-02-12
    antd upload控件 upload控件data参数 antd upload data参数
  • MySQL binlog_ignore_db 参数的具体使用
    前言:  经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比...
    99+
    2022-05-10
    MySQL binlog参数 MySQL binlog MySQL binlog_ignore_db
  • expdp之query、flashback_scn参数的使用
    实验环境 操作系统:CentOS 7.1 数据库:Oracle 11.2.0.4   在使用10g后的Oracle Data Pump导出数据时, expdp中提供了...
    99+
    2022-10-18
  • C/C++可变参数的使用
    可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等。可变参数是实现printf(),sprintf()...
    99+
    2022-11-15
    可变参数 C C++
  • js函数中参数的使用方法
    本篇内容主要讲解“js函数中参数的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js函数中参数的使用方法”吧!说明函数内的某些值不能固定,我们可以通过参数在调用函数时传递不同的值。多个参...
    99+
    2023-06-20
  • Python函数参数和注解的使用
    目录四种参数仅限关键字参数内省中的函数参数函数注解四种参数 Python函数func定义如下: def func(first, *args, second="Hello World", **kwargs): ...
    99+
    2022-06-02
    python 函数参数 python 注解
  • python sorted()函数的参数怎么使用
    这篇文章主要介绍“python sorted()函数的参数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python sorted()函数的参数怎么使用”文章能帮助大家解决问题。概念对可迭代...
    99+
    2023-06-30
  • 如何使用ADO.NET参数
    这篇文章将为大家详细讲解有关如何使用ADO.NET参数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在数据驱动的应用程序中,存储过程具有许多优势。通过利用存储过程,数据库操作可以封装在单个命令中,为获取*...
    99+
    2023-06-17
  • 怎么使用OUT参数
    本篇内容介绍了“怎么使用OUT参数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我创建了下面这个过程:CR...
    99+
    2022-10-18
  • MySQL参数如何使用
    这篇文章将为大家详细讲解有关MySQL参数如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  MySQL参数怎么使用  createtable的时候,...
    99+
    2022-10-18
  • go build 使用和参数
    不同系统可执行文件编译命令 Mac下编译Linux, Windows平台的64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOO...
    99+
    2022-10-22
  • ThreadPoolExecutor参数如何使用
    本篇内容主要讲解“ThreadPoolExecutor参数如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ThreadPoolExecutor参数如何使用”吧!ThreadPoolExec...
    99+
    2023-07-05
  • 使用@RequestBody配合@Valid校验入参参数
    目录@RequestBody配合@Valid校验入参参数自定义一个Controller自定义实体类自定义全局异常处理器附录@Valid校验@RequestBody的参数希望通过注解校...
    99+
    2022-11-13
  • 深入讲解Python函数中参数的使用及默认参数的陷阱
    C++里函数可以设置缺省参数,Java不可以,只能通过重载的方式来实现,python里也可以设置默认参数,最大的好处就是降低函数难度,函数的定义只有一个,并且python是动态语言,在同一名称空间里不能有想...
    99+
    2022-06-04
    参数 函数 陷阱
  • Python中的函数参数(位置参数、默认参数、可变参数)
    目录一、位置参数二、默认参数三、可变参数四、关键字参数五、命名关键字参数六、各种参数之间的组合函数的参数:Python中函数定义非常简单,由于函数参数的存在,使函数变得非常灵活应用广...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作