MSSQLSERVER_17890

Dotyczy:SQL Server

Details

Atrybut Value
Nazwa produktu SQL Server
Identyfikator zdarzenia 17890
Źródło zdarzenia MSSQLSERVER
Składnik SQLEngine
Nazwa symboliczna SRV_WS_TRIMMED
Tekst wiadomości Znaczna część pamięci procesów programu SQL Server została wyświetlona. Może to spowodować obniżenie wydajności. Czas trwania: %d sekund. Zestaw roboczy (KB): %I64d, przydzielone (KB): %I64d, wykorzystanie pamięci: %d%%.

Explanation

Możesz napotkać następujący komunikat o błędzie w logu błędów SQL Server lub w dzienniku zdarzeń aplikacji Windows.

Znaczna część pamięci procesów programu SQL Server została wyświetlona. Może to spowodować obniżenie wydajności. Czas trwania: 0 sekund. Zbiór roboczy (KB): 3383250, zatwierdzony (KB): 9112480, wykorzystanie pamięci: 37%.

Możesz też zauważyć nagły spadek wydajności przy wykonywaniu zapytań i wszystkich innych operacjach na SQL Server.

Przyczyna

SQL Server monitoruje różne informacje związane z pamięcią dotyczącą procesu SQL Server. W tym przypadku wykrył, że zbiór roboczy procesu stanowi mniej niż 50% pamięci zadeklarowanego procesu. W rezultacie to ostrzeżenie jest drukowane. Typowe przyczyny tego ostrzeżenia to:

  • System operacyjny wyodrębnia duże części pamięci SQL Server przeznaczonej na plik stronicowania.
  • Może to wynikać z nagłego wzrostu zapotrzebowania na pamięć ze strony innych aplikacji lub potrzeb systemu operacyjnego.
  • Może się to również zdarzyć, gdy niektóre sterowniki urządzeń żądają ciągłych alokacji pamięci dla swoich potrzeb.

Akcja użytkownika

Możesz zapobiec wypychaniu pamięci buforowej procesu SQL Server przez system Windows, blokując pamięć przydzieloną do puli bufora w pamięci fizycznej. Pamięć blokujesz, przypisując prawo użytkownika Lock pages in memory do konta użytkownika używanego jako konto startowe usługi SQL Server. Ale zanim wdrożysz to rozwiązanie, przejrzyj sekcje: Co powoduje wyrzucanie pamięci SQL Server oraz ważne kwestie przed przypisaniem prawa użytkownika "Lock pages in memory" dla instancji SQL Server

Note

Używanie Lock Pages in Memory zapewnia, że pamięć zarządzana przez SQL Server nie jest wyciągana na page. Jednak stosy wątków, EXE oraz obrazy DLL, pamięć sterta i pamięć CLR mogą być nadal wyciągane przez system operacyjny.

Począwszy od SQL Server 2008 SP1 Cumulative Update 2, zarówno edycje SQL Server Standard, jak i Enterprise mogą korzystać z praw użytkownika Lock pages in memory. Aby uzyskać więcej informacji o wsparciu dla zablokowanych stron, zobacz KB970070 - Support for Locked Pages na systemach SQL Server Standard Edition (64-bit).

Aby przypisać strony blokady w pamięci do prawa użytkownika, należy postępować zgodnie z następującymi krokami:

  1. Kliknij Start, kliknij Uruchom, wpisz gpedit.msc, a potem OK.
  2. Uwaga: Pojawia się okno dialogowe Polityki Grupowej.
  3. Rozwiń Konfigurację komputera, a następnie Ustawienia Windows.
  4. Rozwiń Ustawienia Bezpieczeństwa, a następnie Lokalne Polityki.
  5. Kliknij Przypisanie praw użytkownika, a następnie dwukrotnie kliknij Zamknij strony w pamięci.
  6. W oknie dialogowym Local Security Policy Settings kliknij Dodaj użytkownika lub grupę.
  7. W oknie dialogowym Wybierz użytkowników lub grupy dodaj konto, które ma uprawnienia do uruchomienia pliku Sqlservr.exe, a następnie kliknij OK.
  8. Zamknij okno dialogowe Polityka Grupy .
  9. Uruchom ponownie usługę SQL Server.

Po przypisaniu prawa użytkownika Lock pages w pamięci i ponownym uruchomieniu usługi SQL Server, system operacyjny Windows nie stronicuje już pamięci buforowej w procesie SQL Server. Jednak system operacyjny Windows nadal może wykartować pamięć niebuforową w procesie SQL Server.

Możesz zweryfikować, czy dane prawo użytkownika jest używane przez instancję SQL Server, upewniając się, że następujący komunikat jest zapisany w logu błędów SQL Server przy starcie: "Using locked pages for buffer pool"

Ta wiadomość dotyczy wyłącznie SQL Server. Aby uzyskać więcej informacji o tym wiadomości w ERRORLOG, odwiedź następującą stronę: Czy muszę przypisać strony blokady dla uprawnień do pamięci w systemie lokalnym

Gdy system operacyjny Windows wyodrębnia pamięć niebuforowaną, nadal możesz napotkać problemy z wydajnością. Jednak komunikaty o błędach wymienione w sekcji "Wyjaśnienie" nie są rejestrowane w logu błędów SQL Server.

Co powoduje, że pamięć SQL Server jest wyrzucana

Istnieją trzy szerokie kategorie problemów, które mogą powodować ten problem:

  • Application-Related Problemy: Wszystkie aplikacje razem wyczerpały dostępną fizyczną pamięć i system operacyjny musi zwolnić część pamięci na nowe żądania aplikacji o zasoby. Zazwyczaj podejście polega na znalezieniu, które aplikacje wyczerpują pamięć i podjęciu niezbędnych kroków, aby zrównoważyć pamięć między nimi, nie prowadząc do wyczerpania RAM.
  • Problemy ze sterownikiem urządzenia: Sterowniki mogą powodować stronicowanie wszystkich procesów działającego zestawu, jeśli sterownik błędnie wywoła funkcję alokacji pamięci.
  • Problemy z systemem operacyjnym

Poniżej znajdziesz informacje o każdej z tych kategorii

  • Application-Related problemy: Aplikacje razem mogą zużywać całą pamięć RAM systemu. Jeśli zostaną złożone nowe żądania pamięci, system operacyjny próbuje je spełnić, a jeśli nie ma wolnej pamięci, przycina zestaw roboczy działających aplikacji, aby spełnić żądania pamięci. W takich przypadkach można zauważyć, że zestaw roboczy dla większości, jeśli nie wszystkich aplikacji, znacznie spada. Aby to zaobserwować, pobierz następujący licznik monitor wydajności dla wszystkich aplikacji w systemie:

    • Obiekt wydajności: Proces
    • Licznik: Zestaw roboczy

    Monitoruj także następujący licznik, aby porównać, ile pamięci fizycznej jest dostępne w systemie.

    • Obiekt wydajności: Pamięć
    • Licznik: Dostępna pamięć (MB)

    Typowe zachowanie, które można zauważyć, to zmniejszenie dostępnej pamięci do prawie 0 MB, a jednocześnie nagły spadek liczników Zestawu Roboczego dla większości (wszystkich) procesów w systemie. Jeśli zauważysz takie zachowanie, możesz być zmuszony do podjęcia działań mających na celu ograniczenie zużycia pamięci w systemie, co obejmuje na przykład ograniczenie maksymalnej ilości pamięci serwera dla SQL Server.

    Aplikacje mogą również zbyt często korzystać z pamięci podręcznej systemu, co może powodować znaczny wzrost jej pamięci. Aby odpowiedzieć na wzrost pamięci podręcznej systemu, system wyodrębnia zestaw roboczy procesu SQL Server lub innych aplikacji. Jeśli napotkasz ten problem, możesz użyć niektórych funkcji zarządzania pamięcią w aplikacji. Funkcje te kontrolują przestrzeń cache systemu, którą operacje I/O plików mogą wykorzystać w aplikacji. Na przykład możesz użyć funkcji SetSystemFileCacheSize oraz funkcji GetSystemFileCacheSize do kontrolowania przestrzeni pamięci podręcznej systemu, z której mogą korzystać operacje I/O plików.

    Możesz użyć obiektu Memory performance, aby zobaczyć wartości różnych liczników w tym obiekcie i określić, czy zestaw roboczy pamięci podręcznej systemu zużywa zbyt dużo pamięci. Na przykład możesz zobaczyć liczniki Cache Bytes oraz System Cache Resident Bytes. Więcej informacji na ten temat można znaleźć w następstwie:

    Możesz pobrać i wdrożyć "Microsoft Windows Dynamic Cache Service", aby kontrolować pamięć zużywaną przez systemową pamięć podręczną.

  • Problemy ze sterownikiem urządzenia: Jeśli sterownik urządzenia korzysta z tej MmAllocateContiguousMemory funkcji i ustawia wartość parametru HighestAcceptableAddress na mniej niż 4 gigabajty (GB), system operacyjny Windows może wypaśćować działający zestaw procesów w systemie, w tym proces SQL Server. Aby rozwiązać ten problem, skontaktuj się z dostawcą sterownika urządzenia w celu uzyskania aktualizacji sterownika.

    Gdy sterownik urządzenia próbuje przydzielić pamięć, system operacyjny Windows może wypaść działający zestaw innych aplikacji. Ten hotfix Windows pozwala użyć śledzenia zdarzeń, aby znaleźć sterownik urządzenia, który powoduje problem. Aby znaleźć więcej informacji o konkretnym sterowniku powodującym zachowanie przycinania zbioru roboczego, zobacz Identyfikację sterowników, które przydzielają pamięć ciągłą.

  • Problemy z systemem operacyjnym: Aby rozwiązać znane problemy powodujące wypchnięcie zestawu roboczego SQL Server przez system Windows, zastosuj hotfixy opisane w poniższych artykułach Baza wiedzy Microsoft Knowledge Base.

    Note

    Hotfixy są kumulacyjne. Późniejsza wersja hotfixu zawiera wcześniejsze wersje tego hotfixu.

