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

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

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

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

  通常對(duì)于小表,Oracle建議通過(guò)全表掃描進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn),對(duì)于大表則應(yīng)該通過(guò)索引以加快數(shù)據(jù)查詢(xún),當(dāng)然如果查詢(xún)要求返回表中大部分或者全部數(shù)據(jù),那么全表掃描可能仍然是最好的選擇。

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

  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)指對(duì)于小表的全表掃描的此時(shí);table scans (long tables)指對(duì)于大表的全表掃描的次數(shù)。

  從Statspack的報(bào)告中,我們也可以找到這部分信息:

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

  談情說(shuō)案分集劇情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

  通常,如果一個(gè)數(shù)據(jù)庫(kù)的table scans (long tables)過(guò)多,那么db file scattered read等待事件可能同樣非常顯著,和以上數(shù)據(jù)來(lái)自同一個(gè)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ù)庫(kù)內(nèi)部,很多信息和現(xiàn)象都是緊密相關(guān)的,只要我們加深對(duì)于數(shù)據(jù)庫(kù)的了解,在優(yōu)化和診斷數(shù)據(jù)庫(kù)問(wèn)題時(shí)就能夠得心應(yīng)手。

  Oracle通過(guò)一個(gè)內(nèi)部參數(shù)_small_table_threshold來(lái)定義大表和小表的界限。缺省的該參數(shù)等于2%的Buffer數(shù)量,如果表的大小小于該參數(shù)定義,Oracle認(rèn)為該表為小表,否則Oracle認(rèn)為該表為大表。

  我們看一下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ù)庫(kù)中,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)是因?yàn)槿頀呙杩赡芤養(yǎng)uffer Cache的抖動(dòng),缺省的大表的全表掃描會(huì)被置于LRU的末端,以期盡快老化,減少Buffer的占用。從Oracle8i開(kāi)始,Oracle的多緩沖池管理技術(shù)(Default/Keep/Recycle池)給了我們另外一個(gè)選擇,對(duì)于不同大小、不同使用頻率的數(shù)據(jù)表,從建表之初就可以指定其存儲(chǔ)Buffer,以使得內(nèi)存使用更加有效。

關(guān)鍵詞標(biāo)簽:Oracle

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

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

相關(guān)下載

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