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

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

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

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

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

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

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


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

тогда ждите )
...
Рейтинг: 0 / 0
09.12.2017, 00:43
    #39566894
Andrew Harlan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в таблицу, у которой половина в UNDO
Ввиду того, что откат долгий сегодня вволю поэкспериментировали с этим. Очень чётко проследились тормоза на вставке строки со значением поля по которому был делит (поле не ключевое). И второй момент. Тормоза мгновенно проходят при отключении первичного ключа.
...
Рейтинг: 0 / 0
09.12.2017, 00:46
    #39566895
DВА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в таблицу, у которой половина в UNDO
это уже любопытно
еще бы статистику показали запроса на вставку из v$sql
...
Рейтинг: 0 / 0
09.12.2017, 00:49
    #39566896
DВА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в таблицу, у которой половина в UNDO
а индекс перестроить не пробовали?
...
Рейтинг: 0 / 0
09.12.2017, 00:59
    #39566897
Andrew Harlan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в таблицу, у которой половина в UNDO
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
09.12.2017, 11:10
    #39566965
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в таблицу, у которой половина в UNDO
версию БД хотя бы подскажете?
...
Рейтинг: 0 / 0
09.12.2017, 16:38
    #39567066
Andrew Harlan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert в таблицу, у которой половина в UNDO
K790версию БД хотя бы подскажете?

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

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

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

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

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

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

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


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