Na dysku systemowym zabrakło miejsca podczas uruchamiania ciężkich zapytań SQL w SQL Server 2012

14

Jestem całkiem nowy w SQL Server 2012, byłbym wdzięczny, gdyby ktoś mógł pomóc. Przywróciłem kopię ogromnej bazy danych do SQL Server 2012 i próbowałem uruchomić przeciwko niej kilka prostych zapytań.

Próbuję uruchomić zapytanie SELECT względem tabeli 136898115wierszy bazy danych . To SELECTzapytanie ma tylko prostą WHEREklauzulę. Za każdym razem, gdy uruchamiam to zapytanie, kończy się ono niepowodzeniem, ponieważ na dysku systemowym (partycja, na której jest zainstalowany system Windows - C:\) kończy się miejsce (ta partycja ma tylko 6 GB wolnego miejsca) i nie rozumiem dlaczego. Zdefiniowałem tempdb na innym dysku, który ma więcej niż 14 terabajtów wolnego miejsca. Oczywiście, że moja baza danych znajduje się również na innym dysku.

Co powoduje, że na partycji systemowej zabrakło miejsca? Czy to plik strony?

Royv
źródło
2
Brakuje mi miejsca w systemie. Uruchomiłem SSMS, ale to ta sama maszyna. Używam SSMS na rzeczywistym serwerze SQL.
royv
2
Ogólnie zaleca się, aby nie uruchamiać żadnych innych aplikacji w oknie systemu Windows Server ( nie SSMS) lub upewnić się, że ustawienie maksymalnej pamięci jest wystarczająco niskie, aby zapewnić wystarczającą ilość wolnej pamięci RAM. Zobacz moją odpowiedź tutaj: dba.stackexchange.com/a/19776/2718
Jon Seigel

Odpowiedzi:

12

Domyślnie wyniki zapytania SSMS są buforowane na dysk C: Przejdź do Narzędzia \ Opcje. Patrz załączony. Zmień to na inny wolumin z większą ilością miejsca i wszystko będzie dobrze.

wprowadź opis zdjęcia tutaj

Eric Higgins
źródło
1
Jeśli wybierzesz Wyniki do pliku, okno dialogowe Zapisz jako zostanie otwarte domyślnie. Nie sądzę, aby SSMS domyślnie zapisywał zestaw wyników na dysku, ale mogę się mylić.
Jon Seigel,
1
Wyniki wyświetlane w oknie zapytania są buforowane według mojego postu. Sprawdź dysk, uruchom duże zapytanie w SSMS i sprawdź ponownie. Zobaczysz utratę miejsca na dysku C: jeśli nie określono inaczej.
Eric Higgins,
1
to prawda. nie jest związany z moim plikiem strony. przeniosłem plik strony na inny dysk, a wciąż na moim dysku C: zabrakło miejsca.
royv
11

Ok, zrozumiałem: Eric i ja mieliśmy rację!

  • Ścieżka w oknie dialogowym jest, jak już powiedziałem, tylko domyślną ścieżką do zapisywania wyników zapytań.
  • Wyniki zapytania buforowane na dysk (myliłem się), ale w folderze tymczasowym profilu lokalnego ( C:\Users\<UserName>\AppData\Local\Tempw moim przypadku tutaj). Sprawdziłem i wydaje się, że nie ma oczywistego sposobu na wyłączenie tego buforowania.

Tak więc na wynos są:

  • Unikaj uruchamiania SSMS bezpośrednio w polu SQL
  • Nie SELECT *przestawiaj z dużej tabeli w SSMS, chyba że zestaw wyników mieści się w folderze profilu
  • Upewnij się, że ustawienie maksymalnej pamięci programu SQL Server jest poprawnie skonfigurowane (mogło lub nie mogło przyczynić się do tego problemu w odniesieniu do wzrostu pliku strony)
Jon Seigel
źródło
7

Właśnie cierpiałem na ten sam problem. Po przeczytaniu powyższych odpowiedzi znalazłem następujące.

Narzędzia | Opcje to nie odpowiedź. Mój był ustawiony na dysk Y: jeszcze obserwowałem, jak moje zapytanie działa, a miejsce na dysku C: spadło z 2,9 GB do 5,04 MB (zanim zabiłem zapytanie).

Pomyślałem więc, że to prawdopodobnie wyniki buforowania (ponieważ są bardzo duże z każdym zwracanym wierszem zawierającym dużą część XML) do katalogu Temp, co powiedział Jon, ale nie był pewien, jak to zmienisz.

To, co zrobiłem, aby zmienić, gdzie zapisywane są pliki tymczasowe, to otworzyć moje Zmienne środowiskowe i edytować zmienne użytkownika TEMP i TMP (oba ustawione na C: \ Temp), aby zapisać w Z: \ Temp.

Mogę potwierdzić, że po tej zmianie obserwowałem, jak zapytanie tworzy bardzo duży plik w moim katalogu Z: \ Temp.

Nick Ryan
źródło
Świetne informacje, gdy trzeba przejść proces, aby zaktualizować przestrzeń HD w vm i mieć dużo pamięci sieciowej. Jestem trochę ciekawy, jeśli masz problemy z przepustowością plików w wąskich gardłach w sieci, możesz wyjść poza c: \ powolne wykonywanie zapytań?
GibralterTop
To było 3 lata temu i nie pamiętam dokładnie, jakie były wówczas okoliczności. Mam teraz laptopa z żałosną ilością pamięci RAM i mocą przetwarzania, co jest inną historią. Jestem prawie pewien, że dysk Z: był po prostu kolejnym „lokalnym” dyskiem na mojej maszynie wirtualnej. Nie jestem pewien, dlaczego nie oznaczono go D: lub E: ale ta część była poza moją kontrolą. Tak więc dla mnie tak naprawdę nie było problemu z siecią.
Nick Ryan