WEB开发网
开发学院数据库Oracle Oracle的大表,小表与全表扫描 阅读

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

 2007-05-10 12:16:30 来源:WEB开发网   
核心提示: Top 5 Wait Events~Wait % TotalEvent WaitsTime (cs) Wt Time ---log file parallel write 1,436,9931,102,188 10.80log buffer space 16,698873,2038.5
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,以使得内存使用更加有效。

上一页  1 2 

Tags:Oracle 扫描

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接