Какой уровень блокировки SQL-сервера подходит для вставки? - PullRequest
3 голосов
/ 01 февраля 2010

Я хочу сделать почти 1000 вставок в таблицу каждую секунду. А также каждый день я хочу запросить все вставленные строки только один раз в целом. И я хочу повысить эффективность с помощью многопоточности и пула соединений. Но я хочу знать, какой уровень контроля параллелизма мне больше подходит. Список параметров для SQL-сервера: MSDN Site .

Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2010

Вы должны быть в порядке с уровнем изоляции по умолчанию для вставок. У вас есть кластерный индекс? Если это так, убедитесь, что он не фрагментируется при вставке новых строк. Обычно guid будет плохим кандидатом на кластерный индекс. Кроме того, если у вас есть редакция Enterprise и вы можете идентифицировать разделы в вашей таблице, вы можете разделить таблицу с помощью этого столбца (например, регион или город) и сохранить разделы таблицы в разных файловых группах. Таким образом, вы можете избежать конфликтов ввода-вывода. Если вы выбираете все данные один раз в день и хотите сохранить скорость вставки во время выбора без особой блокировки, вы можете рассмотреть возможность создания моментального снимка базы данных (снова Enterprise Edition) и выбрать из него. Если вы можете жить с грязным чтением, вы можете добавить (nolock) подсказку к своему выбору.

2 голосов
/ 02 февраля 2010

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

У многих людей, с которыми я общаюсь, были хорошие результаты благодаря использованию READ COMMITTED SNAPSHOT - который может быть включен на уровне базы данных и не требует изменения кода.

Я могу сказать, что SNAPSHOT хорошо послужил мне в прошлом, но это требует изменения кода.

И предупреждаю, убедитесь, что ваша пропускная способность tempdb хорошая, так как версионирование строк значительно увеличивает нагрузку на tempdb.

...