SMON功能(二):合并空閑區間
SMON的作用還包括合并空閑區間(coalesces free extent)
觸發場景
早期Oracle采用DMT字典管理表空間,不同于今時今日的LMT本地管理方式,DMT下通過對FET$和UET$2張字典基表的遞歸操作來管理區間。SMON每5分鐘(SMON wakes itself every 5 minutes and checks for tablespaces with default pctincrease != 0)會自發地去檢查哪些默認存儲參數pctincrease不等于0的字典管理表空間,注意這種清理工作是針對DMT的,而LMT則無需合并。SMON對這些DMT表空間上的連續相鄰的空閑Extents實施coalesce操作以合并成一個更大的空閑Extent,這同時也意味著SMON需要維護FET$字典基表。
現象
以下查詢可以檢查數據庫中空閑Extents的總數,如果這個總數在持續減少那么說明SMON正在coalesce free space:
SELECT COUNT(*) FROM DBA_FREE_SPACE;
在合并區間時SMON需要排他地(exclusive)持有ST(Space Transaction)隊列鎖, 其他會話可能因為得不到ST鎖而等待超時出現ORA-01575錯誤。同時SMON可能在繁瑣的coalesce操作中消耗100%的CPU。
如何禁止SMON合并空閑區間
可以通過設置診斷事件event=’10269 trace name context forever, level 10′來禁用SMON合并空閑區間(Don’t do coalesces of free space in SMON)
10269, 00000, "Don't do coalesces of free space in SMON" // *Cause: setting this event prevents SMON from doing free space coalesces alter system set events '10269 trace name context forever, level 10';

浙公網安備 33010602011771號