powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / insert в большую таблицу, трассировка
24 сообщений из 24, страница 1 из 1
insert в большую таблицу, трассировка
    #38386200
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select возвращает 7 млн. записей.
Сreate table as select выполняется за минуту.
Insert into big_table висит. Ждали 2 раза по 10 часов, срубали сессию.
Сейчас горожу костыль со вставкой покусочно (проверял 50, 100 тыщ - вставляет хоть и долго, но в разумные сроки). И буду изучать ситуацию в целях повышения образованности.
Хинт INSERT /*+APPEND */ не изменил ситуацию. Триггеров на таблице нет.
Отключать constraint и индексы для проверки, насколько они влияют, не буду, это не решение - что, при каждом insert их отключать?
Да и немного их. Впрочем, foreign key отключал - не помогло.

Big_table партиционированная по дате (месяцы), 400 млн. строк.
Трассировку читал всего пару раз за 10 лет, опыта в этом не имею.
Буду благодарен за подсказку, что означает большой db file sequential read, и куда копать еще.

Это и это прочел, там ничего не накопали.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386204
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем не понравился
авторСreate table as select выполняется за минуту.
?
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386214
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm... что означает большой db file sequential read, и куда копать еще.

индекс читается
план CTAS с планом insert select одинаковый?
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386225
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ramin Hashimzadeа чем не понравился
Сreate table as select выполняется за минуту.
?

Тем, что вставку все же надо делать в большую таблицу.
Т.е. проблема не в select, а в insert.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386230
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmRamin Hashimzadeа чем не понравился
?

Тем, что вставку все же надо делать в большую таблицу.
Т.е. проблема не в select, а в insert.
insert append практически то же самое что ctas
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386235
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
план CTAS с планом insert select одинаковый?

Да. Вот он, прикладываю картинку.

казинакdmdmdm... что означает большой db file sequential read, и куда копать еще.

индекс читается


Как изменить ситуацию? Менять тип индекса? С партиционированными таблицами тоже мало работал.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386254
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmДа. Вот он, прикладываю картинку.

все таки для сравнения не помешал бы план insert append

dmdmdmКак изменить ситуацию? Менять тип индекса? С партиционированными таблицами тоже мало работал.
7 млн в селекте это какая доля от общего кол-ва записей? Может лучше фулскан?
и в вашем плане ctas распаралеливается
а insert append паралелится?

в общем второй план желательно глянуть
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386261
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по трассе он отличается от плана CTAS

INDEX UNIQUE SCAN I_OBJ1
INDEX RANGE SCAN I_CDEF3
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386315
А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А.
Гость
dmdmdmSelect возвращает 7 млн. записей.
...
Хинт INSERT /*+APPEND */ не изменил ситуацию. Триггеров на таблице нет.
Отключать constraint и индексы для проверки, насколько они влияют, не буду, это не решение - что, при каждом insert их отключать?
Для сопровождения индексов 7 млн. строк надо подождать. Очевидно CTAS, еще и параллельный, будет быстрее.

Версия сервера ? SQL monitor отчет сделать проще всего было бы в данном случае.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386347
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7 млн в селекте это какая доля от общего кол-ва записей?

Небольшое, как для исходной, так и для целевой, в них сотни миллионов строк.

казинаквсе таки для сравнения не помешал бы план insert append


Прикладываю.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386405
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покусочный костыль сделал, по 100 тыщ.

Но время выполнения insert - около 600 с, тогда как в тестах отдельным запросом выходила минута, т.е. в 10 раз меньше.

Пусть пока продуктив работает, хоть так. На тестовой БД еще погоняю в свободное время.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386421
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmПокусочный костыль сделал, по 100 тыщ.

Но время выполнения insert - около 600 с , тогда как в тестах отдельным запросом выходила минута, т.е. в 10 раз меньше.

Пусть пока продуктив работает, хоть так. На тестовой БД еще погоняю в свободное время.
ну значит, скорей всего, на перестройку индекса время уходит
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386431
visitor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй без использования индексов, которые присутствуют в плохом плане (хинтами).
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386432
XCB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а эти 7 млн записей во сколько секций лягут?
пробуйте в цикле по секциям insert append
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386655
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XCBа эти 7 млн записей во сколько секций лягут?
пробуйте в цикле по секциям insert append

В одну и ту же. Это журнал операций, партиция - месяц. select distinct t.date1 from TMP_IMP_AGG t - август.

Пробую прямо на продуктиве. Основной процесс расчета идет со стабильной скоростью:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
IMP_AGG rows: 700000 in 659 s.
IMP_AGG rows: 600000 in 645 s.
IMP_AGG rows: 500000 in 720 s.
IMP_AGG rows: 400000 in 671 s.
IMP_AGG rows: 300000 in 690 s.
IMP_AGG rows: 200000 in 673 s.
IMP_AGG rows: 100000 in 609 s.



