通常,对于小表,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