共計 3102 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章主要介紹“怎么理解 Oracle RAC 分布式資源管理”,在日常操作中,相信很多人在怎么理解 Oracle RAC 分布式資源管理問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解 Oracle RAC 分布式資源管理”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
因為集群的分布式架構, 通過進程間的通信完成資源的共享、分發、同步對分布式鎖管理實現就變得尤為必要。 有了這種通信的存在,在與集群中的其他實例上 LMD 進程完成通信鎖定一個資源后,無論有多少 DLM 實例發生故障,都不會丟失有關鎖資源的重要信息。但是需要注意的一點是數據庫的崩潰恢復(能夠恢復在中止實例的緩沖區高速緩存中丟失的塊)不是 DLM 的功能,塊的全局高速緩存處理仍然使用相同的“寫入前刷日志”規則來確保持久化。通過前面系列文章我們知道 GRD 或 DLM 是由 GES 組件和 GCS 組建組成,而這些功能的進程(LMON、LMS、LMD 等)實現我們也有了大致的了解。現在我們來更進一步的了解這些進程的函數實現和參數調整。
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 分布式資源管理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!