Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Тормоза при delete  [new]
Василии
Guest
Коллеги!
Делаю delete from <table> partition ( <partition_name>) where .........
удаляется из каждой партиции порядка 100000 записей.
Одновременно в таблицу заносятся insertом данные ~ 1000 за 15 минут.
Так insert начинает тормозить .
Пробовал вставить в delete /*+ PARALLEL */ -эффекта нет.

Кто может подсказать, как можно удалить записи из большого числа партиций, и что-бы заливка данных без тормозов.

Зараннее спасибо !
12 окт 06, 16:13    [3254397]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при delete  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Уточни, пзл., заливка идёт в те же самые разделы таблицы?
На таблице есть глобальные индексы?

Скорее всего ответ такой, удалять и добавлять записи нужно поочереди. Т.е. согласуй эти процессы так, чтобы они не пересекались во времени.
12 окт 06, 17:16    [3254968]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при delete  [new]
Василии
Guest
Нет , insert и delete делается на разные партиции, построен PK по дате на партициях.
12 окт 06, 17:41    [3255152]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при delete  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Василии
Нет , insert и delete делается на разные партиции, построен PK по дате на партициях.


Удали этот PK.
12 окт 06, 17:43    [3255165]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при delete  [new]
Василии
Guest
Удалять не хочется , потому что идет постоянно select по таблице юзерами.
12 окт 06, 17:46    [3255185]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при delete  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Василии
Удалять не хочется , потому что идет постоянно select по таблице юзерами.


При чём тут PK к select'ам? Select'ам в первую очередь нужен индекс. Удали PK, создай вместо него локальный индекс. Сделай PK, не совсем PK, добавь в него ключ секционирования, сделай индекс локальным. Секционируй индекс PK, чтобы вставки и удаления как можно реже пересекались на его секциях.
12 окт 06, 18:30    [3255494]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза при delete  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Василии
Коллеги!
Делаю delete from <table> partition ( <partition_name>) where .........
удаляется из каждой партиции порядка 100000 записей.
Одновременно в таблицу заносятся insertом данные ~ 1000 за 15 минут.
Так insert начинает тормозить .
Пробовал вставить в delete /*+ PARALLEL */ -эффекта нет.

Кто может подсказать, как можно удалить записи из большого числа партиций, и что-бы заливка данных без тормозов.

Шаг0, подготовительный:
create table survivers as select * from <table> where 1=0, создать все индексы.
<<Шаг1>>:
insert into survivers select * from <table> partition ( <partition_name>)  where NOT(....условие удаления, обратить особое внимание на NULLS...)
Шаг2:
alter table <table> exchange partition <partition_name> with survivers [можно без валидации индексов]
Шаг3:
truncate table survivers
IF (have more data to delete) then goto Шаг1; end if;
12 окт 06, 19:19    [3255721]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить