|
|
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть две таблицы. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. В старой таблице 100 миллионов строк, например, и надо перелить из старой в новую 10 миллионов строк по условию where date_main >= trunc(sysdate-7). При переливке БД не должна тормозить (продолжительность не имеет большого значения), поэтому вариант Код: sql 1. 2. 3. 4. 5. не подходит, как я понимаю. Что же делать? Вставлять построчно через цикл? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:27 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907При переливке БД не должна тормозитьУ тебя какие-то странные критерии тормознутости. 140907Что же делать?CTAS + exchange partition. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:39 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907, Как раз таки инсертом будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:44 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Elic Про тормознутость - надо чтобы БД оставалась отзывчивой для приложений и других пользователей во время переливки данных (т.е. чтобы никому не мешать). Про "CTAS + exchange partition" почитаю, спасибо. А у приведенного цикла какие недостатки (кроме продолжительности)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:46 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907, кстати , на твой слип уйдет больше времени, чем на вставку :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:46 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
ora601 Боюсь, времени потребуется больше, т.к. даже простой селект Код: sql 1. 2. 3. занимает секунд 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:52 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907, А ты не бойся и попробуй. Заодно выложи сюда результаты loop (только убери слип а то только на него уйдет 20.000 сек), insert, можешь еще дать результат exchange partition. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 13:05 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
ora601 Мы говорим немного о разном. Мне не важно, сколько времени (10, 20, 30 минут) будет выполниться копирование строк из старой таблицы в новую. Главное - чтобы копирование не мешало другим пользователям работать с БД. Пока что я заметил, что при активной вставке в какую-либо таблицу (без триггеров) вся БД начинает "тормозить". Поэтому использую sleep - медленно, зато никому не мешаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 16:27 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907Пока что я заметил, что при активной вставке в какую-либо таблицу (без триггеров) вся БД начинает "тормозить". Ну так и разбирайся с причиной этих тормозов, а не подставляй костыли наобум. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 16:51 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Жесткий стиль. Зря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 20:28 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907Жесткий стиль. Зря. Тебе дело говорят. Кто ж тебе поможет, если ты слушать не хочешь? У меня вот похожая ситуация - нужно удалить пол-миллиарда строк из таблички "так, чтобы было незаметно для пользователей". Работаю над этим, исследую на чём тормозит. И тебе того же желаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 21:46 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
проходил мимо... Если найдете решение, пожалуйста, напишите в эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 14:02 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
CTAS не подходит (я в примере не указал все колонки обеих таблиц, каюсь, а одна из них - виртуальная, а CTAS делает из нее обычную). А Exchange Partition, похоже, подойдет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 14:10 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907, Можно экспортнуть из старой таблицы что-то типа: expdp include=TABLE:"IN ('EMP')" query=emp:"where date_main > ???" Дальше через импорт попробовать, может быть не будет тормозить. Как вариант ограничить нагрузку через файловую систему. Можно временно помувать таблицу в другой тебйлспейс, чтобы тот размещался в другом маунпоинте. Беда в том, что как понимаю, проблема происходит из-за нагруженности файловой системы. С этим всегда сложновато бороться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 19:41 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907CTAS не подходит (я в примере не указал все колонки обеих таблиц, каюсь, а одна из них - виртуальная, а CTAS делает из нее обычную).Ну если ты используешь звёздочку, то тем самым только измеряешь собственную глупость. 140907А Exchange Partition, похоже, подойдет :)С твоим partitioning и без CTAS? Мозг не включился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 19:41 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907Elic А у приведенного цикла какие недостатки (кроме продолжительности)? Commit после каждой вставленной строчки, это плохая идея. БД может подвиснуть на log_file_sync. Вставлять в одной транзакции 10 млн тоже не хорошо, т.к. может потребоваться много undo, а штатные запросы тогда полетят по ora-01555 или ORA-30036. Можно попробовать найти баланс. А вообще CTAS - хорошее решение. Если возникнут тормоза, надо смотреть план запроса, AWR, ASH. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 09:19 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907проходил мимо... Если найдете решение, пожалуйста, напишите в эту тему. "Мальчик, как тебя зовут?" (с) ПОСМОТРИ НА ЧЁМ У ТЕБЯ ТОРМОЗИТ. Напиши об этом сюда - постараемся помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 09:36 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Lunaire140907Elic А у приведенного цикла какие недостатки (кроме продолжительности)? Commit после каждой вставленной строчки, это плохая идея. БД может подвиснуть на log_file_sync. Вставлять в одной транзакции 10 млн тоже не хорошо, т.к. может потребоваться много undo, а штатные запросы тогда полетят по ora-01555 или ORA-30036. . ну допустим вот так. Вставлять понемногу. Мне помогает, но по причине хренового знания теории объяснить не смогу(((( Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 09:56 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Может проще использовать Resource Manager И просто зарезать пользователю CPU... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 14:36 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Resource Manager достаточно плохо управляется с IO. Если "узкое горлышко" диски, то с первого раза приемлемо настроить вряд ли получится IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 15:07 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
140907, А Вы пробовали захинтовать Код: plsql 1. Может так оно будет проскакивать быстрее, общее время "тормозов" сократится и всем станет легче? Если опытные коллеги пояснят, когда от этого только хуже - буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 16:54 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovЕсли опытные коллеги пояснят, когда от этого только хуже - буду благодарен. Если вставляются данные, захватывающие много партиций, +append добавит новый экстент к каждой затронутой партиции. Иногда это может быть убийственно. Ну и от +parallel(очень много) поплохеть всем может значительно быстрее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 17:33 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
проходил мимо... - Согласен. Правильно ли я прочитал, Код: plsql 1. 2. 3. 4. 5. что новая таблица партиционирована по три дня, т.е. недельный запрос покроет (и нарастит) 3 партиции ? может и не страшно. Код: plsql 1. 2. а если подгадать моменты вставки раз в 3-6-9 дней - то можно и вовсе попадать строго в нужную партиции. Ну и конечно, слишком много параллелей ставить наверное не стоит.... тоже согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:05 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, кто хочет помочь. Я пока не могу продолжить беседу. Через день-два :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 00:15 |
|
||
|
Переливка данных с ограничением нагрузки на БД
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovПравильно ли я прочитал Не в том проблема. Если у нас партиции за прошедший год по три дня и там уже есть данные, то вставка +append по одной строке на каждый день прошедшего года заставит выделить новый экстент в 122х партициях. А экстенты могут быть и по 8-64 Мб каждый . А если этот самый +append ещё и делать регулярно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 13:49 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=181&tid=1886656]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 377ms |

| 0 / 0 |
