`
winie
  • 浏览: 224261 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Oracle估算表大小的小方法

 
阅读更多

查看了一下ALL_TABLES 表,其中有个字段:avg_row_len. 该值单位为bytes。 可以一句这个字段来进行一个估算。

AVG_ROW_LEN*NUMBER
Average length of a row in the table (in bytes)
http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_2117.htm#i1592091
根据对表大小的估算,进而可以估算出整个数据库的大小。 在项目测试阶段,可以根据所有对象进行估算,从而可以估算出系统上线以后数据库的大小,根据这些数据可以规划存储。这里要注意一点,要给备份留足存储空间。 一般备份需要的空间是DB的2-3倍。 如果DB 是100G,那么给备份的空间最好是200G以上。

根据dba_segments视图可以查看数据库中占用存储空间的对象:
SYS@anqing2(rac2)> select distinctsegment_type from dba_segments;

SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
TABLE PARTITION
NESTED TABLE
ROLLBACK
LOB PARTITION
LOBSEGMENT
INDEX
TABLE
CLUSTER
TYPE2 UNDO

11 rows selected.

这里主要就是表和索引。把所有表和索引的大小估算出来,在相加就可以估算出DB的大小了。


二. 估算表的大小
表的大小=记录数*平均字段大小(avg_row_len)

Avg_row_len 可以通过如下SQL 查询。 其单位为bytes。
SYS@anqing2(rac2)> selecttable_name,avg_row_len from all_tables where table_name='T1';

TABLE_NAME AVG_ROW_LEN
------------------------------ -----------
T1 93

如果T1 表未来估计为1000万行,那么其大小就是1000w*93bytes。


三.估算表上索引的大小
All_indexes 视图没有all_tables 上的avg_row_len 字段,不过我们可以通过视图和表大小的一个比率进行估算。 表的大小我们可以估算出来,索引的大小可以通过这个比率进行估算。

SQL>create index idx_t1_created on t1(created)
SQL>exec dbms_stats.gather_table_stats('SYS','T1',cascade=>TRUE)

SYS@anqing2(rac2)> selectsegment_name,segment_type,bytes,blocks from dba_segments where segment_namein ('T1','IDX_T1_CREATED');

SEGMENT_NAME SEGMENT_TYPE BYTES BLOCKS
--------------- ---------------------------- ----------
T1 TABLE 6291456 768
IDX_T1_CREATED INDEX 2097152 256

计算索引和表的比率:
SYS@anqing2(rac2)> select (2097152/6291456)*100,(256/768)*100 from dual;

(2097152/6291456)*100 (256/768)*100
--------------------- -------------
33.3333333 33.3333333

从bytes 和 blocks 的比率是一样,即索引是表的33%。 那么如果估算表以后的大小是1000M,那么对应的索引大小就是1000M*33%=330M。

把所有表和索引的大小加起来,就是整个数据库大小的估算值。


1.创建测试表和索引

SQL> create table t as select * from dba_objects;

Table created.

SQL> create index t_ind on t(object_id);

Index created.

2.收集统计信息

SQL> exec dbms_stats.gather_table_stats(user,'t',cascade=>true);

PL/SQL procedure successfully completed.

3.计算

SQL> select avg_row_len from user_tables where table_name='T';

AVG_ROW_LEN
-----------
98

SQL> select segment_name,segment_type,bytes from user_segments where segment_name in('T','T_IND');

SEGMENT_NAME SEGMENT_TYPE BYTES
--------------------------------------------------------------------------------- ------------------ ----------
T TABLE 9437184
T_IND INDEX 2097152

SQL> select trunc((2097152/9437184)*100) ind_pct from dual;

IND_PCT
----------
22

表大小=row_number*98 *(1+0.22) bytes



整理自《让Oracle跑的更快》谭怀远

转:http://blog.csdn.net/jxzkin/article/details/7659323

分享到:
评论

相关推荐

    查询一个Oracle表所占的物理空间大小

    ### 查询一个Oracle表所占的物理空间大小 在Oracle数据库管理中,了解特定表占用的物理空间大小对于优化存储、规划磁盘空间以及提高数据库性能至关重要。本文将详细介绍如何查询一个Oracle表所占的物理空间大小,...

    oracle 表空间 控制数据日志文件 备份还原

    1. **规划表空间**:确定表空间的用途,例如用户数据、临时数据等,并估算所需的空间大小。 2. **创建数据文件**:为表空间创建一个或多个数据文件,指定文件的大小、路径和增长策略。 3. **创建表空间**:使用`...

    [Oracle]如何在亿级记录表中创建索引

    ### Oracle中亿级记录表创建索引的知识点详解 #### 一、背景介绍 在Oracle数据库中处理亿级数据量的表时,合理的索引设计是优化查询性能的关键因素之一。索引能够加快数据检索的速度,减少I/O操作次数,但同时也...

    oracle获取执行计划全部方法

    ### Oracle 获取执行计划全部方法详解 #### 方法一:Explain Plan for 方式 - **应用场景**:当某个 SQL 查询执行时间过长甚至无法返回结果时,这种方法尤其适用。 - **步骤**: 1. 使用 `EXPLAIN PLAN FOR` 命令...

    ORACLE 19C SQL调优指南 中文版 Oracle DBA

    `DBMS_STATS`包用于收集和更新表、索引等对象的统计信息,确保CBO能估算出最佳执行计划。 7. **并行执行**:通过并行执行,可以将大任务分解成多个小任务并发处理,加快处理速度。但并行度的选择需谨慎,过高可能...

    Oracle导出程序Exp的使用

    在导出前,可能需要估算导出文件的大小。可以使用SQL查询从`dba_segments`视图获取表的总字节数,例如,获取所有表的总字节数、特定用户的所有表的总字节数,以及特定表的字节数。 7. 导出数据子集: 自Oracle 8i...

    ORACLE19c数据库性能优化说明.docx

    从Oracle 10g开始,RBO(基于规则的优化器)已被淘汰,现在主要使用CBO(基于成本的优化器),它会根据表的物理大小、索引状态等信息来估算成本,选择最低成本的执行计划。 索引是提升查询性能的关键手段。B-tree...

    表物理设计时的存储空间大小粗略计算(英文)

    为了估算表的大小,我们需要计算记录的平均大小,以确定每个块可以容纳多少条记录。 - **字段长度估算**:并非所有`VARCHAR2`字段都会用尽其最大长度,因此需要估计实际使用的平均长度。 - **固定长度字段**:如...

    ORACLE笔记

    本笔记主要探讨了如何基于块的数据结构来估算表和索引的大小,这有助于优化数据库设计,确保高效的空间利用。 首先,我们关注的是表的大小计算。表的数据块结构包括事务信息、初始化事务数(INITTRANS)以及数据块...

    Oracle内核技术揭秘

    数据块是Oracle数据库最小的I/O单位,其大小可配置。段由一个或多个区组成,代表特定类型的数据库对象(如表、索引)。了解这些存储结构对于优化数据库空间使用和提高I/O效率至关重要。 三、查询优化 Oracle使用...

    Oracle表空间操作详解.docx

    Oracle 表空间是数据库管理的重要组成部分,用于存储数据库对象如表、索引等。以下是关于Oracle表空间操作的详解: 1. **创建表空间** 创建表空间的语法如下: ```sql CREATE TABLESPACE DATAFILE '<filepath>...

    结合实例深入讲解oracle中的直方图histogram

    - **改进多表连接处理**:在涉及多个表的连接查询中,直方图可以帮助优化器更准确地估计中间结果集的大小,从而选择更合适的连接策略。 #### 三、Oracle中使用直方图的场合 直方图的使用场合主要包括但不限于以下...

    01-0 Oracle 存储与关键表设计(50).pptx

    块大小在安装时选定,一般有2K、4K、8K、16K和32K等多种选择,Oracle 9i以后的版本允许在表空间级别调整块大小。块的大小需要考虑操作系统页面大小,通常是其倍数,并且会直接影响数据库的性能。 表(Tables)存储...

    Oracle9i(客户端)

    - 索引:通过创建索引可以显著提高查询速度,但需要根据数据访问模式和表大小合理设计索引。 9. 网络连接诊断: - 使用ping和tnsping命令检查网络连通性和TNS服务名配置是否正确。 - 使用sqlplus /nolog并连接到...

    Oracle性能优化

    Oracle支持两种主要的表访问方式:全表扫描和基于ROWID的访问。 1. **全表扫描**: - **定义**:全表扫描是指顺序访问表中的每一行。 - **优化**:为了提高全表扫描的效率,Oracle可以一次性读取多个数据块。 - ...

    Oracle_ASM_详解

    Shared Pool中的Extent Map用于存储磁盘组中数据块的映射信息,需要根据数据库中数据文件、日志文件和临时文件的总大小来估算其大小。可以通过SQL查询如`SELECT sum(bytes)/(1024*1024*1024) FROM v$datafile`等来...

    oracle核心技术读书笔记一附件1

    优化器通过统计信息、成本估算和访问方法(如全表扫描、索引扫描等)来决定查询策略。哈希连接(Hash Join)、嵌套循环连接(Nested Loop Join)和归并连接(Merge Join)是Oracle支持的三种主要的连接操作。CBO...

    一个Oracle server process进程会消耗多少内存

    在这之中,如何准确估算Oracle Server Process(即Server Process,简称SP)进程所消耗的内存往往是一项挑战性的任务。本文将基于新炬网络专家杨志洪的文章《一个Oracle server process进程会消耗多少内存》中的案例...

Global site tag (gtag.js) - Google Analytics