亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

事務槽引起的 ORA-600 事件

發布時間:2020-08-19 06:59:22 來源:ITPUB博客 閱讀:168 作者:Ryan_Bai 欄目:關系型數據庫

問題描述

執行 update 時出現告警:

ORA-00600: 內部錯誤代碼, 參數: [4521], [11], [18446744073606860068], [11], [399824003], [18446744073709551615], [18446744073709551615], [], [], [], [], []

事務槽引起的 ORA-600 事件

相關概念

ITL描述

ITL(Interested Transaction List) 是 Oracle 數據塊內部的一個組成部分,位于數據塊頭(block header),itl 由 xid,uba,flag,lck 和 scn/fsc 組成,用來記錄該塊所有發生的事務,一個 itl 可以看作是一條事務記錄。當然,如果這個事務已經提交,那么這個 itl 的位置就可以被反復使用了,因為 itl 類似記錄,所以,有的時候也叫itl槽位。如果一個事務一直沒有提交,那么,這個事務將一直占用一個itl槽位,itl里面記錄了事務信息,回滾段的入口,事務類型等等。如果這個事務已經提交,那么,itl 槽位中還保存的有這個事務提交時候的 SCN 號。

ITL個數其最小值為 1,由參數 initrans 控制(由于兼容性的原因,oracle 會在對象的存儲塊分配兩個itl,所以 initrans 的最小值實際上為 2),最大值為 255,由參數 maxtrans 控制,最大值參數在 10g 以后不能被修改,itl 是 block 級的概念,一個 itl 占用塊 46B 的空間,參數 initrans 意味著塊中除去 block header 外一部分存儲空間無法被記錄使用(46B*initrans),當塊中還有一定的 free space 時,oracle 可以使用 free space 構建 itl 供事務使用,如果沒有了 free space,那么,這個塊因為不能分配新的 itl,所以就可能發生 itl 等待。

簡述一下事務的流程

  1. 開始一個事務,首先Oracle給這個事務分配XID,并找到一個回滾段,在回滾段頭塊將事務信息存放在事務表中,并給這個事務分配undo塊,并將undo塊的地址也寫入事務表中(UBA地址) 。

  2. 事務準備修改一個數據塊,在該數據塊的頭部的事務槽中寫入事務信息(XID ,UBA(這個UBA指向相對應的undo塊))。

  3. 開始修改數據,將數據塊修改的前映像存放在 undo 塊中。

問題信息獲取

一般ORA-600的錯誤都會在后臺進行記錄,下面是我們找到的記錄內容

事務槽引起的 ORA-600 事件

根據記錄內容,我們可以獲取到相應的trace文件,仔細查看可知如下信息

  1. 異常語句(紅色遮住的部分為語句,由于涉及的客戶語句,且與本博客無關,所以此處不顯示)
    事務槽引起的 ORA-600 事件

  2. 涉及到的函數
    事務槽引起的 ORA-600 事件

  3. ERROR的原因
    事務槽引起的 ORA-600 事件

  4. ITL 槽被占用了 24 個
    事務槽引起的 ORA-600 事件

  5. 產生了大量的行鎖
    事務槽引起的 ORA-600 事件

原因分析

根據 mos,比對現象發現

  1. 版本復合,錯誤一致
    事務槽引起的 ORA-600 事件

  2. 函數調用一致
    事務槽引起的 ORA-600 事件

  3. 原因則是ITL事務槽滿造成的該事件

解決方案

通過重新創建表或索引并修改 INITRANS 或 PCTFREE 參數來增加表或索引的ITL能力,以便能夠處理更多并發事務。

  1. 增加INITRANS

    1. 根據表中事務的數量,我們需要改變初始值。這里改為 50:

      alter table <表名> INITRANS 50;
    2. 然后使用move重新組織表(alter table move;)

    3. 然后重新構建這個表的所有索引,如下所示

      alter index <索引名> rebuild INITRANS 50;
  2. 增加 PCTFREE
    如果增加 INITRANS 不能解決這個問題,那么嘗試增加 PCTFREE。增加 PCTFREE 會保留更多的空間,因此將相同數量的行分散到更多的塊上。總的來說,這意味著有更多的 ITL 插槽可用。

    1. 將行擴展到更多的塊中也有助于減少這個等待事件。

      alter table <表名> PCTFREE 20
    2. 然后使用move重新組織表(alter table move;)

    3. 重建索引

      alter index <索引名> rebuild PCTFREE 20
  3. 增加 INITRANS 和 PCTFREE 的組合

    1. 將 INITRANS 設置為 50,pct_free 設置為 20

      alter table <表名> PCTFREE 20 INITRANS 50
    2. 使用 move 重新組織表(alter table move;)

    3. 然后重新構建表的所有索引,如下所示

      alter index <index_name> rebuild PCTFREE 20 INITRANS 50;

參考

  • ORA-00600: Internal Error Code, Arguments: [4521] (Doc ID 2648741.1)

  • Troubleshooting waits for 'enq: TX - allocate ITL entry' (Doc ID 1472175.1)

向AI問一下細節

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

AI

东山县| 银川市| 青神县| 新昌县| 玉屏| 皋兰县| 平遥县| 桐柏县| 高邮市| 新余市| 建阳市| 蒲城县| 上饶市| 嘉黎县| 方城县| 哈巴河县| 桂阳县| 六安市| 韩城市| 锦州市| 安阳市| 名山县| 浪卡子县| 东丰县| 莱西市| 赤水市| 汉源县| 乐山市| 昭觉县| 和平县| 沭阳县| 沧源| 达日县| 正宁县| 石阡县| 美姑县| 宜阳县| 丰台区| 砚山县| 旌德县| 宽城|