Ważne kwestie przed nadaniem prawa użytkownika "Blokuj strony w pamięci"

Powinieneś jeszcze rozważyć zadanie przed przypisaniem prawa użytkownika Lock pages w pamięci. Jeśli przypiszesz tego użytkownika bezpośrednio do systemów, które są nieprawidłowo skonfigurowane, system może stać się niestabilny lub doświadczyć spadku wydajności całego systemu. Dodatkowo, ID zdarzenia 333 może być wpisany w dzienniku zdarzeń.

Jeśli skontaktujesz się z Microsoft Customer Support Service (CSS) w sprawie tych problemów, inżynierowie CSS mogą poprosić o odebranie tego prawa użytkownika do konta użytkownika używanego jako konto startowe usługi SQL Server. Ten etap może być niezbędny do zebrania ważnych danych o wydajności, które inżynierowie CSS mogą wykorzystać do konfiguracji różnych opcji SQL Server oraz innych aplikacji działających na systemie. Po zebraniu danych wydajnościowych przez inżynierów CSS możesz przypisać użytkownika Lock Pages in memory bezpośrednio do konta startowego usługi SQL Server.

Zanim przypiszesz prawo użytkownika Lock pages w pamięci, upewnij się, że wykonałeś log monitor wydajności, aby określić wymagania dotyczące pamięci różnych aplikacji i usług zainstalowanych na systemie. Do tych aplikacji należy także SQL Server. Aby określić wymagania dotyczące pamięci, zbierz następujące dane bazowe:

  • Upewnij się, że poprawnie ustawiłeś opcję maksymalnej pamięci serwera oraz minimalną pamięć serwera. Te opcje odzwierciedlają jedynie wymagania pamięci puli buforowej procesu SQL Server. Te opcje nie obejmują pamięci przydzielonej na inne komponenty w procesie SQL Server. Do tych elementów należą następujące:

    • Wątki robocze SQL Server
    • Różne DLL i komponenty, które proces SQL Server ładuje w przestrzeni adresowej procesu SQL Server
    • Operacje tworzenia kopii zapasowych i przywracania
  • DLL i komponenty obejmują różnych dostawców OLE DB, rozszerzone procedury przechowywane Microsoft obiekty COM używane dla procedur sp_OACreate przechowywanych, serwery połączone oraz SQL Server CLR. Pamięć przydzielana na te komponenty mieści się w obszarze niebuforowej puli przestrzeni adresowej procesu SQL Server. Aby idealnie określić maksymalną ilość pamięci, jaką cały proces SQL Server może wykorzystać, należy odjąć pamięć przydzieloną dla komponentów, które nie korzystają z puli buforowej, od całkowitej pamięci, którą chcesz, aby użył proces SQL Server. Następnie możesz użyć wartości pozostałej, aby ustawić opcję maksymalnej pamięci serwera. Zanim ustawisz opcję maksymalnej pamięci serwera oraz minimalną pamięć serwera, powinieneś dokładnie przejrzeć temat "Ręczne ustawianie opcji pamięci" w SQL Server Books Online.

  • Określenie wymagań dotyczących pamięci innych aplikacji oraz komponentów systemu operacyjnego Windows. Aplikacje mogą obejmować inne komponenty SQL Server, na przykład SQL Server Agent, SQL Server Replication Agents, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services oraz wyszukiwanie tekstowe w SQL Server. Aplikacje wykonujące operacje kopiowania kopii zapasowych i plików mogą zużywać dużo pamięci. Weź pod uwagę operacje takie jak kopiowanie masowe oraz Snapshot Agent, które generują IO plików. Musisz uwzględnić wymagania pamięci wszystkich tych aplikacji, ustalając wartość opcji maksymalnej pamięci serwera oraz opcji minimalnej pamięci serwerowej. Możesz użyć licznika Private Bytes oraz licznika Working Set pod obiektem Process dla każdego procesu, aby określić wymagania dotyczące pamięci dla konkretnego procesu.

  • Domyślnie prawo użytkownika Lock pages in memory zostało już przypisane do wbudowanego konta Local System. Aby uzyskać więcej informacji, odwiedź następującą stronę Microsoft: Czy muszę przypisać uprawnienia do zamykania stron w pamięci dla systemu lokalnego?

  • Jeśli używasz globalnego konta użytkownika Windows dla wszystkich procesów SQL Server w domenie, określ przypisane prawa użytkownika za pomocą konfiguracji polityki grupowej. Proces 32-bitowego SQL Server może używać tego konta jako konta startowego. Jednak to konto wymaga prawa użytkownika Lock Pages in Memory, aby włączyć Address Windowing Extensions funkcję (AWE). Więcej informacji można znaleźć w temacie "Zapewnienie maksymalnej ilości pamięci SQL Server" w SQL Server Books Online.

  • Zanim skonfigurujesz opcję maksymalnej pamięci serwera oraz minimalną pamięć serwera dla wielu instancji SQL Server, rozważ wymagania pamięci puli nonbuffer dla każdej instancji SQL Server. Następnie skonfiguruj te opcje dla każdej instancji SQL Server.

