不考虑硬件诸如内存,存储等硬件的限制。
一张表理论能存储多少条记录呢?
假设:
一个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;
最新评论
这个牛
放下欲望,男人从来不醉,充分且必要
勇气、责任、自信、创新,为天下先!
软件即数据,软件即服务,软件即管理,软件就是对人类各种社会活动的仿真和记录。软件很重要,但软件不可能凌驾于业务之上,尤其不可能高人一等。