Советы по работе с MS SQL Server
01.01.2007
• | Устанавливайте SET NOCOUNT ON. При установке OFF после каждого оператора сервер посылает клиенту сообщение DONE_IN_PROC с количеством обработанных записей. Запретив это, Вы кардинально сократите сетевой трафик и существенно увеличите производительность. |
• | При необходимости изменить режим блокирования какой-либо таблицы без изменения уровня изоляции транзакций используйте подсказки режима блокирования. Например, в следующем примере оператор SELECT накладывает на запись, предотвращая изменение её другими сессиями до окончания транзакции, несмотря на то, что установленный уровень изоляции не предусматривает этого: |
SET TRANSACTION ISOLATION LEVEL READ COMMITED
BEGIN TRANSACTION
SELECT * FROM City
WHERE Name = 'Ленинград'
WITH (HOLDLOCK)
-- Какие-то операторы, во время их выполнения
-- запись остается заблокированной
UPDATE City
SET Name = 'Санкт-Петербург'
WHERE Name = 'Ленинград'
COMMIT
• | Явно указывайте параметры в запросах. Это поможет серверу более эффективно кэшировать планы выполнения. При динамическом формировании текста запроса не подставляйте параметры в текст, а используйте хранимую процедуру sp_executesql |
• | Не начинайте названия своих хранимых процедур с префикса «sp_». Сервер ищет процедуры с такими именами в первую очередь в базе данных Master, а затем уже в текущей БД. Это приводит к дополнительным накладным расходам. |
• | Если Ваше приложение интенсивно использует базу данных tempdb (например, создает много временных таблиц) – увеличьте её минимальный размер. В противном случае при старте сервера создается tempdb малого размера, которая затем динамически расширяется, непроизводительно загружая компьютер. |