正德厚生,臻于至善

Oracle 单表记录上限,单表理论最大记录数

不考虑硬件诸如内存,存储等硬件的限制。
一张表理论能存储多少条记录呢?

假设:
一个tablespace中包含1022个datafiles,
单个datafiles的最大是32G
假设每个block是16k,每个block中有160条记录,
每个表可以有(1024*1024)-1个分区表
那么一张表理论最大存储记录数约为:

1.一个表空间tablespace的最大值:datafile个数 × 单个datafile的大小
1022 × 32G  =32704 G

2.换算成k
(32704 G *1024*1024 )=34,292,629,504 K

3.假设每个块16k,算出共有多少个块
34,292,629,504 K /16 K =2143289344  块

4.假设每个块存160记录。总记录数=块数×每个块的记录数
2143289344×160=342,926,295,040  记录

5. 最大分区表的个数 ×  最大记录数
SQL> select ((1024*1024)-1 )* 342926295040  maxnum from dual;
MAXNUM
-------------------
3.59583939821568E17

按Oracle设计:1个表空间(tablespace),最多由1022个文件数据文件组成(datafile),每个文件最大32GB,那么

1)一个表空间占用约:32TB空间。
如程序员设计:1条记录占用0.1KB空间,那么
2)一个表空间包括约:320G条记录(=32TB/.1KB),就是3千亿条记录。
DECLARE
	CURSOR CUR_01 IS SELECT * FROM DBA_TAB_PARTITIONS WHERE TABLE_NAME='CUX_16_PJVS_SPLIT_SUBACCT_ALL';
	  CUR_02 CUR_01%ROWTYPE;
	  A1 NUMBER;
	  SQL01 VARCHAR2(150);

	BEGIN
		FOR CUR_02 IN CUR_01 LOOP
       SQL01 := 'SELECT COUNT(1) FROM CUX_16_PJVS_SPLIT_SUBACCT_ALL PARTITION('||CUR_02.PARTITION_NAME||') ';
       EXECUTE IMMEDIATE SQL01 INTO A1 ;
        DBMS_OUTPUT.PUT_LINE('分区名:'||CUR_02.PARTITION_NAME ||'  数量:'|| A1);
      END LOOP;
  END;
赞(0) 打赏
未经允许不得转载:徐万新之路 » Oracle 单表记录上限,单表理论最大记录数

评论 抢沙发

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫

微信扫一扫

登录

找回密码

注册