深入解析Oracle學習筆記(第九章)
等待事件 oracle7 開始引入
v$event_name 記錄當前資料庫支援的等待事件及其基本資訊
desc v$event_name
p1 p2 p3 不同等待事件引數其意義不同
wait_class(等待事件分類)
空閒等待 非空閒等待(調整資料庫的時候需要研究的)
v$system_wait_class 檢視顯示各類主要等待事件的等待時間和等待次數等資訊。分類統計。
V$SESSION 檢視記錄的是資料庫當前連線的Session資訊。
V$SESSION_WAIT 檢視記錄的是當前資料庫連線的活動Session正在等待的資源或
事件資訊。
V$SYSTEM_EVENT
息, 所以
Oracle ᨀ供另外一個檢視
V$SYSTEM_EVENT 來記錄資料庫自啟動以來所有等待事
件的彙總資訊。 通過
V$SYSTEM_EVENT 檢視, 可以迅速地獲得資料庫執行的總體概況。
10g 開始 v$session_wait整合到v$session 中。還增加了blocking_session欄位。10gR2又增加了sql_trace相關資訊。
11gR1又增加了sql_exec_start sql_exec_id prev_exec_start prev_exec_id等欄位
v$session_event 同一會話在其整個週期等待事件的累積,因為v$session,v$session_wait都是動態變化的。和會話的生命週期相關。
v$system_event 資料庫整體等待資訊的累積。
v$event_histogram 同一等待事件,不同等待時長的柱狀分佈圖。比如shared pool latch 10毫秒以內的等待有幾次,200毫秒以上的等待有幾次。
oracle 11g 實時sql監控 (通過在v$session中增加sql_exec_start等欄位實現)
11g之前,某個操作超過6s,會被記錄在v$session_longops檢視中
11g開始,超過5s的CPU或者IO等操作,會被記錄在v$sql_monitor檢視中,還包含一些sql執行的統計資訊,如buffer gets等。結合v$sql_plan_monitor檢視可以進一步查詢sql的執行計劃等資訊。每秒重新整理一次,接近實時。sql執行完畢,資訊不會被立即刪除,而是會在這兩個檢視中保留1分鐘。
根據session id獲取當前session正在執行的sql語句:
SELECT sql_text FROM v$sqltext a
WHERE a.hash_value = (SELECT sql_hash_value FROM v$session b WHERE b.SID = '&sid')
ORDER BY piece ASC;
AWR報告 $ORACLE_HOME/rdbms/admin/awrrpt.sql AWR比較報告 $ORACLE_HOME/rdbms/admin/awrddrpt.sql AWR資訊的匯入匯出 awrextr.sql awrload.sql oracle 10g ADDM db file sequential read(資料檔案順序讀取),與單個數據塊相關的讀取操作。大多數情況下是讀取一個索引塊或者通過索引讀取一個數據塊。 如果此等待事件比較顯著,可能是在多表連線中,表的連線順序存在問題,驅動表選擇錯誤。或者使用索引並非總是最好的選擇。 但是在一個編碼規範,調整良好的資料庫中,這個等待事件很大通常是正常的。——————定期的資料整理和空間回收是必須的。 db file scattered read 離散讀,將儲存上連續的資料塊離散的讀取到多個不連續的記憶體位置(併發,效能考慮),通常是多塊讀。 DB_FILE_MULTIBLOCK_COUNT 應用問題,或者索引缺失。 direct path read/write 直接路徑讀寫。直接路徑讀通常發生在oracle直接讀資料到程序PGA,而不經過SGA。通常是磁碟排序IO,在DSS系統中常見,OLTP中意味著應用有問題。 直接路徑寫通常發生在直接從PGA寫資料到資料檔案或臨時檔案,繞過SGA。直接路徑載入,並行DML,磁碟排序等。 存在過多的磁碟排序,會導致臨時表空間操作頻繁。 重要效能指標:記憶體排序率 in-memory-sort ratio = sort(memory)/ sort(disk) + sort(memory) 9i之前,增加sort_area_size,9i開始,增加P_A_T,避免磁碟排序。同時檢查應用,避免過度排序。 並行操作也會direct path read/write。但並行不一定帶來效能提升。 10g開始 direct path read/write temp 日誌檔案相關等待: log file switch 日誌切換,在此期間所有DML處於停頓狀態,直至切換完成 兩個子事件 log file switch(archiving needed) 歸檔未完成,磁碟IO,log_archive_max_processes。 log file switch (checkpoint incomplete)髒資料沒寫完,不能覆蓋日誌檔案,DBWR。 log file sync 使用者提交或回滾資料,LGWR將重做由緩衝寫入重做日誌的過程。LGWR寫出太慢,或者提交過於頻繁(LGWR過度啟用,系統產生redo很多,但每次寫的較少)。 log file single write 寫日誌檔案頭塊相關,通常發生在日誌切換或增加新的組成員期間。 log file parallel write 從log buffer寫redo到日誌檔案,主要指常規操作(相對於log file sync的commit操作)。 log buffer space 資料庫產生日誌的速度比LGWR的寫出速度快,或者日誌切換慢發生等待。通常表明log buffer設定過小,考慮增大buffer大小或者增加日誌檔案大小。或者磁碟IO出問題。 enqueue(佇列等待) 一種保護共享資源的鎖定機制。排隊機制,FIFO。 10g之前,是一組鎖定事件的集合。 10g之後,對於佇列等待進行了細分。 oracle的鎖按型別可以分為排它鎖(X)和共享鎖(S)。 oracle通過enqueue等待來記錄鎖定,通過latch free等待事件來記錄閂。 最重要,最常見的鎖定:TM 、 TX TX:事務鎖,在行級獲得。每行都存在一個鎖定為(lb-Lock Byte) ,用於判斷該記錄是否被鎖定,同時在資料塊的頭部存在一個稱為ITL的結構,用於記錄事務等資訊。只有排他模式,沒有共享模式。 TM:表級鎖,可以通過手工發出lock命令獲得,或者通過DML操作以及select for update獲得,表級鎖可以防止其他程序對錶加X排他鎖,防止在對資料修改時,其他任務通過DDL來修改表結構或者執行truncate、drop等操作。 當執行DML操作室,首先加TM鎖,如果能獲得鎖定,則繼續加TX事務鎖。 最常見的鎖定:MR與AE MR:介質恢復鎖(media recovery),使用者保護資料庫檔案,使得檔案在資料庫開啟,表空間online時不能執行恢復。 AE:11g開始,每個登入資料庫的會話都會獲得一個AE鎖。 ST:空間事務鎖,用於空間管理和字典管理的表空間的區間分配。 latch free(閂鎖釋放): 低階排隊機制(序列),用於保護SGA中共享記憶體結構。快速獲取釋放的記憶體鎖,用於防止共享記憶體被多個使用者同時訪問。 v$latch 檢視記錄不同型別latch統計資訊 按獲取和等待方式不同進行分類:willing-to-wait (願意等待型別) 、 immediate(立即型別) willing-to-wait :如果所請求的latch不能立即得到,則等待一段很短時間再請求,一直重複此過程直到獲得latch。
immediate:所請求的latch不能立即得到,程序不再等待,繼續執行下去。
gets 、 misses 、 sleeps、 immediate_gets 、 immediate_misses 獲得 等待 休眠 立即獲得 立即模式不成功 willing-to-wait (願意等待型別)模式時,如果沒有獲得latch,且系統存在多個CPU,則程序圍繞該latch進行自旋(spin),自旋的過程中,程序會一直持有CPU。如果直接採用sleep的方式,引起的上下文切換會非常昂貴。
immediate型別的latch通常是因為存在多個可用的latch,比如常見的redo copy latch。另外一個原因是latch有level的概念。 10g開始,latch被細分。 10g開始引入mutex機制,來代替傳統的latch機制。更輕量,所需指令數更少,佔用空間更小。使用更少的CPU資源獲得更好的效能。