tło
Jestem w trakcie migracji bazy danych 160 GB z MSSQL 2008 (standard) na serwerze Win 2008 z 48 GB pamięci RAM na nowy serwer z MSSQL 2012 (64-bitowa wersja internetowa) na Win 2012 z 64 GB pamięci RAM. Stary serwer działa i jest obciążony; nowy serwer nie jest produkowany. Nowy serwer ma 8 plików tempdb (4 GB każdy).
Problem
Podczas testowania na nowym serwerze widzę kroki w wielu zapytaniach, które powodują alerty o: „operator używał tempdb do rozlewania danych podczas wykonywania”. Udało mi się uniknąć sortowania, przepisując niektóre zapytania, ale tak naprawdę nie rozwiązuje to problemu. Te same zapytania na starym serwerze nie powodują rozlewania. Czytałem, że wycieki występują, gdy MSSQL nie może ukończyć operacji w pamięci i musi przelać / stronę do tempdb. Czy powinienem martwić się wyciekami?
Przykłady
Uruchomiłem sp_updatestats w bazie danych, więc statystyki powinny być aktualne, ale zauważysz, że istnieją pewne rozbieżności między szacowaną a rzeczywistą liczbą wierszy.
Problem z pamięcią
Ustawiłem maksymalne ustawienie pamięci dla MSSQL na 58 z 64 GB. Obecnie MSSQL zużył około 35 GB tej pamięci, ale ma działający zestaw tylko 682 MB. Stary serwer (choć produkcyjny, obsługuje ładowanie) ma 44 GB pamięci przydzielonej do MSSQL, z czego 43,5 GB jest w zestawie roboczym.
Nie wiem, czy wyciek może być związany z ustawieniem pamięci - ktoś ma jakieś pomysły? MSSQL ma obecnie wiele pamięci RAM do oszczędzenia, więc dlaczego rozlewa się do tempdb dla niektórych rodzajów i dopasowań mieszających?