High Waits on 'Db File Sequential Read'
最近某些系統AWR的top 5中“Db File Sequential Read”佔據的時間百分比非常大,通常這種等待事件是一種正常的。但當前系統效能是有些問題的,併發量大,有些緩慢,因此需要判斷這種等待事件是否能夠減少。MOS有幾篇關於這種等待事件的介紹,這是其中一篇。
High Waits on 'Db File Sequential Read' Due to Table Lookup Following Index Access (文件 ID 875472.1)
即使執行計劃已經是最優的了,但一次查詢仍能夠等待“db file sequential read'”這種事件很長的時間。通常是因為索引掃描的結果集非常大。例如:
SELECT D FROM BIG_TABLE WHERE A = 1253 AND B in ('CA', 'CO') AND C > 210 ;
Rows Row Source Operation ------- --------------------------------------------------- 215431 TABLE ACCESS BY INDEX ROWID BIG_TABLE (cr=880191 pr=430780 pw=0 time=2293667056 us) <<< 3582275 INDEX RANGE SCAN BIG_TABLE_IDX (cr=664748 pr=218595 pw=0 time=352506821 us) Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------- Waited ---------- ------------ SQL*Net message to client 14363 0.00 0.02 db file sequential read 461688 1.15 2254.55 <<< SQL*Net message from client 14363 0.01 9.77 SQL*Net break/reset to client 1 0.00 0.00 ...
在大多數這樣的例子中,執行查詢語句在“TABLE ACCESS BY INDEX ROWID”上的等待要比INDEX SCAN上需要更多的。這是因為隨機訪問錶行的代價要比索引掃描更大。
為此,可以有以下幾種方法除錯:
1. 檢查是否有更好的索引或執行計劃。可能需要重新設計索引。
2. 嘗試全表掃描。全表掃描通常比索引掃描要快,儘管CBO成本比索引掃描的成本高。
SELECT /*+ FULL(BIG_TABLE) */ D
FROM BIG_TABLE
WHERE A = 1253
AND B in ('CA', 'CO')
AND C > 210 ;
3. 如果僅僅有很少的列出現在SELECT和WHERE子句中,可以考慮為查詢建立一個複合索引避免回表。
例如:
CREATE INDEX
注意:僅針對SELECT語句有效。如果是UPDATE語句,這種做法可能沒用。
4. 將表移動到更大block塊大小的表空間。更大的block塊會有更多的行,所以對減少block塊IO會有幫助。重新組織表也會有幫助,因為這樣做可以讓索引有一個更小的clustering聚類因子。
5. 可以考慮增加buffer cache的大小,以至於可以快取更多的塊大小。如果表是頻繁訪問的,使用keep buffer池也是一個不錯的選擇。
6. 考慮使用IOT(索引組織表)。IOT可能減少IO,原因就是他會將資料儲存於一個B樹索引結構。例如,如果A列是表BIG_TABLE的主鍵,可以按照如下方法建立IOT:
create table BIG_TABLE (A number primary key, B char(2), C number, D varchar2(10)) organization index;
7. 如果伺服器有足夠的空閒資源(CPU,記憶體),考慮使用並行執行。這種方式不會減少IO,但是有助於降低執行時間。
8. 較差的磁碟IO也可能是一個原因。可以提高表所在磁碟裝置的IO。這可能需要系統管理員的協助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-774676/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【等待事件】db file sequential read事件
- db file sequential read等待事件事件
- 等待事件db file sequential read、db file scattered read和direct read的區別事件
- 【TUNE_ORACLE】等待事件之IO等待“db file sequential read”Oracle事件
- [20181130]control file sequential read.txt
- Oracle:db file scattered readOracle
- [20181129]大量的control file sequential read.txt
- 【等待事件】db file scattered read事件
- db file scattered read等待事件事件
- I/O上的等待事件 —— control file sequential read/control file parallel write事件Parallel
- 0316理解db file parallel read等待事件Parallel事件
- 0322理解db file parallel read等待事件2Parallel事件
- [20210315]理解db file parallel read等待事件3.txtParallel事件
- [20210315]理解db file parallel read等待事件4.txtParallel事件
- 【TUNE_ORACLE】等待事件之IO等待“db file scattered read”Oracle事件
- read content in a text file in pythonPython
- db block gets 與 consistent read getsBloC
- C# read excel file via ExcelDataReaderC#ExcelLDA
- The Db2 Recovery History FileDB2
- iis 0x80070032 Cannot read configuration file because it exceeds the maximum file size
- 每日一個 Golang Packages 06/07 os File Read wtiteGolangPackage
- idea怎麼修改檔案的file is read-onlyIdea
- 《Object Storage on CRAQ: High-throughput chain replication for read-mostly workloads》論文總結ObjectAI
- Unable to read TLD "META-INF/c.tld" from JAR fileJAR
- 【問題處理】ORA-00376 file xx cannot be read at this time
- remount of /system failed: Read-only file system原因及解決REMAI
- [重慶思莊每日技術分享]-dg環境測試 db_create_file_dest和db_file_name_convert引數
- Oracle Enqueue WaitsOracleENQAI
- Oracle RAC 重置db_recovery_file_dest_size引數Oracle
- [20200416]ORA-01187 cannot read from file because it failed verification tests.AI
- 【TUNE_ORACLE】等待事件之IO等待“db file parallel write”Oracle事件Parallel
- Selenium等待事件Waits事件AI
- Oracle Free Buffer WaitsOracleAI
- Oracle Buffer Busy WaitsOracleAI
- An Analysis of Sequential Recommendation Datasets
- SEQUENTIAL 隨筆備份
- Pytorch --- nn.Sequential()模組PyTorch
- macOS 無法sudo建立資料夾返回Read-only file system問題解決Mac
- log_archive_dest與log_archive_dest_n與USE_DB_RECOVERY_FILE_DESTHive