Oracle mechanics

10.11.2012

ORA-600 [sorput_1] bitmap index deadlock в версиях Oracle 10.2 — 11.1

Filed under: commonplace,Блокировки,error,Oracle — Игорь Усольцев @ 15:11
Tags: , ,

Хорошо известны официальные рекомендации не использовать bitmap-индексы в OLTP приложениях по архитектурным соображениям. Для разрешения возникающих при выполнении конкурирующих DML конфликтов Oracle использует своеобразный механизм deadlock, который на практике может сопровождаться ORA-600:

ORA-00060: Deadlock detected. More info in file /opt/oracle/admin/diag/rdbms/ORCL/ORCL/trace/ORCL_ora_20536.trc.
Errors in file /opt/oracle/admin/diag/rdbms/ORCL/ORCL/trace/ORCL_ora_20536.trc (incident=475770):
ORA-00600: internal error code, arguments: [sorput_1], [], [], [], [], [], [], [], [], [], [], []
ORA-00060: deadlock detected while waiting for resource
Incident details in: /opt/oracle/admin/diag/rdbms/ORCL/ORCL/incident/incdir_475770/ORCL_ora_20536_i475770.trc

Как оказалось, проблема, с которой мы столкнулись, — штатная, в точности описана в документе поддержки Ora-600 [sorput_1] and Ora-60 Loading Data [ID 826084.1] — не является багом и в качестве единственного варианта решения предлагается избавиться от bitmap-индексов, на время OLTP активности ( или навсегда :)

Детали описаниния deadlock graph достаточно стандартны для блокировок битового индекса:

Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-00190036-00048084       298    1041     X            250     926           S
TX-002e0003-0002e6b0       250     926     X            298    1041           S

session 1041: DID 0001-012A-000000BB    session 926: DID 0001-00FA-00000051
session 926: DID 0001-00FA-00000051     session 1041: DID 0001-012A-000000BB

Rows waited on:
  Session 1041: obj - rowid = 00003E1C - AAAsznAAAAAAAAAAAA -- fake-rowid указывающщий на bitmap-индекс
  (dictionary objn - 15900, file - 0, block - 0, slot - 0)
  Session 926: obj - rowid = 00003E1C - AAAsznAAAAAAAAAAAA
  (dictionary objn - 15900, file - 0, block - 0, slot - 0)

— object_id=15900 указывает на bitmap-индекс, номера строк, в отличие от стандартного TX-deadlock, в rowid не указывается:

11.1.0.7.@ SQL> select i.index_type, o.data_object_id
  2    from dba_objects o, dba_indexes i
  3   where object_id = 15900
  4     and o.owner = i.owner
  5     and o.object_name = i.index_name
  6     and o.object_type = 'INDEX'
  7  /

INDEX_TYPE                  DATA_OBJECT_ID
--------------------------- --------------
BITMAP                              183527

SQL> select dbms_rowid.rowid_object('AAAsznAAAAAAAAAAAA') as data_object_id,
  2         dbms_rowid.rowid_relative_fno('AAAsznAAAAAAAAAAAA') as file#,
  3         dbms_rowid.rowid_block_number('AAAsznAAAAAAAAAAAA') as block#,
  4         dbms_rowid.rowid_row_number('AAAsznAAAAAAAAAAAA') row#
  5  from dual
  6  /

DATA_OBJECT_ID      FILE#     BLOCK#       ROW#
-------------- ---------- ---------- ----------
        183527          0          0          0

Ошибка ORA-600 судя по аргументу [sorput_1] возникает на этапе сортировки:

Ora-600 Base     Functionality     Description
smbima sor       sqlexec/sort      manages and performs sort operation

Bitmap Indexes and Deadlocks: Deadlocks on DML’s and DDL’s [ID 171795.1]

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: