Могут ли параллельные операторы вставки в sql привести к тупику? - PullRequest
2 голосов
/ 21 марта 2012

У меня SP, который выполняет выборочное объединение многих таблиц без блокировки. Это выполнит много вычислений со многими группировками и суммированием, поэтому для его выполнения потребуется около 2 минут. Мне нужно запустить это около 500 различных наборов данных. Так что это займет около 1000 минут.

Чтобы уменьшить это, мне нужно выполнить этот расчет параллельно. Так что, если я запускаю 4 набора данных параллельно, это должно быть сделано примерно через 250 минут.

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

Итак, я ожидаю, что здесь не должно быть мертвых замков. Пожалуйста, совет в этом отношении и дайте мне знать, если мое понимание правильно. Спасибо.

1 Ответ

4 голосов
/ 21 марта 2012

INSERT не может взаимоблокировать против другого INSERT в той же таблице, потому что два оператора INSERT в одной таблице всегда получат блокировки в одном и том же порядке.При этом я должен прокомментировать ваше утверждение:

, если я запускаю 4 набора данных параллельно, я должен сделать это примерно через 250 минут.

У вас нет причин ожидать этого.Прежде всего, такое требование означает, что вы игнорируете закон Амдала .Во-вторых, рабочая нагрузка SQL - это уже параллелизм внутри, запросы в вашей процедуре используют параллельные планы, когда это возможно, см. Параллельная обработка запросов , особенно , если она содержит много группировоки суммирования ».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...