|
|
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Прошу прокомментировать ситуацию. В обычной, но очень большой таблице (400ГБ) запустили безбашенный делит в одной транзакции. Обнаружили, что делит убойный, только когда начали верещать метрики UNDO. Это произошло тогда, когда туда въехало уже около 200ГБ. Табличка обычная, с первичным ключом и парой индексов. Никаких констрэйтов даже нет. Основная проблема заключалась в том, что в этот момент даже простой insert в другой сессии в неё стал проходить с жуткими тормозами. Такое ощущение, что при каждом инсерте идёт фуллскан всей таблицы. Есть подозрение, что это как-то связано с перестройкой первичного ключа при каждом добавлении в связи с тем, что половина сидит в откате. В итоге cессию с delete срубили и пошёл долгий rollback. При этом проблема с insert естественно никуда не делась. Самый простой инсерт идёт по минуте. Как понять точно что при этом происходит? Как это увязать с UNDO, индексами или ещё чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2017, 12:22 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Andrew HarlanПрошу прокомментировать ситуацию. В обычной, но очень большой таблице (400ГБ) запустили безбашенный делит в одной транзакции. Обнаружили, что делит убойный, только когда начали верещать метрики UNDO. Это произошло тогда, когда туда въехало уже около 200ГБ. Табличка обычная, с первичным ключом и парой индексов. Никаких констрэйтов даже нет. Основная проблема заключалась в том, что в этот момент даже простой insert в другой сессии в неё стал проходить с жуткими тормозами. Такое ощущение, что при каждом инсерте идёт фуллскан всей таблицы. Есть подозрение, что это как-то связано с перестройкой первичного ключа при каждом добавлении в связи с тем, что половина сидит в откате. В итоге cессию с delete срубили и пошёл долгий rollback. При этом проблема с insert естественно никуда не делась. Самый простой инсерт идёт по минуте. Как понять точно что при этом происходит? Как это увязать с UNDO, индексами или ещё чем? андо не при чем убейте сессию на уровне процесса и будет вам счастие ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2017, 15:07 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Ну как же не причем Чтоб увидеть состояние того же PK до начала транзакции надо прочитать текущий блок и по одной применять ("прочитывая" по одному разу на каждую запись отката) UNDO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2017, 15:12 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНу как же не причем Чтоб увидеть состояние того же PK до начала транзакции надо прочитать текущий блок и по одной применять ("прочитывая" по одному разу на каждую запись отката) UNDO ну не настолько,чтобы инсерт шел по минуте ) типичный виновник - Bug 13641076 - High buffer gets for insert statement - rejection list does not fire - superseded (Doc ID 13641076.8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2017, 15:14 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
[quot DВА]Andrew HarlanПрошу прокомментировать ситуацию. андо не при чем убейте сессию на уровне процесса и будет вам счастие ) Какую сессию? Сессии уже давно никакой нет. Откатывает SMON. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 00:38 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
[quot Andrew Harlan]DВАпропущено... Какую сессию? Сессии уже давно никакой нет. Откатывает SMON. тогда ждите ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 00:41 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Ввиду того, что откат долгий сегодня вволю поэкспериментировали с этим. Очень чётко проследились тормоза на вставке строки со значением поля по которому был делит (поле не ключевое). И второй момент. Тормоза мгновенно проходят при отключении первичного ключа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 00:43 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
это уже любопытно еще бы статистику показали запроса на вставку из v$sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 00:46 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
а индекс перестроить не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 00:49 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
DВАа индекс перестроить не пробовали? Не пробовали. Возможно это бы решило вопрос. В данном случае хочется понять механизм этой проблемы. Весь трэйс-файл не выложу чтобы не палить контору, но на тормознутой вставке такие эвенты Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. И самое интересное, что UNDO нигде не фигурирует. Риды идут только с ТБС с данными. Это простой до безобразия инсерт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 00:59 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
версию БД хотя бы подскажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 11:10 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
K790версию БД хотя бы подскажете? 11.2.0.4 HP-UX 11vi3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2017, 16:38 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Andrew Harlan, При чтении из undo, помимо двойного чтения, мы получаем еще поблочное чтение, вместо многоблочного. Что очень сильно скажется на производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 13:53 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Andrew HarlanИ второй момент. Тормоза мгновенно проходят при отключении первичного ключа. Что говорит о том, что базе нет нужды ничего читать перед вставкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 13:56 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Andrew HarlanВвиду того, что откат долгий сегодня вволю поэкспериментировали с этим. Очень чётко проследились тормоза на вставке строки со значением поля по которому был делит (поле не ключевое). И второй момент. Тормоза мгновенно проходят при отключении первичного ключа. поле, по которому был делит проиндексировано? этот индекс не используется ли в том числе и для первичного ключа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 15:28 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Мимо крокодилAndrew Harlan, При чтении из undo, помимо двойного чтения, мы получаем еще поблочное чтение, вместо многоблочного. Что очень сильно скажется на производительности. Вот это очень дельная мысль. Есть мнение, что происходило следующее. В листовых блоках индекса первичного ключа значительная часть ссылок были помечены как удаленные. При наличии таких удаленных ссылок, для проверки уникальности нового ID выполнялось чтение всех блоков таблицы на которые ссылались удаленные ключи индекса. Сюда ещё накладывается моноблочное чтение из UNDO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2017, 20:47 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Вообще-то при попытке вставки необходимо проверить существовал ли такой ключ на момент до удаления Для этого восстанавливаются (с применением UNDO) корневой, промежуточные и листовой блоки где должен был находится ключ на тот момент, возможно дополнительные, если уже были вставлены какие-то строки и произошел SPLIT блоков. UNDO применяется по одной записи, каждую нужно отдельно прочитать. Вот только смущаетAndrew HarlanИ самое интересное, что UNDO нигде не фигурирует. Риды идут только с ТБС с данными.Ты действительно проанализировал значение P1 в ожиданиях "db file sequential read" (номер файла) или просто не увидел надписи "undo" в названиях ожиданий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2017, 05:07 |
|
||
|
Insert в таблицу, у которой половина в UNDO
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров Риды идут только с ТБС с данными. Ты действительно проанализировал значение P1 в ожиданиях "db file sequential read" (номер файла) или просто не увидел надписи "undo" в названиях ожиданий? Ну конечно же я посмотрел на obj#=xxx Задержки идут из самой таблицы и немного с индекса по полю, по которому было удаление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2017, 10:36 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=133&tid=1884750]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 387ms |

| 0 / 0 |
