2009-03-06 13 views
11

Mamy problemy z naszym produkcyjnym serwerem SQL.SQL Server 2005 Memory Pressure i tempdb zapisują problem

Serwer: Podwójne Quad Core Xeon 8 GB RAM pojedyncze RAID 10 Array Windows 2003 Server 64-bit SQL Server 2005 Standardowy 64-Bit

Istnieje około 250 MB wolnej pamięci RAM na komputerze teraz . Serwer SQL ma około 6 GB pamięci RAM, a nasze oprogramowanie do monitorowania mówi, że w rzeczywistości używana jest tylko połowa pamięci RAM przydzielonej przez serwer SQL.

Nasza główna baza danych to około 20 GB, z czego około 12 GB jest używane z dowolną częstotliwością. Nasza tempdb ma 700 MB. Oba znajdują się na tej samej macierzy dyskowej.

Dodatkowo, używając Filemona, mogłem zauważyć, że plik tempdb miał 100 lub 1000 zapisów o długości 65536. Długość kolejki dysków wynosiła ponad 100 prawie 80% czasu.

Tak, oto moja questions-

  1. Co spowodowałoby wszystkie te pisze na tempdb? Nie jestem pewien, czy zawsze mieliśmy tak dużo aktywności, ale wydaje się to przesadne i te problemy są aktualne.

  2. Czy powinienem dodać więcej pamięci do serwera?

  3. Na serwerach o dużym obciążeniu pliki tempdb i db powinny znajdować się w oddzielnych tablicach?

+0

Mamy macierz RAID-10 z gorącym zapasowym. Kupiliśmy gorący zapas, gdy mieliśmy problemy z utratą dysków, ale te problemy zostały naprawione i nie ma problemów przez ponad rok. Czy utworzenie nowego dysku (bez RAID) na dysku zapasowym byłby szybką poprawką, aby poprawić wydajność tempdb? – Brian

Odpowiedz

7

Wysoka długość kolejki dysku nie oznacza, że ​​masz wąskie gardło wejścia/wyjścia, jeśli masz sieć SAN lub NAS, możesz chcieć spojrzeć na inne dodatkowe liczniki. Aby uzyskać więcej informacji, sprawdź numer SQL Server Urban Legends discussed.

1: Następujące operacje stopniu wykorzystać tempdb

  • Powtarzające tworzenia i usuwania tablic czasowych (publiczny)
  • zmiennych Tabela używające tempdb dla celów składowania
  • tabele
  • prac związanych kursorami
  • Tabele robocze powiązane z klauzulą ​​ORDER BY klauzula
  • Tabele robocze powiązane z klauzulą ​​GROUP BY
  • pliki prace związane z HASH PLANY

Te funkcje SQL Server 2005 również użyć tempdb mocno:

  • poziom wersji wiersza (snapshotisolation)
  • indeks Internecie re-building

Jak wymienione w innych odpowiedziach SO, przeczytaj this article na temat najlepszych praktyk w celu zwiększenia wydajności tempdb.
2: Patrząc na ilość wolnej pamięci RAM na serwerze, np. Patrząc na licznik WMI Pamięć-> Dostępne MB nie pomaga, ponieważ SQL Server buforuje strony danych w pamięci RAM, więc każdy serwer db działa wystarczająco długo będzie mieć mało wolnej pamięci RAM.
Liczniki należy spojrzeć na które są bardziej znaczące w mówieniu czy dodanie pamięci RAM do serwera pomoże to:
SQL Server Instance: Bufor Manager-> Strona Żywotność (w sekundach) Wartość poniżej 300- 400 sekund oznacza, że ​​Strony nie są w pamięci bardzo długo i dane są ciągle odczytywane z dysków. Serwery, które mają niską żywotność strony, skorzystają z dodatkowej pamięci RAM.
i
SQL Server Instance: Bufor Manager-> Buffer Cache hit Stosunek ten informuje, jaki procent stron, które zostały odczytane z pamięci RAM, które nie muszą ponosić odczytywane z dysku, współczynnik trafień cache obniżyć następnie 85 będzie oznaczać, że serwer będzie korzystał z dodatkowej pamięci RAM
3: Tak, tutaj nie może się nie udać.Zalecane jest posiadanie tempdb na oddzielnym zestawie dysków. Spójrz na this KB article pod nagłówkiem: Przenoszenie bazy danych tempdb, jak to zrobić.

+0

sprawdzona strona Życiu i Bufor bufora trafienie Ratio (nie jestem pewien, dlaczego nie myślałem o tym, ponieważ miałem problem z pamięcią w przeszłości). Średnia długość życia strony wynosiła 74 000, a bufor pamięci podręcznej 99,85. Całkiem pewne, że to nie jest problem z pamięcią! – Brian

+0

Okazało się, że jeden brakujący indeks powodował każdy mój problem - mogłem obserwować kolejkę dysku, dysk sec/write, a dysk sec/read spadał na drugi i stworzyłem indeks. Wyniki z tabeli 3 milionów rekordów zostały posortowane w tempdb z tego, co mogłem powiedzieć. – Brian

3

Doskonałe pytanie, +1

tempdb jest używany znacznie większym stopniu w SQL 2005+. co najmniej: poziom izolacji migawka, indeks Internecie odbudować, czytanie WŁOŻONA/usunięte w wyzwalacze

ten oprócz zwykłej kolejności klauzulami, tabel tymczasowych itp

You (używane do odczytu pliku dziennika!) Prawdopodobnie lepiej byłoby podzielić pliki logów i danych (również w celu odzyskania). Więcej pamięci jest zawsze dobre, ale zobacz poniżej: 64 bit specific stuff, Grumpy Old DBA.

Wreszcie, a może najważniejszą prawdopodobnie można mieć twierdzenie alokacji przestrzeni w tempdb: wyjaśnień od Linchi Shea i SQL Server storage team

Późno edit:

Paul Randall dodał wpis „Comprehensive tempdb blog post series”, który oferuje dobre linki

0
  1. Zapisuje do tempdb może być cokolwiek. Wewnętrzne tabele skrótów, tabele tymczasowe, zmienne tabelowe, wywołania procedur składowanych itp.

  2. Jeśli masz tylko 250 MB darmowej pamięci RAM, to tak, więcej pamięci RAM byłoby dobre.

  3. Zaleca się podzielenie baz danych tempdb i użytkowników na różne dyski.

Wszystkie zapisy do tempdb będą miały rozmiar 64 tys., Ponieważ jest to rozmiar każdego zakresu bazy danych.

3

Nie bezpośrednio odpowiedź na pytanie, ale może to być dobra wskazówka: Ponowne uruchomienie SQL Server wystąpienie wyczyści tempdb, może to być dobry początek, gdy badać działania, które są wykonywane w tempdb.

+0

dzięki za napiwek! Nie wiem, dlaczego nie pomyślałem o tym. – Brian

Powiązane problemy