您好,登錄后才能下訂單哦!
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環境的穩定性和可用性。
如果確實對于前臺的死鎖檢查時間要求較高,建議在測試環境中詳細測試后再部署到產品環境中。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。