IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當前所在位置: 首頁數(shù)據(jù)庫Oracle → Oracle的大表,小表與全表掃描

Oracle的大表,小表與全表掃描

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

  通常對于小表,Oracle建議通過全表掃描進行數(shù)據(jù)訪問,對于大表則應該通過索引以加快數(shù)據(jù)查詢,當然如果查詢要求返回表中大部分或者全部數(shù)據(jù),那么全表掃描可能仍然是最好的選擇。

  從V$SYSSTAT視圖中,我們可以查詢得到關于全表掃描的系統(tǒng)統(tǒng)計信息:

  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)指對于大表的全表掃描的次數(shù)。

  從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

  通常,如果一個數(shù)據(jù)庫的table scans (long tables)過多,那么db file scattered read等待事件可能同樣非常顯著,和以上數(shù)據(jù)來自同一個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

  數(shù)據(jù)庫內(nèi)部,很多信息和現(xiàn)象都是緊密相關的,只要我們加深對于數(shù)據(jù)庫的了解,在優(yōu)化和診斷數(shù)據(jù)庫問題時就能夠得心應手。

  Oracle通過一個內(nèi)部參數(shù)_small_table_threshold來定義大表和小表的界限。缺省的該參數(shù)等于2%的Buffer數(shù)量,如果表的大小小于該參數(shù)定義,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

  以上數(shù)據(jù)庫中,200正好約為Buffer數(shù)量的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

  所以要區(qū)分大小表(Long/Short)是因為全表掃描可能引起B(yǎng)uffer Cache的抖動,缺省的大表的全表掃描會被置于LRU的末端,以期盡快老化,減少Buffer的占用。從Oracle8i開始,Oracle的多緩沖池管理技術(Default/Keep/Recycle池)給了我們另外一個選擇,對于不同大小、不同使用頻率的數(shù)據(jù)表,從建表之初就可以指定其存儲Buffer,以使得內(nèi)存使用更加有效。

關鍵詞標簽:Oracle

相關閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列的語法 Oracle中使用alter table來增加,刪除,修改列的語法 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 誤刪Oracle數(shù)據(jù)庫實例的控制文件 誤刪Oracle數(shù)據(jù)庫實例的控制文件 為UNIX服務器設置Oracle全文檢索 為UNIX服務器設置Oracle全文檢索

相關下載

    人氣排行 oracle中使用SQL語句修改字段類型-oracle修改SQL語句案例 Oracle中使用alter table來增加,刪除,修改列的語法 ORACLE SQL 判斷字符串是否為數(shù)字的語句 ORACLE和SQL語法區(qū)別歸納(1) oracle grant 授權語句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法