RAC全域性死鎖檢測時間
對於單例項資料庫而言,死鎖的檢測在秒級完成,而RAC環境則死鎖的檢測時間預設達到了1分鐘。
對於單例項環境如果出現了死鎖,那麼馬上其中一個程式就被中止,使用者可以快速的得到錯誤返回。而對於RAC而言,死鎖的檢測並不是實時完成,而是需要60秒左右的時間。
會話1執行:
SQL> create table t_deadlock (id number primary key, name varchar2(30));
Table created.
Elapsed: 00:00:00.12
SQL> insert into t_deadlock values (1, 'a');
1 row created.
Elapsed: 00:00:00.00
SQL> insert into t_deadlock values (2, 'b');
1 row created.
Elapsed: 00:00:00.00
SQL> commit;
Commit complete.
Elapsed: 00:00:00.00
SQL> update t_deadlock set name = 'a1' where id = 1;
1 row updated.
Elapsed: 00:00:00.00
會話2執行:
SQL> set timing on
SQL> update t_deadlock set name = 'b2' where id = 2;
1 row updated.
Elapsed: 00:00:00.00
SQL> update t_deadlock set name = 'a2' where id = 1;
此時,會話2等待會話1的最終操作,下面會話1更新被會話2鎖定的行,引發死鎖:
SQL> update t_deadlock set name
= 'b1' where id = 2;
update t_deadlock set name = 'b1' where id = 2
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
Elapsed: 00:01:00.12
可以看到,死鎖的超時檢測為1分鐘。
而這個死鎖的檢測時間是可以調整的,Oracle透過隱含引數_lm_dd_interval控制:
SQL> conn / as sysdba
Connected.
SQL> alter system set "_lm_dd_interval" = 30 scope = spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 281018368
bytes
Fixed Size 2095672 bytes
Variable Size 104859080 bytes
Database Buffers 167772160 bytes
Redo Buffers 6291456 bytes
Database mounted.
Database opened.
再次測試死鎖的檢測時間,會話1:
SQL> update t_deadlock set name = 'a1' where id = 1;
1 row updated.
SQL> set timing on
會話2執行更新:
SQL> set timing on
SQL> update t_deadlock set name = 'b2' where id = 2;
1 row updated.
Elapsed: 00:00:00.02
SQL> update t_deadlock set name = 'a2' where id = 1;
會話1執行更新引發死鎖:
SQL> update t_deadlock set name = 'b1' where id = 2;
大約30秒後,會話2報錯ORA-60:
update t_deadlock set name = 'a2'
where id = 1
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
Elapsed: 00:00:30.27
在10.2.0.2版本上,Oracle存在一個bug,允許這個引數設定為0,在10.2.0.3以後,這個bug被修正,如果設定為0後,則資料庫無法正常啟動:
[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jun 4 07:54:09 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup
ORA-00067: invalid value 0 for parameter _lm_dd_interval; must be at least 1
最後修改隱含引數是Oracle不推薦的,而且修改這個引數勢必會影響RAC的正常工作方式導致LDM程式的繁忙度增加,而且可能影響RAC環境的穩定性和可用性。
如果確實對於前臺的死鎖檢查時間要求較高,建議在測試環境中詳細測試後再部署到產品環境中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2145658/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- golang 執行時死鎖排查和檢測Golang
- mysql行鎖和死鎖檢測MySql
- LiteOS:SpinLock自旋鎖及LockDep死鎖檢測
- python之GIL全域性直譯器鎖,自定義互斥鎖,死鎖與遞迴鎖Python遞迴
- 全域性鎖、表鎖、行鎖
- 全域性鎖和表鎖
- Seata 全域性鎖等待超時 問題排查
- 檢視oracle死鎖程式並結束死鎖Oracle
- MySQL 全域性鎖和表鎖MySql
- MySQL全域性鎖、表鎖以及行鎖MySql
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- MySQL鎖問題分析-全域性讀鎖MySql
- 使用jstack檢測Java應用的死鎖(deadlock)狀態JSJava
- MySQL 全域性表和表鎖MySql
- MySQL學習之全域性鎖和表鎖MySql
- 什麼是Python全域性直譯器鎖(GIL)?全域性直譯器鎖的好處!Python
- MySQL鎖(讀鎖、共享鎖、寫鎖、S鎖、排它鎖、獨佔鎖、X鎖、表鎖、意向鎖、自增鎖、MDL鎖、RL鎖、GL鎖、NKL鎖、插入意向鎖、間隙鎖、頁鎖、悲觀鎖、樂觀鎖、隱式鎖、顯示鎖、全域性鎖、死鎖)MySql
- Python與全域性直譯器鎖Python
- Python GIL(全域性直譯器鎖)Python
- 生成按時間增長的全域性唯一主鍵
- openGauss 檢查時間一致性
- JS 檢測當前時間是否為夏令時JS
- [翻譯]:SQL死鎖-阻塞探測SQL
- Go死鎖——當Channel遇上Mutex時GoMutex
- Oracle rac時間不同步Oracle
- 你是否真的瞭解全域性解析鎖(GIL)
- 死鎖
- windows 資料夾檢視全域性生效Windows
- 如何修改rac的系統時間
- MySQL Online DDL導致全域性鎖表案例分析MySql
- 僅4步,就可通過SQL進行分散式死鎖的檢測與消除SQL分散式
- Gil全域性解釋鎖和執行緒互斥鎖的關係執行緒
- 什麼是死鎖?如何解決死鎖?
- 面試官:什麼是死鎖?怎麼排查死鎖?怎麼避免死鎖?面試
- 面試官:Netty心跳檢測機制是什麼,怎麼自定義檢測間隔時間?面試Netty
- 死鎖概述
- [譯] 時間序列異常檢測演算法演算法
- PostgreSQLOracle相容性之-全域性臨時表globaltemptableSQLOracle
- 例項詳解 Java 死鎖與破解死鎖Java