Używam Microsoft SQL Server 2012 i próbuję uruchomić proste zapytanie w Management Studio. Otrzymuję następujący błąd (w SSMS, uruchomiony na serwerze):
Wystąpił błąd podczas wykonywania partii. Komunikat o błędzie: Zgłoszono wyjątek typu „System.OutOfMemoryException”.
W systemie zainstalowano 24 GB pamięci RAM, ale w menedżerze zadań proces sqlservr.exe używa tylko 2,9 GB.
Czy jest jakieś ustawienie, które ogranicza użycie pamięci RAM?
Ten błąd wskazuje, że w Management Studio kończy się pamięć, a nie usługa SQL Server. Nawet jeśli zainstalowano 64-bitowy program SQL Server, plik wykonywalny SQL Server Management Studio jest aplikacją 32-bitową.
Jest to prawdopodobnie spowodowane wielkością zestawu wyników zwracanego do Management Studio. Czy wykonujesz coś takiego jak WYBIERZ * z naprawdę_tabela? Więcej informacji można znaleźć na stronie http://support.microsoft.com/kb/2874903 .
Mike ma rację, że otrzymany komunikat o błędzie pochodzi z samej aplikacji Management Studio, a nie z programu SQL Server. Wyczerpana jest pamięć na lokalnej stacji roboczej, prawdopodobnie z powodu próby wciągnięcia 16 miliardów wierszy do aplikacji klienckiej (renderowanie tak dużej ilości danych w siatce jest dość drogie pod względem pamięci, więc spróbuj ograniczyć zapytania przy użyciu TOPitp. - Nie wiem, jakie praktyczne rzeczy można by zrobić przy wystarczającej ilości danych, aby mimo to wykorzystać całą pamięć lokalną).
Ale chcę rozwiązać inny problem: użycie Menedżera zadań do oceny ilości pamięci używanej przez SQL Server. Nie rób tego; to odważny kłamca. Kopiowanie z tej odpowiedzi (twoje pytanie jest dwojakie, więc nie mogę tak naprawdę zamknąć go jako duplikat):
NIGDY, NIGDY nie ufaj Menedżerowi zadań, który powie ci, ile pamięci używa SQL Server. Przestań używać Menedżera zadań dla tego okresu. Użyj licznika wydajności - możesz również wykonać kwerendę licznika wydajności za pomocą DMV:
SELECT object_name, cntr_value FROM sys.dm_os_performance_countersWHERE counter_name ='Total Server Memory (KB)';
Możesz zapisać to jako skrót do zapytania w Narzędzia> Opcje> Środowisko> Klawiatura> Skróty do zapytań i uzyskać dokładne wyniki w oknie zapytania znacznie szybciej niż uzyskiwanie niedokładnych wyników z Menedżera zadań.
Możesz również sprawdzić presję pamięci (i czy możesz coś z tym zrobić) za pomocą tych zapytań:
SELECT object_name, cntr_valueFROM sys.dm_os_performance_countersWHERE counter_name IN('Total Server Memory (KB)','Target Server Memory (KB)');-- SQL Server 2012:SELECT physical_memory_kb FROM sys.dm_os_sys_info;-- Prior versions:SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;EXEC sp_configure 'max server memory';
Powyższe polecenia dotyczą nowych wersji SQL. W przypadku serwerów SQL 2008 R2 polecenia są nieco inne. Dodam kolejny post do tego niższego poziomu dla tych serwerów, ponieważ komentarze uzupełniające nie są wystarczająco sformatowane, aby je tutaj umieścić
David Bridge
15
Tak samo było ze mną. Moje SQL Server Management Studio było otwarte przez kilka dni. Uruchomiłem go ponownie i problem został rozwiązany.
Odkryłem, że wyłączenie IntelliSense pomogło. Polecam również sprawdzenie wszelkich posiadanych dodatków (rzeczy takie jak narzędzia RedGate i ApexSQL również zaostrzyły ten problem).
Ten problem nękał mnie od kilku dni i szczerze mówiąc, jest dość słaby od Microsoftu. Powinny naprawdę mieć 64-bitowe zestawy narzędzi, ponieważ obecnie mamy do czynienia z dużymi zbiorami danych, 64-bitowymi serwerami i środowiskami komputerowymi.
W moim przypadku RedGate SQL Prompt walczył z SSMS wbudowanym w intellisense. Wyłączenie inteligencji SSMS sprawiło, że zapytanie SQL również działało znacznie lepiej.
TTT
1
W przypadku SQL 2008 R2 polecenia zapytania do pamięci (z postu Aarona Bertranda) są następujące
SELECT object_name, cntr_valueFROM sys.dm_os_performance_countersWHERE counter_name ='Total Server Memory (KB)';SELECT object_name, cntr_valueFROM sys.dm_os_performance_countersWHERE counter_name IN('Total Server Memory (KB)','Target Server Memory (KB)');-- SQL Server 2012:SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;-- Prior versions:SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;
Zauważ też, że polecenie
EXEC sp_configure 'max server memory';
może nie działać, chyba że masz włączone opcje zaawansowane. np. zrób to pierwszy
Tak samo było ze mną. Moje SQL Server Management Studio było otwarte przez kilka dni. Uruchomiłem go ponownie i problem został rozwiązany.
źródło
Odkryłem, że wyłączenie IntelliSense pomogło. Polecam również sprawdzenie wszelkich posiadanych dodatków (rzeczy takie jak narzędzia RedGate i ApexSQL również zaostrzyły ten problem).
Ten problem nękał mnie od kilku dni i szczerze mówiąc, jest dość słaby od Microsoftu. Powinny naprawdę mieć 64-bitowe zestawy narzędzi, ponieważ obecnie mamy do czynienia z dużymi zbiorami danych, 64-bitowymi serwerami i środowiskami komputerowymi.
źródło
W przypadku SQL 2008 R2 polecenia zapytania do pamięci (z postu Aarona Bertranda) są następujące
Zauważ też, że polecenie
może nie działać, chyba że masz włączone opcje zaawansowane. np. zrób to pierwszy
źródło
Należy pamiętać, że występuje problem z połączeniem Microsoft jako wyciek pamięci SSMS. Myślą, że rozwiązali to w wersji 16.5
Zobacz problem na Connect.microsoft.com, klikając tutaj
Jeśli zainstalujesz najnowszą wersję i nadal masz problem, zagłosuj, aby ponownie otworzyć.
SSMS v16.5 tutaj
Problem z połączeniem wskazujący wyciek pamięci naprawiony tutaj w 16.5
źródło