Idealnie byłoby zbierać te dane bazowe podczas szczytowych obciążeń. Dzięki temu można określić wymagania dotyczące pamięci dla różnych aplikacji i komponentów, aby utrzymać szczytowe obciążenie. Wymagania dotyczące pamięci różnią się w zależności od systemu, w zależności od aktywności i aplikacji działających na danym systemie. Możesz zapytać informacje zawarte w widoku dynamicznego zarządzania sys.dm_os_process_memory, aby dowiedzieć się, czy system doświadcza niskiej ilości pamięci. Więcej informacji można znaleźć w sys.dm_os_process_memory (Transact-SQL).

Ulepszenia dodane w wersji Windows Server 2008 i R2

Windows Server 2008 oraz Windows Server 2008 R2 ulepszają mechanizm ciągłego przydziału pamięci. To ulepszenie pozwala Windows Server 2008 i Windows Server 2008 R2 w pewnym stopniu zmniejszyć efekt wypychania działającego zestawu aplikacji przy pojawianiu się nowych żądań pamięci.

Poniżej przedstawiono wyjaśnienie ulepszeń wynikających z białej księgi Microsoft "Advances in Memory Management in Windows":

W Windows Server 2008 alokacja fizycznie nieprzerwanej pamięci została znacznie ulepszona. Żądania przydziału pamięci ciągłej mają znacznie większe szanse powodzenia, ponieważ menedżer pamięci dynamicznie zastępuje strony, zazwyczaj bez przycinania zbioru roboczego czy wykonywania operacji I/O. Ponadto wiele innych typów stron — takich jak stosy jądra czy strony metadanych systemów plików — jest obecnie kandydatami do zastąpienia. W konsekwencji w danym momencie dostępna jest zazwyczaj bardziej ciągła pamięć. Ponadto koszty uzyskania takich środków są znacznie niższe.

Aby uzyskać więcej informacji, zobacz SQL Server Working Set Trim Problems.

Produkty innych firm, które omówiono w tym artykule, są produkowane przez firmy niezależne od Microsoft. Microsoft nie udziela żadnych gwarancji, domniemanych lub w inny sposób, dotyczących wydajności lub niezawodności tych produktów.