您当前位置:优侠库 > 资讯攻略 >
来源:未知
2020-04-05 14:14:08 浏览: 分类:资讯攻略

Oracle的大表,小表与全表扫描

通常,对于小表,oracle建议使用全表扫描进行数据访问,而对于大表,应该使用索引来加快数据查询。当然,如果查询要求返回表中的大部分或所有数据,全表扫描可能仍然是最佳选择。

从V$SYSSTAT视图中,我们可以查询关于全表扫描的系统统计信息:

SQL & gta30的列名

SQL & gt从v$sysstat中选择名称和值

2其中名称在(& quot表格扫描(短表格)& quot,& quot表扫描(长表)& quot);

名字值

- -

表格扫描(短表格)828

表格扫描(长表格)101

其中表扫描(短表)是指这次对小表的全表扫描;表扫描(长表)是指对大型表进行全表扫描的次数。

从Statspack的报告中,我们也可以找到这部分信息:

数据库的实例活动统计信息:CELLSTAR实例:ora8i快照:20 -

爱情故事多样性剧情统计总每秒每传输

- - - -

。。。。。。

表扫描块数为38,228,349 37.0 26.9

表扫描行数达到546,452,583 528.9 383.8

表扫描(直接读取)5,784 0.0 0.0

表格扫描(长表格)5,990 0.0 0.0

表扫描(rowid范围)5,850 0.0 0.0

表格扫描(短表格)1,185,275 1.2 0.8

通常,如果数据库中有太多的表扫描(长表),db文件分散读取的等待事件可能同样重要,例如来自具有上述数据的同一报告的Top5的等待事件:

前5个等待事件

~~~~~~~~~~~~~~~~~等待百分比总计

事件等待时间(cs) Wt时间

- - - -

日志文件并行写入1436993 1102188 10.80

日志缓冲区空间16,698 873,203 8.56

日志文件同步1,413,374 654,587 6.42

控制文件并行写入329,777 510,078 5.00

数据库文件分散读取425578 132537 1.30

在数据库内部,很多信息和现象是密切相关的。只要加深对数据库的理解,优化和诊断数据库问题就能得心应手。

Oracle使用一个内部参数_small_table_threshold来定义大表和小表之间的界限。默认参数等于缓冲区数量的2%。如果表的大小小于参数定义,Oracle将该表视为小表,否则,Oracle将该表视为大表。

让我们来看看Oracle9iR2中的情况:

SQL & gt@@GetParDescrb.sql

输入par值:小

老6:和x.ksppinm一样& quot% & amppar % & quot

新6:和x.ksppinm一样& quot% small % & quot

名称值描述b

- - -

_small_table_threshold 200引入用于直接读取的表大小的技巧吻差异阈值级别

在上面的数据库中,200正好是缓冲区数量的2%:

SQL & gt显示参数数据库缓存大小

名称类型值

- - -

db_cache_size大整数83886080

SQL & gt从dual中选择(83886080/8192)* 2/100;

(83886080/8192)*2/100

-

204.8

所以要区分长/短表,因为全表扫描可能会造成缓冲区缓存的抖动,大表默认全表扫描会放在LRU的末尾,这样可以尽快老化,减少对缓冲区的占用。从Oracle8i开始,Oracle的多缓冲池管理技术(Default/Keep/Recycle pool)给了我们另一种选择。对于大小不同、使用频率不同的数据表,可以从创建表开始就指定存储缓冲区,这样可以更有效地利用内存。

关键词:甲骨文

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227353.html

攻略资讯
安卓软件
安卓游戏