oracle筆記整理11——效能調優之oracle等待事件與表關聯
1. oracle等待事件
1) 分類
主要分為兩大類:空閒(idle)等待事件和非空閒(non-idle)等待事件,在會話級別可以在檢視V$SESSION_WAIT中檢視當前等待的時間。
2) 空閒事件
空閒事件指oracle正等待某種工作,不用過多關注。
常見的空閒等待事件:dispatcher timer,pipe get,slave wait,
sql net message from/to client,sql net more data to client
3) 非空閒等待事件
常見的空閒等待事件:
a) db file scattered read:檔案分散多塊讀取
這個事件表明使用者程式正在一次I/O讀多塊資料到Buffer Cache中,等待直到I/O呼叫返回,通常顯示與全表掃描(full table scan / FTS)相關或者IFFS (index fast full scan) 快速索引全掃描(把索引鏈切割成很多份,多塊並行讀取)的等待,當全表掃描時,基於效能的考慮,資料會多塊讀取分散(scattered)讀入buffer cache,出現該事件並不一定就表示存在效能問題,但如果該事件的等待的時間太長,就要仔細檢視了。
b) db file sequential read
單個資料塊/索引塊讀取到連續的記憶體中時會發生,常見於存在索引的情況下,可能存在多表連線,表的連線順序有問題,沒有正確使用驅動表,或者存在不適合的索引,同樣的,出現該事件並不一定就表示存在效能問題,但如果該事件的等待的時間太長,就要仔細檢視了。
c) free buffer:釋放緩衝區
表明系統正在等待記憶體中的可用空間,有可能是低效率的SQL語句、DBWR程式寫快取資料太慢(有可能存在併發操作,dbwr來不及寫入大量的快取資料塊到資料檔案,導致快取空間無法及時釋放 )、緩衝區太小。
2. 表關聯
1) 連線方式
a) 內連線,A inner join B on 即等值連線。
b) 左外連線,A left (outer) join B on / a.id = b.id(+)
c) 右外連線,A right (outer) join b on / a.id(+) = b.id
d) 全外連線,A full (outer) join B
2) 表之間的連線
a) 排序,合併連線(sort merge join,SMJ)
兩表連線時,對兩表結果集進行order by排序,之後進行關聯合並,資料讀操作少,只訪問一次表,但是排序操作開銷太大。
b) 巢狀迴圈(nested loops,NL)
兩表連線就相當於二重迴圈(進而產生了驅動表和被驅動表的概念),會產生大量的讀操作,可以通過索引以及驅動表的選擇來優化;可以先返回已經連線的行,而不必等待所有的連線操作處理完才返回資料,所以返回結果集的響應時間是最快的,當驅動表返回結果集較小且連線列上有索引時,效能最好。
c) 雜湊連線(hash join,HJ)
oracle 引入的 hash 連線, 能夠解決巢狀迴圈連線中大量隨機讀的問題, 同時解決了排序合併連線中排序代價過大的問題,驅動表返回結果集資料量較大時綜合效能最好。大多數情況下,比smj和nl連線方式效能更好。
3) 驅動表(driving table)
又稱為外層表(outer table),所以該表為小表(實際為應用查詢的限制條件之後,返回較少資料集的表)。
4) 被探查表(probed table)
又稱為內層表(inner table),從驅動表中得到具體一行資料之後,在被探查表中尋找符合連線條件的行,所以該表應為大表(實際上為返回較大row source的表)且相應的列上應該有索引。
相關文章
- oracle筆記整理10——效能調優之臨時表與物化檢視Oracle筆記
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- oracle筆記整理14——效能調優之oracle執行計劃Oracle筆記
- oracle筆記整理12——效能調優之hint標籤Oracle筆記
- 【效能調整】等待事件(五)log相關等待事件
- Oracle效能調整筆記Oracle筆記
- 筆記: Oracle 11g效能調整(11.2)目錄筆記Oracle
- ORACLE效能優化筆記Oracle優化筆記
- oracle效能調整筆記[zt]Oracle筆記
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- oracle效能調優Oracle
- 讀書筆記-高階owi與oracle效能調整-oracle internal筆記Oracle
- oracle之 調整 I/O 相關的等待Oracle
- ORACLE11G 效能調優學習Oracle
- 【效能調整】等待事件(一)事件
- 【效能調整】等待事件(二)事件
- oracle等待事件Oracle事件
- Oracle 等待事件Oracle事件
- 【效能調整】等待事件(三) 常見等待事件(一)事件
- 【效能調整】等待事件(四) 常見等待事件(二)事件
- 【等待事件】ORACLE常見等待事件事件Oracle
- Oracle 效能調優 概述Oracle
- oracle之 db file sequential read等待事件優化思想Oracle事件優化
- Oracle效能調優之FreeList和HWMOracle
- Oracle效能調優 之FreeList和HWMOracle
- Oracle效能優化視訊學習筆記-診斷和調優工具Oracle優化筆記
- 【效能調整】等待事件(七) io相關等待查詢指令碼事件指令碼
- js效能優化相關內容筆記整理JS優化筆記
- oracle 記憶體引數調整優化相關傾力整理Oracle記憶體優化
- 讀書筆記-高階owi與oracle效能調整-io筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-segment筆記Oracle
- 讀書筆記-高階owi與oracle效能調整-transaction筆記Oracle
- Oracle等待事件之enq: TM – contentionOracle事件ENQ
- oracle等待事件之enq: CF – contentionOracle事件ENQ
- Oracle Mutex 等待事件OracleMutex事件
- oracle等待事件一Oracle事件
- 【Oracle概念】-等待事件Oracle事件
- Oracle 等待事件 一Oracle事件