分享
 
 
 

Oracle数据库的大表,小表与全表扫描

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

通常对于小表,Oracle建议通过全表扫描进行数据访问,对于大表则应该通过索引以加快数据查询,当然假如查询要求返回表中大部分或者全部数据,那么全表扫描可能仍然是最好的选择。

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

SQL> col name for a30

SQL> select name,value from v$sysstat

2 where name in ('table scans (short tables)','table scans (long tables)');

NAME VALUE

------------------------------ ----------

table scans (short tables) 828

table scans (long tables) 101

其中table scans (short tables)指对于小表的全表扫描的此时;table scans (long tables)指对于大表的全表扫描的次数。

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

Instance Activity Stats for DB: CELLSTAR Instance: ora8i Snaps: 20 -

Statistic Total per Second per Trans

--------------------------------- ---------------- ------------ ------------

。。。。。。

table scan blocks gotten 38,228,349 37.0 26.9

table scan rows gotten 546,452,583 528.9 383.8

table scans (direct read) 5,784 0.0 0.0

table scans (long tables) 5,990 0.0 0.0

table scans (rowid ranges) 5,850 0.0 0.0

table scans (short tables) 1,185,275 1.2 0.8

通常,假如一个数据库的table scans (long tables)过多,那么db file scattered read等待事件可能同样非常显著,和以上数据来自同一个report的Top5等待事件就是如此:

Top 5 Wait Events

~~~~~~~~~~~~~~~~~ Wait % Total

Event Waits Time (cs) Wt Time

-------------------------------------------- ------------ ------------ -------

log file parallel write 1,436,993 1,102,188 10.80

log buffer space 16,698 873,203 8.56

log file sync 1,413,374 654,587 6.42

control file parallel write 329,777 510,078 5.00

db file scattered read 425,578 132,537 1.30

数据库内部,很多信息和现象都是紧密相关的,只要我们加深对于数据库的了解,在优化和诊断数据库问题时就能够得心应手。

Oracle通过一个内部参数_small_table_threshold来定义大表和小表的界限。缺省的该参数等于2%的Buffer数量,假如表的大小小于该参数定义,Oracle认为该表为小表,否则Oracle认为该表为大表。

我们看一下Oracle9iR2中的情况:

SQL> @@GetParDescrb.sql

Enter value for par: small

old 6: AND x.ksppinm LIKE '%&par%'

new 6: AND x.ksppinm LIKE '%small%'

NAME VALUE DESCRIB

------------------------------ -------------------- ------------------------------------------------------------

_small_table_threshold 200 threshold level of table size for direct reads

以上数据库中,200正好约为Buffer数量的2%:

SQL> show parameter db_cache_size

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_cache_size big integer 83886080

SQL> select (83886080/8192)*2/100 from dual;

(83886080/8192)*2/100

---------------------

204.8

所以要区分大小表(Long/Short)是因为全表扫描可能引起Buffer Cache的抖动,缺省的大表的全表扫描会被置于LRU的末端,以期尽快老化,减少Buffer的占用。从Oracle8i开始,Oracle的多缓冲池治理技术(Default/Keep/Recycle池)给了我们另外一个选择,对于不同大小、不同使用频率的数据表,从建表之初就可以指定其存储Buffer,以使得内存使用更加有效。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有