Задний план
Я нахожусь в процессе миграции базы данных 160 ГБ из MSSQL 2008 (стандарт) на сервер Win 2008 с 48 ГБ ОЗУ на новый сервер под управлением MSSQL 2012 (64-разрядная веб-версия) на Win 2012 с 64 ГБ ОЗУ. Старый сервер работает и загружен; новый сервер не работает Новый сервер имеет 8 файлов tempdb (по 4 ГБ каждый).
проблема
При тестировании на новом сервере я вижу, что шаги в многочисленных запросах вызывают оповещения с упоминанием «оператор использовал базу данных tempdb для разлива данных во время выполнения». Мне удалось избежать сортировки, переписав некоторые запросы, но это не решает проблему. Те же самые запросы на старом сервере не вызывают разливов. Я читал, что разливы случаются, когда MSSQL не может завершить операцию в памяти и должен пролить / страницу в tempdb. Должен ли я беспокоиться о разливах?
Примеры
Я запустил sp_updatestats в базе данных, поэтому статистика должна быть актуальной, но вы заметите, что есть некоторые расхождения между предполагаемым и фактическим количеством строк.
Проблема памяти
Я установил максимальный параметр памяти для MSSQL 58 из 64 ГБ. В настоящее время MSSQL использует около 35 ГБ этой памяти, но имеет рабочий набор всего 682 МБ. На старом сервере (хотя и на производстве, для обработки нагрузки) выделено 44 ГБ памяти, выделенной для MSSQL, из которых 43,5 ГБ находятся в рабочем наборе.
Я не знаю, могут ли разливы быть связаны с настройкой памяти - у кого-нибудь есть идеи? У MSSQL в настоящее время есть свободные места в ОЗУ, так почему же он переходит в базу данных tempdb для некоторых сортировок и хеш-совпадений?