powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Медленный insert
25 сообщений из 61, страница 1 из 3
Медленный insert
    #39498817
Массажист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в следующем.
Создается простая таблица, без партиций. На таблицу навешано 6 составных индексов.
СУБД Oracle 10.2.
В пустую таблицу данные с хинтом APPEND вставляются мгновенно. Со временем, когда размер таблицы вырастает, вставка данных немного замедляется.
Но вот в районе 60-70 миллионов записей в таблице скорость резко падает, 20 тыс записей может вставляться до 30 минут.
Трассировка показала что основная потеря времени приходится на файлы с индексами. Пересоздание индексов ситуацию не исправило.
Что может быть и как исправить?
...
Рейтинг: 0 / 0
Медленный insert
    #39498822
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массажист,

Попробуйте дропнуть индексы, вставить данные, создать индексы.
...
Рейтинг: 0 / 0
Медленный insert
    #39498831
Массажист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Интересный подход )
...
Рейтинг: 0 / 0
Медленный insert
    #39498847
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массажистбез партиций
Массажиств районе 60-70 миллионов записей в таблице
МассажистЧто может быть и как исправить?
Пересмотреть подход.

Если не хочется возиться с партициями - смотреть в сторону оптимизации или замены дисковой подсистемы.
На таких абстрактных показателях как количество записей и количество индексов сказать ничего толком нельзя.
...
Рейтинг: 0 / 0
Медленный insert
    #39498872
Гаврилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Массажист,
уже очень давно известно, что таблицы с индексами (и ключами), особенно содержащие много записей, обновляются крайне медленно. Для примера: обновление БД при ежемесячном расчете пенсий и дотаций всех московских пенсионеров, включая инвалидов и их доверенных лиц (это 10 млн и более записей в каждой основной таблице), на самом современном оборудовании SUN Microsystems занимало несколько суток. За это время обязательно случалось какое-нибудь ЧП, и всё надо было начинать сначала. Но это было только до тех пор, пока не была применена следующая технология:
1) Делается актуальная копия БД в текущем состоянии (резервные копии и так создавались автоматически) во временную БД. Это обязательно! Прием новых данных на некоторое время прекращается, о чем оповещаются все клиентские приложения сети.
2) Во временной БД у таблиц (не всех) удаляются ключи и индексы.
3) Делается обновление данных, а иногда и удаление с последующим инсертом. Без индексных таблиц это получается на порядок быстрее!!!
4) Проводится контроль ссылочной целостности новой БД.
5) Ключи и индексы восстанавливаются специальной программой (это делается быстро).
6) Производится контроль взаимодействия ПО с новой БД.
7) В случае положительного результата рабочая БД заменяется на новую, которая становится рабочей. Перед этим бывшая рабочая база архивируется.
Такая технология обеспечивала быстрое (за несколько часов) и надежное обновление большой БД. Это было 20 лет назад, использовались СУБД Open Ingres, потом Oracle. Уверен, что сейчас появились специальные ПО (возможно, содержащееся в самих СУБД), которые все это делают (полу)автоматически, т.е. Вам не придется создавать и отрабатывать ПО в течение нескольких лет, как это делали мы, а надо будет найти соответствующий продукт и овладеть им. Я лишь попытался объяснить порядок и смысл основных шагов.
...
Рейтинг: 0 / 0
Медленный insert
    #39498887
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
In short, getting rid of indexes - loading - and then rebuilding indexes makes sense only when you are loading almost entirely new data.
If you are just adding more data to an already large segment - using /*+ APPEND */ with the indexes enabled is probably the right approach.

The way insert /*+ APPEND */ works is

a) we write table data above the high water mark (table is LOCKED, no other transaction will modify it)

b) we write indexing data for the newly inserted rows into mini-index structures in temp

c) at the end of the insert - we take these mini indexes and merge them in bulk into the existing indexes. We are done



If you drop/disable the indexes what will happen instead is

a) we write table data above the high water mark (table is LOCKED, no other transaction will modify it)

b) at the end - we will full scan the table - the entire table - the whole table - N times where N = number of indexes - to recreate them.
If you just made a large table a little larger - the time to full scan over and over defeats your goal.

тут https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1921387700346909109

Может со статистикой индексов поиграться, чтобы мерж быстрее был?
...
Рейтинг: 0 / 0
Медленный insert
    #39498897
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, с другой стороны, Oracle должен найти куда вставить ссылки на новые узлы индексов
Вопрос как он мержит
...
Рейтинг: 0 / 0
Медленный insert
    #39498900
Гаврилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Массажист,
я забыл объяснить главное: почему обновление и вставка в таблицы, лишенные индексов, происходит быстрее, чем в таблицы с индексами. (Ведь что такое "индекс"? - Индексы содержатся в точно таких же таблицах, как все остальные, только таблицы индексов создаете не Вы, а СУБД, когда Вы назначаете какое-то поле Вашей таблицы индексным.) Дело в том, что при каждой операции INSERT в таблицу с индексами происходит и перестройка всех индексных таблиц, связанных с этой таблицей, а также изменение значений индексов в таблицах, связанных с ней через индексы.
Если же таблица очищена от индексов, то все обновления и добавления включаются в нее последовательно, "внавал". Это происходит так же быстро, как вставка в конец текстового файла символа или слова.
Если после всех изменений БД программа делает индексирование таблиц, то это происходит только ОДИН РАЗ, а не КАЖДЫЙ РАЗ при добавлении каждой новой записи в индексированную таблицу. В этом заключается весь смысл отключения индексов перед массовым обновлением реляционных баз данных, в том числе перед массовым добавлением записей.
...
Рейтинг: 0 / 0
Медленный insert
    #39499154
Зурбаган
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вставка 20 тыщ. строк в таблицу с миллионами - это не такая уж и массовая операция. И что, каждый раз автору удалять и создавать индексы. Это не выход. К тому же как делать поиски пока индексов нет?
Надо копать в сторону оптимизации таблицы и дисков.
...
Рейтинг: 0 / 0
Медленный insert
    #39499156
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаврилов,

Судя по уровню разработчиков, незавидна участь московских пенсионеров...
...
Рейтинг: 0 / 0
Медленный insert
    #39499363
Pavel_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Массажист, индексы битмап или битри?
ENABLE_PARALLEL_DML вруби на уровне сессии и вставляй. Особенности использования почитаешь в доке. В чем его суть? Перестройка индексов будет кучей после вставки, сама вставка будет в параллель. В плане должна появиться строчка INDEX MAINTANCE. По EM должно быть всё хорошо видно.
Как понять какой индекс тормозит? Можно трэйс наверное снимать, но есть вариант проще. Выполняешь вставку и мониторишь ash, схлопываешь её с объектами. Чем больше обращений к объекту тем больше он замедляет вставку. Но как показывает практика, наверняка есть индекс на строку. Может от него проще отказаться?
...
Рейтинг: 0 / 0
Медленный insert
    #39499377
in trace veritas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вставка записи и изменение 6 индексов это 30 блоков чтения, 10 изменений, плюс undo. Полчаса на 20000 записей - 2 мс на lio. Нужно полностью игнорировать буфер кеш, чтобы загрузить работой пару механических hdd.
...
Рейтинг: 0 / 0
Медленный insert
    #39499463
Массажист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
индексы B-Tree, не битмап.
...
Рейтинг: 0 / 0
Медленный insert
    #39499499
Pavel_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Массажистиндексы B-Tree, не битмап.
Делай через pdml, должен быть профит хороший.
Код: plsql
1.
2.
3.
4.
5.
 commit;
 alter session enable parallel dml;
 insert/*+ parallel(8)*/  *****
 commit;
 alter session disable parallel dml;
...
Рейтинг: 0 / 0
Медленный insert
    #39499538
Массажист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel_PV,
я попробовал через Alter session force parallel dml parallel 4
Прибавки в скорости нет.
...
Рейтинг: 0 / 0
Медленный insert
    #39499564
Фотография Aliona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|Гаврилов,

Судя по уровню разработчиков, незавидна участь московских пенсионеров...

Недавно работала в одной госконторе, там практиковалась такая схема работы с данными:
пока пользовательское ПО работает с данными в схеме_1,
программисты готовят данные в схеме_2 в течение месяца.
После того, как подготовка дынных заканчивается, пользовательское ПО переключается на схему_2, а программисты - на схему_1.

Видимо это из стародавних времён идёт от царя Гороха :)
...
Рейтинг: 0 / 0
Медленный insert
    #39499598
Pavel_PV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МассажистPavel_PV,
я попробовал через Alter session force parallel dml parallel 4
Прибавки в скорости нет.
План изменился? Index Maitenance в плане появился? Может сам запрос без параллели выполняется? Планы нужны в общем, так гадать можно долго.
...
Рейтинг: 0 / 0
Медленный insert
    #39500168
Гаврилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зурбаган!
Это способ, не только проверенный на практике, но и рекомендованной в теории еще основателями реляционной модели данных и РСУБД. Так что, спорите Вы даже не со мной, а с Коддом и Дейтом. Удалять индексы и потом их восстанавливать не так уж сложно: это простые операции, для которых один раз пишутся хранимые процедуры БД. На время обновления БД блокируется на ввод/изменение данных (все равно периодически проводятся регламентные работы - ТО), т.е. SELECT юзерам доступен. Если же нет такой возможности, то рабочая база продолжает работать, а обновление делается ее резервной копии, затем производится репликация двух баз - резервной из рабочей. В любом случае обновление таблиц без индексов происходит на 2 порядка быстрее, чем с индексами, а значит, это лучше даже с учетом блокировки.
...
Рейтинг: 0 / 0
Медленный insert
    #39500210
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриловпроизводится репликацияТак может ну его нафиг вообще dml, если есть волшебная репликация.
...
Рейтинг: 0 / 0
Медленный insert
    #39500268
Гаврилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Волшебной" репликации не существует, несмотря на все то, что вещали промоутеры Мелкомягкого на московских конференциях для банков - первого, кто в 90-х годах заявил на всех своих конференциях и в печати, что для MS SQL разработаны такие программы репликации структур и данных БД, а также мониторы транзакций (стоимостью для нас в то время десятки тысяч долларов, мне запомнилось число 56), которые позволяют содержать на каждом из тысяч серверов - простых ПК, разбросанных по всему миру, реплицируемые БД (т.е. крупные серверы, якобы, более не нужны, такие системы, якобы, равносильны применению машины Super Cray с ее локальной сетью!). Уже давно этот искусственно раздутый для России рынок (базар) попритих, но пароксизмы "монитора транзакций" по-прежнему возникают время от времени. Правда, цены стали почему-то гораздо ниже.
На самом деле, при более пристальном рассмотрении, репликации оказались разными. Оказалось, что они зависят от требований конкретной информационной системы (ИС), и фактически всегда можно не учитывать все случаи жизни. Программы для репликаций могут быть совсем не сложными, не сложнее самих функций удаленного доступа, которые применяются при осуществлении репликации и которые сегодня поддерживаются всеми средствами разработки, в частности, MS Visual Studio (от общих для всех тенденций времени Майкрософту тоже уйти не удалось).
Получается так, что механизм репликаций, прежде чем применять, надо разработать и отработать прикладным и системным программистам вместе. Главное хорошо продумать технологию сеанса репликации: что надо делать и в какой последовательности. Это непросто: надо создать очень грамотную постановку задачи, а это сейчас далеко не все могут (потому что плохо знают предметную область, да и некому им ее изложить), и поэтому сегодня репликация, по моим наблюдениям, применяется редко (систематически - только на Дальнем Западе несколькими фирмами, наверняка порожденными самим MS). Чаще создается еще одна копия БД, в ней производятся изменения, затем производится замена баз, как я и описал. А так как аппаратная часть всех необходимых обеспечений (те, кто хоть мельком знакомы с теорией IT, сразу поняли, какой список "обеспечений" я имею в виду) стала намного производительнее, чем была, то замена происходит быстро. Однако не все так просто, как хотелось бы, и нескоро будет просто.
PS
Особенно не скоро, пока существуют флудеры и тролли, который хлебом не корми, но дай поиздеваться над "пенсионерами". Если бы в 90-х, когда они еще только что появились на свет или в лучшем случае уже кушали свои козявки, не затормозили (насильственно, под влиянием наших собственных либеральных демократов, ну и не без западных долларей, конечно) развитие науки и промышленности России и отделившихся "стран", и вместе с этим не похерили бы естественную преемственность поколений , то сегодня не пришлось вам, многим и многим программерам - нашим прямым потомкам - задавать подобные детские вопросы и миллионы раз изобретать все тот же самый велосипед в каждой отдельно взятой коммерческой организации, прикрываясь локтями от всех других подобных же программеров.
...
Рейтинг: 0 / 0
Медленный insert
    #39500278
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS?
Какое отношение технологии БД MS имеют отношение к технологиям Oracle?
Ну а в целом, подход для блокировщиков - удалить индексы/загрузить/создать - работает быстрее
Для Oracle - это подходит для продукта Oracle RDB (бывшая RDB от фирмы DEC)
А для того Oracle, который все обычно имеют ввиду, я выдержку давал, как происходит
добавление данных и построение индексов для них с последующим мержем
...
Рейтинг: 0 / 0
Медленный insert
    #39500279
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс!
Только бы тему не закрыли.
...
Рейтинг: 0 / 0
Медленный insert
    #39500286
Фотография Ranckont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МассажистЧто может быть и как исправить?посмотреть в сторону sqlloader.
Есть-ли в таблицах последовательности?
...
Рейтинг: 0 / 0
Медленный insert
    #39500290
Фотография Ranckont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увеличьте размер файла для индексов.
...
Рейтинг: 0 / 0
Медленный insert
    #39500303
Enlarge your index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем меньше подробностей, тем больше экспертов.
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Медленный insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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