查看了一下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表所占的物理空间大小,...
1. **规划表空间**:确定表空间的用途,例如用户数据、临时数据等,并估算所需的空间大小。 2. **创建数据文件**:为表空间创建一个或多个数据文件,指定文件的大小、路径和增长策略。 3. **创建表空间**:使用`...
### Oracle中亿级记录表创建索引的知识点详解 #### 一、背景介绍 在Oracle数据库中处理亿级数据量的表时,合理的索引设计是优化查询性能的关键因素之一。索引能够加快数据检索的速度,减少I/O操作次数,但同时也...
### Oracle 获取执行计划全部方法详解 #### 方法一:Explain Plan for 方式 - **应用场景**:当某个 SQL 查询执行时间过长甚至无法返回结果时,这种方法尤其适用。 - **步骤**: 1. 使用 `EXPLAIN PLAN FOR` 命令...
`DBMS_STATS`包用于收集和更新表、索引等对象的统计信息,确保CBO能估算出最佳执行计划。 7. **并行执行**:通过并行执行,可以将大任务分解成多个小任务并发处理,加快处理速度。但并行度的选择需谨慎,过高可能...
在导出前,可能需要估算导出文件的大小。可以使用SQL查询从`dba_segments`视图获取表的总字节数,例如,获取所有表的总字节数、特定用户的所有表的总字节数,以及特定表的字节数。 7. 导出数据子集: 自Oracle 8i...
从Oracle 10g开始,RBO(基于规则的优化器)已被淘汰,现在主要使用CBO(基于成本的优化器),它会根据表的物理大小、索引状态等信息来估算成本,选择最低成本的执行计划。 索引是提升查询性能的关键手段。B-tree...
为了估算表的大小,我们需要计算记录的平均大小,以确定每个块可以容纳多少条记录。 - **字段长度估算**:并非所有`VARCHAR2`字段都会用尽其最大长度,因此需要估计实际使用的平均长度。 - **固定长度字段**:如...
本笔记主要探讨了如何基于块的数据结构来估算表和索引的大小,这有助于优化数据库设计,确保高效的空间利用。 首先,我们关注的是表的大小计算。表的数据块结构包括事务信息、初始化事务数(INITTRANS)以及数据块...
数据块是Oracle数据库最小的I/O单位,其大小可配置。段由一个或多个区组成,代表特定类型的数据库对象(如表、索引)。了解这些存储结构对于优化数据库空间使用和提高I/O效率至关重要。 三、查询优化 Oracle使用...
Oracle 表空间是数据库管理的重要组成部分,用于存储数据库对象如表、索引等。以下是关于Oracle表空间操作的详解: 1. **创建表空间** 创建表空间的语法如下: ```sql CREATE TABLESPACE DATAFILE '<filepath>...
- **改进多表连接处理**:在涉及多个表的连接查询中,直方图可以帮助优化器更准确地估计中间结果集的大小,从而选择更合适的连接策略。 #### 三、Oracle中使用直方图的场合 直方图的使用场合主要包括但不限于以下...
块大小在安装时选定,一般有2K、4K、8K、16K和32K等多种选择,Oracle 9i以后的版本允许在表空间级别调整块大小。块的大小需要考虑操作系统页面大小,通常是其倍数,并且会直接影响数据库的性能。 表(Tables)存储...
- 索引:通过创建索引可以显著提高查询速度,但需要根据数据访问模式和表大小合理设计索引。 9. 网络连接诊断: - 使用ping和tnsping命令检查网络连通性和TNS服务名配置是否正确。 - 使用sqlplus /nolog并连接到...
Oracle支持两种主要的表访问方式:全表扫描和基于ROWID的访问。 1. **全表扫描**: - **定义**:全表扫描是指顺序访问表中的每一行。 - **优化**:为了提高全表扫描的效率,Oracle可以一次性读取多个数据块。 - ...
Shared Pool中的Extent Map用于存储磁盘组中数据块的映射信息,需要根据数据库中数据文件、日志文件和临时文件的总大小来估算其大小。可以通过SQL查询如`SELECT sum(bytes)/(1024*1024*1024) FROM v$datafile`等来...
优化器通过统计信息、成本估算和访问方法(如全表扫描、索引扫描等)来决定查询策略。哈希连接(Hash Join)、嵌套循环连接(Nested Loop Join)和归并连接(Merge Join)是Oracle支持的三种主要的连接操作。CBO...
在这之中,如何准确估算Oracle Server Process(即Server Process,简称SP)进程所消耗的内存往往是一项挑战性的任务。本文将基于新炬网络专家杨志洪的文章《一个Oracle server process进程会消耗多少内存》中的案例...
这些统计信息包括表的大小、列的唯一性、索引的选择性和分布等。因此,定期收集和更新统计信息对于CBO做出正确的决策至关重要。 3. **执行计划**:CBO会生成多个可能的执行计划,然后比较它们的成本。最低成本的...