隊列
隊列(enqueue)是一種共用記憶體結構,它總是和事物和會話相關,用於序列化地訪問資料庫資源。
隊列類型
Oracle中有很多類型的隊列,下面是常用的一些類型:
- CF 隊列: CF隊列是控制檔案隊列,當並行的存取控制檔案時會產生CF隊列。當有讀取控制檔案的任何活動時,都可以看到CF隊列,例如歸檔重做日誌、重做日誌切換和begin backup命令。
- CI 隊列: CI隊列是跨越執行個體的隊列並且在會話執行跨越執行個體的調用時產生,例如通過database link查詢。
- FB 隊列: FB隊列是塊格式化隊列,只有當資料庫使用ASSM時用到。通常的FB隊列和緩衝區忙有關,尤其是ASSM在大量的DML下趨向於引起效能問題時。
- HV 隊列: HV隊列類似於HW隊列,但是是用於直接路徑並行Insert的。
- HW 隊列: HW隊列在競爭性的向同一個表中插入資料並且試圖同時增加表的高水位線時產生。有些時候,通過增加freelists或者把段管理轉為ASSM模式可以移除HW隊列。
- PE 隊列:PE隊列是參數隊列,當執行alter system或者alter session時產生。
- PS 隊列:PS隊列是並行從屬同步化隊列,只有執行Oracle並行查詢時才會看到。PS隊列在為OPQ分配從屬進程的預先處理階段發生問題是產生。
- RO 隊列: RO隊列是對象重用隊列, 當執行跨執行個體的truncate table和drop table的ddl命令時產生。
- SQ 隊列: SQ隊列是Sequence緩衝隊列,用於串列訪問Oracle Sequence
- SS 隊列: SS隊列是排序段隊列,當一個進程執行大規模的排序操作時產生。
- ST 隊列: 在分區環境中,當同時建立大量的分區時可以看到ST隊列。
- TC 隊列: TC隊列和DBWR後台進程相關並且在執行alter tablespace命令時產生。當進行並行全表掃描時也可以看到TC隊列,這時記錄不會被載入到資料緩衝中,而是直接存取。
- TM 隊列: TM隊列和交易管理相關,在一些重組織活動需要顯式的封鎖整個表示可以看到。
- TQ 隊列: TQ隊列是查詢表隊列並且在Data dump操作時產生。
- TS 隊列: TS隊列是臨時段隊列,該隊列在磁碟排序時產生。
- TT 隊列: TT隊列用於在並行資料表空間操作時防止發生死結。TT隊列在並行建立資料表空間和並行時間點恢複(PITR)時產生。
- TX 隊列: TX隊列是事務隊列,通常和緩衝區忙等待相關,在這種情況下,多個事務試圖更新同一個資料區塊。
- UL 隊列: UL隊列是使用者鎖隊列並且在dbms_lock.request請求鎖時產生。在Data Pump時可以看到該隊列。
- US 隊列: US隊列在Oracle自動復原段管理時在離線和線上狀態之間切換時產生。