(счетчик выводится после каждых 100 тысяч)

В отдельной сессии выполняю тот же запрос, что сейчас выполняется в цикле пакаджа (там, где 500 000 - из-за этого увеличилось время для основного расчета):

Код: plsql
1.
2.
3.
4.
insert into imp_agg (ban, subscriber, date_charge, type_charge, amount, balance_type, load_seq_id, real_agg_date )
select t.ban, t.subs_key, t.date1, t.charge_type_id, t.summ1, t.balance_id, t.load_seq_id, t.time_key
from TMP_IMP_AGG t
where t.rn between 1 and 1 + 99999



80 с.

Код: plsql
1.
2.
3.
4.
insert into imp_agg (ban, subscriber, date_charge, type_charge, amount, balance_type, load_seq_id, real_agg_date )
select t.ban, t.subs_key, t.date1, t.charge_type_id, t.summ1, t.balance_id, t.load_seq_id, t.time_key
from TMP_IMP_AGG t
where t.rn between 1000000 and 1000000 + 99999



500 с.

Повтор

Код: plsql
1.
2.
3.
4.
insert into imp_agg (ban, subscriber, date_charge, type_charge, amount, balance_type, load_seq_id, real_agg_date )
select t.ban, t.subs_key, t.date1, t.charge_type_id, t.summ1, t.balance_id, t.load_seq_id, t.time_key
from TMP_IMP_AGG t
where t.rn between 1 and 1 + 99999



6 с.


На тесте - те же 700 с.

Код: plsql
1.
drop index IND_IMP_AGG_SUBSCRIBER;



1.5 с из любого диапазона.

Код: plsql
1.
select round(sum(bytes)/1024/1024/1024, 0) GB from dba_segments where segment_name = 'IND_IMP_AGG_SUBSCRIBER'



11 Гб.

Понятно, что дело в индексе.

Теперь очевидное решение, видимо - drop index до массового insert, создание после него.
И чистка данных.
Посмотрел историю - никакого качественного скачка нет, есть постепенный количественный рост.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386659
XCB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну дроп индекс никогда не поздно, но спешить все же не стоит
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386662
XCB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
контрол ентер это засада
по теме индекс глобальный или локальный?
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386673
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

если есть такая разница... я думаю индекс глобальный и посмотреть решение локального индекса.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386682
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XCBиндекс глобальный или локальный?

В начале темы DDL приведены. Локальный.

Сейчас такая статистика:

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
IMP_AGG rows: 1700000 in 509 s.
IMP_AGG rows: 1600000 in 518 s.
IMP_AGG rows: 1500000 in 589 s.
IMP_AGG rows: 1400000 in 487 s.
IMP_AGG rows: 1300000 in 407 s.
IMP_AGG rows: 1200000 in 398 s.
IMP_AGG rows: 1100000 in 21 s.
IMP_AGG rows: 1000000 in 592 s.
IMP_AGG rows: 900000 in 565 s.
IMP_AGG rows: 800000 in 578 s.
IMP_AGG rows: 700000 in 659 s.
IMP_AGG rows: 600000 in 645 s.
IMP_AGG rows: 500000 in 720 s.
IMP_AGG rows: 400000 in 671 s.
IMP_AGG rows: 300000 in 690 s.
IMP_AGG rows: 200000 in 673 s.
IMP_AGG rows: 100000 in 609 s.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386686
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После drop index / create index скорость вставки 8-10 с на 100 тысяч строк.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386721
Фотография Ramin Hashimzade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmПосле drop index / create index скорость вставки 8-10 с на 100 тысяч строк.
наверно % соотношение удаленных записи на реальных записей большая. То есть хочу сказать что реальные записи не соотвествует к индексу.
Код: plsql
1.
analyze index .... validate structure;


но перформанс на инсерт насколько оно влияет это вопрос. думаю нужно проверить. просто так как вы уже сделали "drop index / create index " сложногото будет сказать это из за этого или нет.
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #38386758
XCB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>После drop index / create index
можно было обойтись манипуляциями с одной секцией индекса
ps... мой работодатель ограждает меня от скачки файлов
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
insert в большую таблицу, трассировка
    #39279248
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XCB,

у меня такая же проблема, как и у автора этой темы. помогает только пересоздание индексов?
...
Рейтинг: 0 / 0
insert в большую таблицу, трассировка
    #39282308
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовали

Код: plsql
1.
analyze index .... validate structure;



?
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / insert в большую таблицу, трассировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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