1
文档课题:oracle中一个块可以存储多少行数据?
测试环境:oracle 19.12 64位 + 多租户
1、建表
SQL> conn sys/oracle_4U@orclpdb as sysdba
Connected.
SQL> create table blockrow (id varchar2(1));
Table created.
SQL> begin
2 for i in 1..10000 loop
3 insert into blockrow values ('b');
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select * from blockrow where rownum<11;
I
-
b
b
b
b
b
b
b
b
b
b
10 rows selected.
SQL> select count(*) from blockrow;
COUNT(*)
----------
10000
2、查询
查表blockrow rowid对应的相对文件号以及数据块号.
select dbms_rowid.rowid_relative_fno(rowid) f,
dbms_rowid.rowid_block_number(rowid) b
from blockrow;
F B
---------- ----------
1 45433
1 45433
1 45433
1 45433
1 45433
1 45433
1 45433
1 45433
1 45433
1 45433
10 rows selected.
说明:
dbms_rowid.rowid_relative_fno(rowid)为rowid的相对文件号
dbms_rowid.rowid_block_number(rowid)为rowid的数据块号
参考:
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_rowid.htm#ARPS67770
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_rowid.htm#ARPS67762
查每个块对应的行数.
select f, b, count(*)
from (select dbms_rowid.rowid_relative_fno(rowid) f,
dbms_rowid.rowid_block_number(rowid) b
from blockrow)
group by f, b
order by b;
F B COUNT(*)
---------- ---------- ----------
1 45433 660
1 45434 660
1 45435 660
1 45436 660
1 45437 660
1 45438 660
1 45439 660
1 45440 660
1 45441 660
1 45442 660
1 45443 660
F B COUNT(*)
---------- ---------- ----------
1 45444 660
1 45445 660
1 45446 660
1 45447 660
1 45448 100
16 rows selected.
查数据块大小.
SQL> show parameter db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
总结:综上所述,一个块8k可以存储表blockrow 660行数据.
说明:以上内容参照以下网址.
https://blog.csdn.net/hezuijiudexiaobai/article/details/121017638