Разделение работы SQL на куски - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть работа с около 100K записей для обработки. У меня много предложений разбить эту работу на куски и затем обработать ее.

Каковы преимущества обработки меньших порций данных по сравнению с записями по 100 КБ?

Какой стандартный способ сделать это? например Выбор 10K записей во временной таблице и обработка за один раз?

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Я только что закончил проект, выполняя это - удалял записи из таблицы несколькими партиями вместо всех записей одновременно.

Проблема в скорости и параллельности.

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

Удаление в пакетах происходит намного медленнее, но если размер пакета выбран правильно, каждая партия выполняется достаточно быстро, чтобы не было проблем с параллелизмом.

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

0 голосов
/ 12 ноября 2009

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

Если записи 10 или около того k выбраны не произвольно, но фактически логически делятся на несколько разных групп (скажем, у вас есть огромная таблица 'images', которая фактически может быть разделена на 'фотографии галереи ',' фотографии профиля ',' изображения в формате cms ',' скриншоты 'или что-то еще), и если в какой-то момент ваш процесс проводит такое различие, вы можете помочь в выборе, всегда сохраняя эти записи в отдельных таблицах. Таким образом, использование таблиц поможет базе данных находить интересные строки, в некотором роде, как это делает индекс. Но это, помимо того, я думаю ...

Если вы хотите повысить производительность, убедитесь, что вы сбрасываете свою статистику каждые 24 часа или около того, чтобы дать базе данных точное представление о том, с чем она справляется

...