溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

外鍵無索引引發的血案

發布時間:2020-08-10 14:03:50 來源:ITPUB博客 閱讀:284 作者:pingdanorcale 欄目:關系型數據庫
一、故障現象

     周末接到一個CASE,故障描述是,當時業務產生大量的TX鎖,DBA因為不怎么了解,鎖的原理,盲目的KILL 進程,無法盡快的定位問題。為了不影響業務,重啟了數據庫,導致大量的用戶投訴。

Fri Mar 13 15:05:17 2020

opiodr aborting process unknown ospid (33292328) as a result of ORA-28

Fri Mar 13 15:05:59 2020

opiodr aborting process unknown ospid (34668796) as a result of ORA-28

Fri Mar 13 15:06:11 2020

opiodr aborting process unknown ospid (33554618) as a result of ORA-28

Fri Mar 13 15:06:23 2020

opiodr aborting process unknown ospid (34471986) as a result of ORA-28

Fri Mar 13 15:06:45 2020

二、分析過程

   

1從awrtop 等待事件看,產生大量的TX

外鍵無索引引發的血案

2awr top sql 

外鍵無索引引發的血案

3 ASH 分析

外鍵無索引引發的血案

外鍵無索引引發的血案

從awr看當時阻塞的應該是insert語句導致,awr執行語句比較長的

而awr中放在首位的是UPDATA及DELETE,沒有辦法繼續看ash一些內容,發現如下表使用比較高,

而在awr中,無此表的相關語句,

從上邊分析看出,鎖住的有insert語句,因此懷疑為外鍵沒有索引導致。

查看表的結構。

如下:

外鍵無索引引發的血案

DELETE FROM bTT WHERE id_=:1 引起的,并且 在task_id 字段上不存在索引,

三、結論

 添加表索引后問題解決,再也沒有出現過大量enq鎖

四、總結

    在ORACLE數據庫中,定義外鍵約束時,ORACLE是不會自動創建對應索引的,必須手動在外鍵約束相關的列上創建索引。 

外鍵缺失索引影響

外鍵列上缺少索引會帶來三個問題,限制并發性、影響性能、還有可能造成死鎖。所以對于絕大部分場景,我們應該盡量考慮在外鍵上面創建索引

  1. 影響性能。如果子表外鍵沒有創建索引,那么當父表查詢關聯子表時,子表將進行全表掃描。影響表連接方式。

  2. 影響并發。無論是更新父表主鍵,或者刪除一個父記錄,都會在子表中加一個表鎖(在這條語句完成前,不允許對子表做任何修改)。這就會不必要地鎖定更多的行,而影響并發性

  3. 在特殊情況下,還有可能造成死鎖。

不需要對外鍵建索引,滿足的條件如下:

1. 不會刪除父表中的行。

2. 不論是有意還是無意,總之不會更新父表 的唯一 / 主鍵字段值。

3.  不會從父表聯結到子表,  或者更通俗的講,外鍵列不支持子表的一個重要訪問路徑,而且你在謂詞中沒有使用這些外鍵累從子表中選擇數據 。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女