SQL-запрос быстрее на медленной машине

У нас есть два сервера MS SQL под управлением MS SQL 2012. Один из них имеет 8 ГБ ОЗУ, 2 процессора и достаточно памяти. Другой имеет 8 процессоров, 64 ГБ ОЗУ, несколько подключенных дисков с данными, программами, журналами и разделенными базами данных.

Обычно большой сервер работает быстрее на запросы. Однако, по простому запросу, маленькая машина занимает 10 секунд, а другая машина - 5 минут. Насколько мы можем определить, параметры SQL Server одинаковы, данные одинаковы, запрос одинаков на обеих машинах, предполагаемый и фактический планы выполнения одинаковы на обеих машинах, но большая машина работает медленнее., Tempdb - это один файл на том же диске, что и SQL.exe на маленькой машине, и для большой машины на диске SSD есть 8 файлов в базе данных tempdb.

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

Запрос:

SELECT field1, field2 
FROM lookuptable1
WHERE field2 <> '' 
AND field1 not in (SELECT field1 
    FROM lookuptable2
)

У нас есть 16 потоков для параллельных задач на большой машине и 4 на маленькой. Запрос не возвращает значений (ожидаемых), но гораздо медленнее с большей машиной. Статистика была перестроена, а планы запросов сброшены.

1 ответ

Проверьте, существует ли (против IN), может иметь значение.

SELECT field1, field2 
FROM lookuptable1 outerTableAlias
WHERE field2 <> '' 
AND not exists (SELECT * 
    FROM lookuptable2 innerTable where innerTable.field1 = outerTableAlias.field1 )

)

Попробуйте запрос без "field2 <> ''". Это было бы весьма подозрительным местом для table_scan.

Другие вопросы по тегам