這篇文章主要介紹“怎么理解Oracle RAC分布式資源管理”,在日常操作中,相信很多人在怎么理解Oracle RAC分布式資源管理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解Oracle RAC分布式資源管理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
因為集群的分布式架構,通過進程間的通信完成資源的共享、分發、同步對分布式鎖管理實現就變得尤為必要。 有了這種通信的存在,在與集群中的其他實例上LMD進程完成通信鎖定一個資源后,無論有多少DLM實例發生故障,都不會丟失有關鎖資源的重要信息。但是需要注意的一點是數據庫的崩潰恢復(能夠恢復在中止實例的緩沖區高速緩存中丟失的塊)不是DLM的功能,塊的全局高速緩存處理仍然使用相同的“寫入前刷日志”規則來確保持久化。通過前面系列文章我們知道GRD或DLM是由GES組件和GCS組建組成,而這些功能的進程(LMON、LMS、LMD等)實現我們也有了大致的了解?,F在我們來更進一步的了解這些進程的函數實現和參數調整。
DLM存在于群集的每個實例中。
- 協調不同實例之間的請求和對共享資源的訪問。
- 保存集群中所有鎖的清單。
- 資源可用時授予和通知進程。
- 當其他進程請求鎖時通知鎖的所有者。
容錯:DLM可以承受n-1個節點故障。
死鎖檢測:DLM檢測并報告死鎖。
LMD進程:
LMD0是DLM的核心,LMD0處理所有鎖定操作和資源創建,檢測死鎖以及向其他LMD0發送消息。LMD0的處理統計信息可以通過兩個視圖V$DLM_CONVERT_LOCAL和V$DLM_CONVERT_REMOTE查看。統計信息由初始化參數timed_statistics控制,在11g版本默認為TRUE。
假設當前在轉換隊列上等待的鎖定符合授權隊列,則LMD會使用move-scan-convert流程進行定期檢查。
LMD0的主循環:kjmdm
? lock db鎖定:
- 停止任何死鎖檢測:kjdddei
- 鎖定并重置:kjfzfcl
在鎖定狀態下,無法從DLM獲取任何鎖定或創建任何新資源。在重構期間鎖定整個GRD,以便可以快速從節點故障中恢復。
? lock db解鎖:
- 檢測鎖轉換:kjcvscn。
- 死鎖檢測:kjddits / kjddscn。
- 清理恢復域:kjprsem。
- 更新統計信息:kjxstc。
- 發送流控制消息:kjctssb。
LMON進程:
由前面系列文章我們知道LMON進程主要負責整個數據庫集群層面的一致性關系(CGS),監控整個集群的全局隊列和資源。根據前面DLM緩存資源和鎖定結構的介紹。當集群存在不再需要的資源時就會將他放置在一個空閑列表上。然后LMON調用kjrchc清除資源的DLM緩存。
LMON進程的使用的主要函數如下:
- LMON的主循環:kjfcln
- 偵聽本地消息:kjcswmg
- 響應重構事件:kjfcrfg
- 清除GES緩存:kjrchc
LMS進程:
LMS是整個Cache Fusion體系最活躍和最忙碌的進程。它負責維護GRD中的數據塊資源信息。
LMS進程數由_lm_lms確定默認值為max(#CPU/ 4,2)
1.掃描具有可授予轉換鎖的PCM資源。
2.處理降級轉換隊列由kclpbi處理。
3.如果消息正在排隊并且超過_side_channel_batch_timeout參數設置的時間,則flush消息。
4.處理PCM鎖的遠程消息。
GES資源和鎖
GES資源即non-PCM資源的初始分配數量可以通過查詢隱含參數_lm_ress。如果用盡,則可以在shared_pool中申請分配更多資源。ges資源的初始分配,使用和限制信息可以通過v$resource_limit的ges_ress值獲得(SELECT * FROM V$RESOURCE_LIMITWHERE RESOURCE_NAME LIKE 'ges%' ;)
默認情況下_lm_ress=1.1 * ( localres +(number_of_instance-1) * localres / number_of_instance )
localres = processes + dlm_locks + transactions+ enqueue_resources+ db_files+7+
parallel_max_servers *cluster_database_instance+ parallel_max_servers + cluster_database_instance+200
GES資源鎖初始分配數量可以通過查詢隱含參數_lm_locks。同樣的如果用盡,則可以在shared_pool中申請分配更多鎖資源。ges鎖的初始分配,使用和限制信息可以通過v$resource_limit的ges_locks值獲得(SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'ges%' ;)
默認情況下_lm_locks=(localres+_enqueue_locks)+ (number_of_instance-1 * (localres+_enqueue_locks) / number_of_instance)
localres = processes + dlm_locks +transactions + enqueue_resources + db_files + 7 +
parallel_max_servers *cluster_database_instance+ parallel_max_servers + cluster_database_instance+200
GCS資源和鎖
GCS資源即PCM資源的初始分配數量可以由隱含參數_gcs_resources 配置或默認max(1.1 * _db_block_buffers,2500)。如果耗盡,則從shared_pool分配的更多資源以1024為增量單位。gcs資源的初始分配,使用和限制信息可以通過v$resource_limit的gcs_resources值獲得(SELECT * FROMV$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'gcs%' ;)
GCS資源鎖即PCM資源鎖的初始分配數量可以由隱含參數_pcm_shadow_locks配置或則默認max(1.1 * _db_block_buffers,2500)。如果耗盡,則從shared_pool分配的更多資源以1024為增量單位。gcs資源的初始分配使用和限制信息可以通過v$resource_limit的gcs_shadows值獲得(SELECT * FROMV$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'gcs%' ;)
DLM進程
DLM進程數量初始分配數量可以通過設置隱含參數_lm_procs或max( ( 64 + 256 ) + ( number_of_instance-1 ), processes )如果耗盡,則從shared_pool分配更多資源。DLM進程的初始分配,使用和限制信息可以通過v$resource_limit的ges_locks值獲得(SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME LIKE 'ges%' ;)
到此,關于“怎么理解Oracle RAC分布式資源管理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。