SQL Server 2005 64-битная блокировка запросов - PullRequest
1 голос
/ 25 февраля 2009

Мы испытываем некоторые трудности с производительностью SQL Server и нам нужна помощь.

Наше окружение: -

Windows 2003 Enterprise x64 Edition R2 Четырехъядерный процессор Intel E5450 3 ГГц 16 ГБ ОЗУ 64-разрядная версия Enterprise Edition для SQL Server 2005 (9.00.3282.00) Совместимость базы данных - 8 (но также проверена на 9) Гиперпоточность выключена

У нас есть одна база данных с таблицей строк в 1,2 миллиона, которая запрашивается (неэффективно), но в результате все 4 процессора насыщаются до такой степени, что все остальные запросы блокируются до тех пор, пока запрос не будет завершен. Это включает запросы к отдельным базам данных и совершенно не связанные таблицы.

Если запрос выполняется с опцией MAXDOP 1, тогда все 4 ядра работают на 25%, а запрос занимает в 4 раза больше времени, в этом случае блокирование не выполняется. В дополнение к этому мы выполнили тот же запрос на SQL 2000, и время ответа такое же, но без насыщения ЦП.

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

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

Кто-нибудь знает какие-либо исправления, изменения конфигурации или известные проблемы, которые могут быть причиной этого? Кто-нибудь видел это раньше? Это 64-битный нюанс?

Привет

Lee

Ответы [ 2 ]

1 голос
/ 09 марта 2009

Похоже, таблица не проиндексирована должным образом. Таблица с 1,2 миллионами строк не должна ничего запрашивать. У меня есть таблицы с 60+ миллионами строк, и я запрашиваю эту таблицу за миллисекунды.

Как выглядит запрос и как выглядит таблица?

0 голосов
/ 25 февраля 2009

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

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

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

Чтобы устранить проблему для других запросов, выполняющихся в той же базе данных, вы можете просмотреть несколько файлов для временной базы данных.

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

...