Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
29.12.2016, 23:52
|
|||
---|---|---|---|
|
|||
Быстрое удаление |
|||
#18+
Нужно максимально быстро в скрипте удалить записи по условию Код: sql 1. 2. 3. 4. 5.
Поля my_field1 -INTEGER, my_field2 - SMALLINT. Данный запрос удалит 20%-30% записей в таблице. Всего в таблице записей - сотни тысяч. С вероятностью 99% второе условие лишнее и эти два поля либо оба NULL, либо оба не NULL Вопросы. 1. Условие по одному полю ускорит удаление? 2. Индекс по my_field1, my_field2 как-то изменит время удаления? 3. Деактивация остальных индексов в таблице повлияет на скорость? 4. На эту таблицу ссылается несколько внешних ключей с условиями ON DELETE CASCADE и ON DELETE SET NULL. Отработка этих условий самостоятельно, удаление этих ключей и последующее восстановление ускорит общий процесс? 5. Может еще какие условия забыл? 6. Про отключение триггеров помню С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.12.2016, 03:45
|
|||
---|---|---|---|
Быстрое удаление |
|||
#18+
_Vasilisk_, С одной стороны 30 копеек - не 50. Но со временем проблемы с индексами могут таки появиться. Да и стоит учесть замедление при любых операциях при наличии такого индекса. Мне кажется, он не особо целесообразен. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.12.2016, 08:41
|
|||
---|---|---|---|
Быстрое удаление |
|||
#18+
_Vasilisk_Нужно максимально быстро в скрипте удалить записи по условию Код: sql 1. 2. 3. 4. 5.
Поля my_field1 -INTEGER, my_field2 - SMALLINT. Данный запрос удалит 20%-30% записей в таблице. Всего в таблице записей - сотни тысяч. С вероятностью 99% второе условие лишнее и эти два поля либо оба NULL, либо оба не NULL Вопросы. 1. Условие по одному полю ускорит удаление? 2. Индекс по my_field1, my_field2 как-то изменит время удаления? 3. Деактивация остальных индексов в таблице повлияет на скорость? 4. На эту таблицу ссылается несколько внешних ключей с условиями ON DELETE CASCADE и ON DELETE SET NULL. Отработка этих условий самостоятельно, удаление этих ключей и последующее восстановление ускорит общий процесс? 5. Может еще какие условия забыл? 6. Про отключение триггеров помню С уважением, Vasilisk 1. Практически нет. При 20-30% записей придется перечитать/переписать все страницы таблицы. 2. Замедлит. На время перестройки индекса. 3. Повлияет, но потребует монопольного подключения к БД 4. Нет. Отличаются только крыжиком системный/пользовательский. Сотни тысяч - не так уж и много. С выключенным Forced Write, SSD, 16к странице, 64-bit супере и наличии хотя бы 8 гигов - плевое дело. Если на табличку висит много зависимостей, то не такое уж и плевое. Нужно сначала удалять из зависимых таблиц delete where (условие по мастеру). Из триггеров - заустанет дергаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.12.2016, 10:43
|
|||
---|---|---|---|
Быстрое удаление |
|||
#18+
При необходимости удаления большого количества записей я стараюсь делать это порциями, в промежутках запрашивая только что удаленные записи что бы принудительно собрать мусор. Затрудняюсь объяснить зачем и чем это лучше, но когда-то давно это мне давало реальный эффект (после удаления не возникало очень длительного зависания сервера с шуршанием винтом), ну и процесс по логу можно контролировать, сколько порций удалилось. Примерно так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.12.2016, 13:58
|
|||
---|---|---|---|
|
|||
Быстрое удаление |
|||
#18+
pastor3. Повлияет, но потребует монопольного подключения к БДЭто есть pastor4. Нет. Отличаются только крыжиком системный/пользовательский.pastorНужно сначала удалять из зависимых таблиц delete where (условие по мастеру)Эти два условия не противоречат друг другу? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
30.12.2016, 21:14
|
|||
---|---|---|---|
Быстрое удаление |
|||
#18+
_Vasilisk_pastor3. Повлияет, но потребует монопольного подключения к БДЭто есть pastor4. Нет. Отличаются только крыжиком системный/пользовательский.pastorНужно сначала удалять из зависимых таблиц delete where (условие по мастеру)Эти два условия не противоречат друг другу? Нисколько. При удалении по триггеру/каскаду (неважно, системному или пользовательскому) происходит попеременное дерганье НА КАЖДОЕ ВХОЖДЕНИЕ мастера (поиск/чтение) слейва, индекса слейва. В самом печальном случае читается/записывается по странице данных и странице каждого индекса. На каждую запись. Кол-во задействованных страниц (Кол-во записей мастера) * (кол-во индексов слейва). (Стотыщ записей) * (3 индекса) = Триста тыщ страничных операций. + операции в мастере. И все вперемешку, без попадания в страничный и файловый/дисковый кэш. При удалении порцией - максимальное кол-во изменяемых страниц не может превысить число страниц (данных и индексов) в слейве. на (стотыщ записей) / (16к / размер записи 100) * 3 индекса = 62,5 * 3 = 187,5 страничных операций. Подсчеты оценочные, с точностью до порядка. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=40&tablet=1&tid=1561772]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 419ms |
0 / 0 |