enqueue HW wait 引起表空間突然大量擴充套件
我們在10.2.0.4上遇到過好幾次了,enqueue HW wait不僅堵塞了事務,表空間也一下被用了很多,後來每次都預留幾十GB的空間,但事務還是被堵塞,下面說說這個WAIT。
在高併發的oltp資料庫,平時150多的active session,資料庫的總session數會經常波動,可能從1000波動到1500或2000,幾分鐘後又回到1000左右。
一個表同時有大量的insert或update時,會有enq HW wait。因為insert/update會請求空間,而如果HWM下的free list 用完,沒有剩餘的資料塊時,請求段內的空資料塊,高水位往上移。而每個請求都需要HW enqeue。出現排隊,此時如果高水位之上沒有空餘空間了,會出現段空間擴充套件。等待段空間擴充套件會使佇列更長。
HW enqueue在非ASSM和ASSM都會出現,在我們的一個ASSM上的表,出現過段空間突然擴充套件9GB,同時表空間擴充套件15GB。可見ASSM oracle為了滿足這麼多HW enqueue 佇列,會一下擴充套件很多。
應對方法看後面
non ASSM的解決,調整_bump_highwater_mark_count :
In non-ASSM tablespaces, HWM is bumped up by 5 blocks at a time ( Actually, undocumented parameter _bump_highwater_mark_count controls this behavior and defaults to 5). Heavy inserts in to a table can result in increased HWM activity leading to HW enqueue contention. This issue is prevalent if the table has LOB columns or if the row length is big.
ASSM的解決:
oracle記錄了bug 6376915,不過按下面說法,應該只對LOB有用。
This fix causes ASSM LOB space to batch up reclaim instead of just reclaiming the requested/required number of LOB chunks. To enable this fix, set event 44951 to the maximum number of chunks that you would like to have reclaimed per attempt. The maximum allowed is 1024. Anything larger becomes 1024. However, if the requested amount of space is larger than the event’s value, the reclaim will be for the requested amount of space.
而如果表裡根本沒有LOB,這個event沒用,怎麼做。
能想到的是,低峰期手工擴充套件,防止高峰期HW enqueue對事務的阻塞,影響業務。
首先看看unused空間,我推測應該是HWM以上空間+free list的空間。所以要給unused多預留一些:
set serveroutput on size 10000;
DECLARE
su NUMBER;
sa NUMBER;
cp NUMBER;
BEGIN
dbms_space.object_space_usage('USER','TEST_TABLE','TABLE', NULL, su, sa, cp);
dbms_output.put_line('Space Used: ' || round(su/1024/1024,0));
dbms_output.put_line('Space Allocated: ' || sa/1024/1024);
dbms_output.put_line('space unused: ' || round(sa/1024/1024-su/1024/1024,0));
dbms_output.put_line('Chained Percentage: ' || TO_CHAR(cp));
END;
/
手工擴充套件,注意會使相關sql age out,所以要在低峰期跑。
alter table test_table allocate extent (size 1024m);
如果你用dbms_space.space_usage 檢視HWM下的塊情況,會發現擴充套件前後HWM下的空間並沒有變化。
而你用dbms_space.unused_space看這個段,發現unused bytes剛好是你擴充套件的空間。
而前面dbms_space.object_space_usage裡的unused space大於dbms_space.unused_space裡的unused bytes。
我推測dbms_space.unused_space裡的unused bytes是HWM以上的空餘空間,而dbms_space.object_space_usage裡的unused space是HWM以上的空間+free list得到的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/668365/viewspace-1037858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 擴充套件表空間套件
- 表空間自動擴充套件 AUTOALLOCATE 的擴充套件規律套件
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- ubuntu 擴充套件磁碟空間Ubuntu套件
- 查詢表空間是否具備自動擴充套件空間套件
- Oracle 10g 物理DataGuard擴充套件表空間Oracle 10g套件
- 表空間無法擴充套件問題處理套件
- mysql空間擴充套件 VS PostGISMySql套件
- 擴充套件邏輯卷空間套件
- 增加自動擴充套件臨時表空間及改變預設表空間套件
- Linux擴充套件LVM空間Linux套件LVM
- HP-UX擴充套件swap空間UX套件
- HP-UNIX擴充套件/tmp空間套件
- 擴充套件系統的磁碟空間套件
- 獲取表空間是否可自動擴充套件的SQL套件SQL
- 使用命令擴充套件vmdk磁碟空間套件
- 擴充套件表套件
- 大量insert引起的enq: HW - contention等待ENQ
- 擴充套件c盤空間有什麼辦法套件
- [10] 名稱空間擴充套件和鏈式呼叫套件
- VirtualBox下Linux(centos)擴充套件磁碟空間LinuxCentOS套件
- 虛擬磁碟空間滿後的擴充套件方法套件
- Linux 虛擬機器擴充套件磁碟空間Linux虛擬機套件
- linux建立新分割槽擴充套件磁碟空間Linux套件
- 【實驗】修改資料庫檔案為自動擴充套件以達到表空間自動擴充套件的目的資料庫套件
- PostgreSQL空間切割(st_split)功能擴充套件-空間物件網格化SQL套件物件
- 使用oracle procedure儲存過程自動擴充套件表空間空間tablespace_自動化運維Oracle儲存過程套件運維
- ORA-03206,當表空間不夠時,如何以新增資料檔案的方式擴充套件表空間套件
- Enq : HW-contention高水位線的擴充套件競爭ENQ套件
- 有限螢幕的無限空間 -從空間角度談移動介面擴充套件套件
- 通過exp突然增長看錶的擴充套件套件
- 大檔案表空間受作業系統限制無法自動擴充套件作業系統套件
- vm exsi 擴充套件windows虛擬機器磁碟空間套件Windows虛擬機
- 手工建庫後表空間資料檔案非自動擴充套件引起的錯誤:ORA-01653: unable to extend* in tablespace*套件
- 擴充linux swap空間Linux
- 表空間擴充套件過程 停電導致異常中斷, 無法啟動套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Brtools擴oracle表空間Oracle