****欧欧美毛片4,国产午夜精品视频,97视频在线观看免费视频,久久七国产精品

數據恢復咨詢熱線:400-666-3702??

歡迎訪問南京兆柏數據恢復公司,專業數據恢復15年

兆柏數據恢復公司

?常見問題

?當前位置: 主頁 > 常見問題

詳解Oracle數據庫SMON進程

瀏覽量: 次 發布日期:2023-10-14 12:11:52

詳解Oracle數據庫SMON進程

Oracle數據庫的SMON(system monitor process)--系統監控后臺進程,有時候也被叫做system cleanup process,這么叫的原因是它負責完成很多清理(cleanup)任務?;居袑W習過Oracle基礎知識的都或多或少對該background process的功能有所了解。

很多時候我們只是知道有這么個進程,但是對他干的一些具體內容可能不是很了解,今天主要分享下這方面內容。

重要的后臺進程,實例啟動時負責實例的恢復。還會清理不再被使用的臨時段。在并行服務器環境下,該進程對有故障的實例、故障CPU進行實例恢復。SMON會消耗很多的CPU。SMON會被周期性的喚醒,執行一些事務(下面介紹下工作內容)。

SMON是個兢兢業業的家伙,它負責完成一些列系統級別的任務。與PMON(Process Monitor)后臺進程不同的是,SMON負責完成更多和整體系統相關的工作,這導致它會去做一些不知名的”累活”,當系統頻繁產生這些”垃圾任務”,則SMON可能忙不過來。

1、清理臨時表空間

舉例:當建立一個索引,在創建期間分配給索引的擴展區被標識為temporary。如果create index會話因某些原因異常 中斷,SMON會負責清理。其它操作創建的臨時擴展區,SMON同樣是會這樣處理的。

可以通過以下查詢了解數據庫中Temporary Extent的總數,在一定時間內比較其總數,若有所減少那么說明SMON正在清理Temporary segment

SELECT COUNT(*) FROM DBA_EXTENTS WHERE SEGMENT_TYPE='TEMPORARY';

也可以通過v$sysstat視圖中的”SMON posted for dropping temp segment”事件統計信息來了解SMON收到清理要求的情況:

SQL> select name,value from v$sysstat where name like '%SMON%';

2、清理回滾段

SMON將執行回滾段的自動收縮到它的optimal尺寸(前提是已經被設置了)。

3、合并空閑空間

舉例:如果正在使用數據字典管理表空間,SMON會負責把那些在表空間中空間的并且相互近鄰的extent接合成一個 較大的空閑擴展區(前提是默認的pctincrease設置為非零的存儲子句的字典管理表空間)。

以下查詢可以檢查數據庫中空閑Extents的總數,如果這個總數在持續減少那么說明SMON正在coalesce free space:

SELECT COUNT(*) FROM DBA_FREE_SPACE;

揚州數據恢復

在合并區間時SMON需要排他地(exclusive)持有ST(Space Transaction)隊列鎖, 其他會話可能因為得不到ST鎖而等待超時出現ORA-01575錯誤。同時SMON可能在繁瑣的coalesce操作中消耗100%的CPU。

4、將不可用文件事務恢復為活動

SMON的作用還包括清理死事務:Recover Dead transaction。當服務進程在提交事務(commit)前就意外終止的話會形成死事務(dead transaction),PMON進程負責輪詢Oracle進程,找出這類意外終止的死進程(dead process),通知SMON將與該dead process相關的dead transaction回滾清理,并且PMON還負責恢復dead process原本持有的鎖和latch。

舉例:假設如果文件可能已經不可用或沒裝載到磁盤上時。SMON將會恢復它。這個類似于啟庫期間。文件不能用于 恢復,SMON恢復在實例恢復期間跳過的故障事務。

fast_start_parallel_rollback參數決定了SMON在回滾事務時使用的并行度,若將該參數設置為false那么并行回滾將被禁用,若設置為Low(默認值)那么會以2*CPU_COUNT數目的并行度回滾,當設置為High則4*CPU_COUNT數目的回滾進程將參與進來。當我們通過以下查詢發現系統中存在大的dead tranacation需要回滾時我們可以通過設置

fast_start_parallel_rollback為HIGH來加速恢復。

5、RAC故障節點的實例恢復

舉例:集群環境下,當一個節點實例崩潰時,集群中的其它幾點將開啟故障的實例的重做日志文件,為故障實例執行 所有數據的恢復。

6、清理OBJ$基表

SMON的作用還包括清理obj$數據字典基表(cleanup obj$)

OBJ$字典基表是Oracle Bootstarp啟動自舉的重要對象之一。

SQL> select sql_text from bootstrap$ where sql_text like 'CREATE TABLE OBJ$%';

OBJ$基表是一張低級數據字典表,該基表幾乎對庫中的每個對象(表、索引、包、視圖等)都包含有一行記錄。很多情況下,這些條目所代表的對象是不存在的對象(non-existent),引起這種現象的一種可能的原因是對象本身已經被從數據庫中刪除了,但是對象條目仍被保留下來以滿足消極依賴機制(negative dependency)。因為這些條目的存在會導致OBJ$表不斷膨脹,這時就需要由SMON進程來刪除這些不再需要的行。SMON會在實例啟動(after startup of DB is started cleanup function again)時以及啟動后的每12個小時執行一次清理任務(the cleanup is scheduled to run after startup and then every 12 hours)。

可以通過以下查詢來了解obj$基表中NON-EXISTENT對象的條目總數(type#=10),若這個總數在不斷減少說明smon正在執行清理工作

select trunc(mtime), substr(name, 1, 3) name, count(*)

from obj$

where type# = 10

and not exists (select * from dependency$ where obj# = p_obj#)

group by trunc(mtime), substr(name, 1, 3);

select count(*)

from user$ u, obj$ o

where u.user#(+) = o.owner#

and o.type# = 10

and not exists

(select p_obj# from dependency$ where p_obj# = o.obj#);

7、回滾段的脫機

當實際應用中需要對active事務的回滾段進行脫機或不可用時,回滾段不是真正意義上的脫機,它被標志為“offline”,在后臺進程中,SMON將周期性的使它真正脫機,直到完成為止。

$ps -ef|grep 'ora_.*' --可以查看運行進程有哪些

--進程命名格式:ora_進程具體名字_實例名

陸家嘴數據恢復

Oracle數據庫smon進程主要做的幾個方面就這些了,實際上它還有很多的維護基表內容,有興趣可以深入研究下。后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~

相關推薦