MS SQL Server 2008 R2 пространственный: недостаточно потребляемый процессор - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть хранимая процедура, которая содержит один оператор выбора, который использует правильные индексы.Я пытаюсь назвать этот SP для 1,5 миллиона записей.SP выглядит следующим образом:

CREATE PROC [dbo].[DensityLookup]
@point geography
AS
BEGIN
    SELECT TOP(1) DRGN FROM dbo.USAREA WITH(INDEX(geog_sidx)) WHERE geom.STIntersects(@point) = 1;
END

Я вызываю этот запрос из кода .net, и запрос выполняется хорошо и выполняется примерно через 25 минут на моей машине с 4-ядерным и 4 ГБ ОЗУ и потребляет около 90% ЦП с 5одновременные соединения.

Проблема в том, что у меня есть еще одна машина с 24-ядерным и 36 ГБ ОЗУ, и независимо от того, сколько соединений я открываю, она завершается за те же 25 минут, и загрузка ЦП никогда не превышает 60%.Если я открываю более 18 одновременных подключений, я получаю сообщение об ошибке:

[33304] System.Data.SqlClient.SqlException (0x80131904): The query processor could not start the necessary thread resources for parallel query execution.

Затем я уменьшил степень параллелизма SQL Server до 1 (по умолчанию это было 4), и теперь я могу открыть больше подключений.Но проблема все та же, это не масштабирование.

У меня Windows Server 2008 R2 SP1 и SQL Server 2008 R2 SP1 Standard на обеих машинах.

...