powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Insert в таблицу, у которой половина в UNDO
18 сообщений из 18, страница 1 из 1
Insert в таблицу, у которой половина в UNDO
    #39566514
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прокомментировать ситуацию.

В обычной, но очень большой таблице (400ГБ) запустили безбашенный делит в одной транзакции. Обнаружили, что делит убойный, только когда начали верещать метрики UNDO. Это произошло тогда, когда туда въехало уже около 200ГБ. Табличка обычная, с первичным ключом и парой индексов. Никаких констрэйтов даже нет. Основная проблема заключалась в том, что в этот момент даже простой insert в другой сессии в неё стал проходить с жуткими тормозами. Такое ощущение, что при каждом инсерте идёт фуллскан всей таблицы.
Есть подозрение, что это как-то связано с перестройкой первичного ключа при каждом добавлении в связи с тем, что половина сидит в откате. В итоге cессию с delete срубили и пошёл долгий rollback. При этом проблема с insert естественно никуда не делась. Самый простой инсерт идёт по минуте.
Как понять точно что при этом происходит? Как это увязать с UNDO, индексами или ещё чем?
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566675
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew HarlanПрошу прокомментировать ситуацию.

В обычной, но очень большой таблице (400ГБ) запустили безбашенный делит в одной транзакции. Обнаружили, что делит убойный, только когда начали верещать метрики UNDO. Это произошло тогда, когда туда въехало уже около 200ГБ. Табличка обычная, с первичным ключом и парой индексов. Никаких констрэйтов даже нет. Основная проблема заключалась в том, что в этот момент даже простой insert в другой сессии в неё стал проходить с жуткими тормозами. Такое ощущение, что при каждом инсерте идёт фуллскан всей таблицы.
Есть подозрение, что это как-то связано с перестройкой первичного ключа при каждом добавлении в связи с тем, что половина сидит в откате. В итоге cессию с delete срубили и пошёл долгий rollback. При этом проблема с insert естественно никуда не делась. Самый простой инсерт идёт по минуте.
Как понять точно что при этом происходит? Как это увязать с UNDO, индексами или ещё чем?

андо не при чем
убейте сессию на уровне процесса и будет вам счастие )
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566679
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как же не причем
Чтоб увидеть состояние того же PK до начала транзакции надо прочитать текущий блок и по одной применять ("прочитывая" по одному разу на каждую запись отката) UNDO
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566681
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНу как же не причем
Чтоб увидеть состояние того же PK до начала транзакции надо прочитать текущий блок и по одной применять ("прочитывая" по одному разу на каждую запись отката) UNDO
ну не настолько,чтобы инсерт шел по минуте )

типичный виновник - Bug 13641076 - High buffer gets for insert statement - rejection list does not fire - superseded (Doc ID 13641076.8)
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566890
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot DВА]Andrew HarlanПрошу прокомментировать ситуацию.

андо не при чем
убейте сессию на уровне процесса и будет вам счастие )

Какую сессию? Сессии уже давно никакой нет. Откатывает SMON.
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566893
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Andrew Harlan]DВАпропущено...


Какую сессию? Сессии уже давно никакой нет. Откатывает SMON.

тогда ждите )
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566894
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ввиду того, что откат долгий сегодня вволю поэкспериментировали с этим. Очень чётко проследились тормоза на вставке строки со значением поля по которому был делит (поле не ключевое). И второй момент. Тормоза мгновенно проходят при отключении первичного ключа.
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566895
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это уже любопытно
еще бы статистику показали запроса на вставку из v$sql
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566896
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а индекс перестроить не пробовали?
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566897
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DВАа индекс перестроить не пробовали?

Не пробовали. Возможно это бы решило вопрос. В данном случае хочется понять механизм этой проблемы.

Весь трэйс-файл не выложу чтобы не палить контору, но на тормознутой вставке такие эвенты

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  buffer busy waits                             616        0.00          0.00
  latch: row cache objects                       20        0.00          0.00
  row cache lock                                372        0.00          0.08
  db file sequential read                    241004        0.10        169.90
  Disk file operations I/O                       70        0.00          0.00



И самое интересное, что UNDO нигде не фигурирует. Риды идут только с ТБС с данными. Это простой до безобразия инсерт.
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39566965
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
версию БД хотя бы подскажете?
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39567066
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
K790версию БД хотя бы подскажете?

11.2.0.4 HP-UX 11vi3
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39567641
Andrew Harlan,

При чтении из undo, помимо двойного чтения, мы получаем еще поблочное чтение, вместо многоблочного. Что очень сильно скажется на производительности.
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39567642
Andrew HarlanИ второй момент. Тормоза мгновенно проходят при отключении первичного ключа.

Что говорит о том, что базе нет нужды ничего читать перед вставкой.
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39567723
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew HarlanВвиду того, что откат долгий сегодня вволю поэкспериментировали с этим. Очень чётко проследились тормоза на вставке строки со значением поля по которому был делит (поле не ключевое). И второй момент. Тормоза мгновенно проходят при отключении первичного ключа.
поле, по которому был делит проиндексировано?
этот индекс не используется ли в том числе и для первичного ключа?
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39567968
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимо крокодилAndrew Harlan,

При чтении из undo, помимо двойного чтения, мы получаем еще поблочное чтение, вместо многоблочного. Что очень сильно скажется на производительности.

Вот это очень дельная мысль. Есть мнение, что происходило следующее.
В листовых блоках индекса первичного ключа значительная часть ссылок были помечены как удаленные. При наличии таких удаленных ссылок, для проверки уникальности нового ID выполнялось чтение всех блоков таблицы на которые ссылались удаленные ключи индекса. Сюда ещё накладывается моноблочное чтение из UNDO.
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39568052
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то при попытке вставки необходимо проверить существовал ли такой ключ на момент до удаления
Для этого восстанавливаются (с применением UNDO) корневой, промежуточные и листовой блоки где должен был находится ключ на тот момент, возможно дополнительные, если уже были вставлены какие-то строки и произошел SPLIT блоков. UNDO применяется по одной записи, каждую нужно отдельно прочитать.

Вот только смущаетAndrew HarlanИ самое интересное, что UNDO нигде не фигурирует. Риды идут только с ТБС с данными.Ты действительно проанализировал значение P1 в ожиданиях "db file sequential read" (номер файла) или просто не увидел надписи "undo" в названиях ожиданий?
...
Рейтинг: 0 / 0
Insert в таблицу, у которой половина в UNDO
    #39568142
Andrew Harlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров Риды идут только с ТБС с данными. Ты действительно проанализировал значение P1 в ожиданиях "db file sequential read" (номер файла) или просто не увидел надписи "undo" в названиях ожиданий?

Ну конечно же я посмотрел на obj#=xxx
Задержки идут из самой таблицы и немного с индекса по полю, по которому было удаление.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Insert в таблицу, у которой половина в UNDO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]