![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как уменьшить время при заполнении таблиц? [D5]
Andrey007 © (2003-03-24 16:57:00)В хранимой процедуре (Oracle 8.1) происходит заполнение таблиц БД. Когда заполняемые таблицы пусты, заполнение происходит довольно быстро - 1589 записей за 7 мин (в контрольную таблицу). Но дальше время, необходимое для заполнения примерно такого же количества записей растёт очень сильно:
Записей в таблице до заполнения | Новых записей | Время заполнения
------------------------------------------------------------------
0 | 1589 | 7 мин.
1589 | 1559 | 13 мин.
3148 | 1628 | 18 мин.
4776 | 1534 | 28 мин.
6310 | 1736 | 39 мин.
------------------------------------------------------------------
Естественно, заполняется не одна таблица, а куча связанных, просто взята главная таблица.
Что можно сделать?
passm (2003-03-25 09:17:00) [1]В Oracle есть понятие "статистика на таблицу"?
Типа RUNSTATS ON TABLE <TABLENAME> AND INDEXES ALL.
Возможно, некоторые таблицы сильно фрагментированы...
Для точного определения причины мало данных.
Sergey13 (2003-03-25 08:50:00) [2]2Andrey007 (24.03.03 16:57)
>происходит довольно быстро - 1589 записей за 7 мин
Я бы повесился от такой "быстроты" - 227 записей в минуту!!! 8-)
Если заливается сразу большими кусками то можно попробовать перед заливкой поотключать констрейнты, а после включить их. Так же ускорит вставку убийство индексов, с последующим их воссозданием.
Но что то мне подсказывает, что не в этом дело у тебя. 1500 записей для Оракла вставить - раз плюнуть (если там не БЛОБы конечно по несколько мег). Тут надо более конкретно смотреть что тормозит. Может, например, у тебя логи маленькие и/или их мало и не успевают переключаться/архивироваться.
ЗЫ: не плохо бы глянуть структуру таблицы и текст процедуры. А так же характеристики железа, где это крутится.
petr_v_a (2003-03-24 22:04:00) [3]Копай в сторону pctused и pctfree
> Desdechado © коммитить через 1000 записей, конечно, правильно, только не в тему вопроса - insert`ится-то примерно одинаково каждый раз, а время почти в разы отличается. И что это за "протоколирование транзакции", которое "идет"? :)
Desdechado (2003-03-24 20:40:00) [4]видимо, идет протоколирование транзакции. если записи между собой не связаны, попробуй коммитить через например 1000 записей