SMON的做用還包括合併空閒區間(coalesces free extent)html
觸發場景數據庫
早期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$字典基表。oracle
現象this
如下查詢能夠檢查數據庫中空閒Extents的總數,若是這個總數在持續減小那麼說明SMON正在coalesce free space:spa
SELECT COUNT(*) FROM DBA_FREE_SPACE;
在合併區間時SMON須要排他地(exclusive)持有ST(Space Transaction)隊列鎖, 其餘會話可能由於得不到ST鎖而等待超時出現ORA-01575錯誤。同時SMON可能在繁瑣的coalesce操做中消耗100%的CPU。htm
如何禁止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';