我的编程空间,编程开发者的网络收藏夹
学习永远不晚

records_per_block参数的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

records_per_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。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

records_per_block参数的使用

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

下载Word文档

猜你喜欢

oracle中Parallel参数的使用

在Oracle数据库中,Parallel参数用于控制并行查询和并行DML操作的行为。以下是一些常见的Parallel参数及其使用方法:1. PARALLEL_AUTOMATIC_TUNING:该参数控制并行查询的自动调整功能是否启用。当启用
2023-08-08

如何使用 PHP 函数的参数?

函数参数允许向函数传递数据,有两种传递方式:按值传递:原始变量不受函数修改影响。按引用传递(以 & 符号开头):函数修改会影响原始变量。实战案例:表单验证中,按值传递的字段不会被修改,而按引用传递的错误数组可以在函数外修改。
如何使用 PHP 函数的参数?
2024-04-15

python的函数参数怎么使用

本篇内容主要讲解“python的函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python的函数参数怎么使用”吧!位置参数这是一个求等差数列和的函数,使用必需要传入一个参数n,这
2023-06-22

MySQL binlog_ignore_db 参数的具体使用

前言: 经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比如说只让某个库记录 binglog
2022-05-10

C/C++可变参数的使用

可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
C/C++可变参数的使用
2022-11-15

antdupload控件的data参数使用

这篇文章主要介绍了antdupload控件的data参数使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-12

Python函数参数和注解的使用

目录四种参数仅限关键字参数内省中的函数参数函数注解四种参数Python函数func定义如下:def func(first, *args, second="Hello World", **kwargs):print(first)print(a
2022-06-02

python sorted()函数的参数怎么使用

这篇文章主要介绍“python sorted()函数的参数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python sorted()函数的参数怎么使用”文章能帮助大家解决问题。概念1、对可
2023-06-30

js函数中参数的使用方法

本篇内容主要讲解“js函数中参数的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js函数中参数的使用方法”吧!说明1、函数内的某些值不能固定,我们可以通过参数在调用函数时传递不同的值。2
2023-06-20

ThreadPoolExecutor参数如何使用

本篇内容主要讲解“ThreadPoolExecutor参数如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ThreadPoolExecutor参数如何使用”吧!ThreadPoolExec
2023-07-05

如何使用ADO.NET参数

这篇文章将为大家详细讲解有关如何使用ADO.NET参数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在数据驱动的应用程序中,存储过程具有许多优势。通过利用存储过程,数据库操作可以封装在单个命令中,为获取*
2023-06-17

Swift:使用 scheduleTimerWithTimeInterval 调用的额外参数

在Swift中,可以使用`scheduleTimerWithTimeInterval`方法调用定时器,并传递额外的参数。这可以通过使用闭包来实现。下面是一个示例,演示如何在定时器中传递额外的参数:```swiftclass TimerHel
2023-09-27

如何使用 C++ 函数中的引用参数

引用参数直接指向传递给函数的变量,提供效率、可修改性和安全性。具体来说,引用参数可以提高效率(避免复制)、允许函数修改调用者中的变量,并消除悬引用风险。语法为在类型名前加 &,如 void foo(int& x);。在实战中
如何使用 C++ 函数中的引用参数
2024-04-19

编程热搜

目录