2011-07-13 15 views
10

Po rozejrzał się po sieci przy użyciu wujka Google, nie mogę znaleźć odpowiedzi na to pytanie:Zapobieganie buforowaniu w SQL Server

Jaki jest najlepszy sposób monitorowania wydajności i elastyczności serwerów produkcyjnych z systemem IIS i MS SQL Server 2005?

Obecnie korzystam z Pingdom i chciałbym, aby wskazywał na adres URL, który zasadniczo naśladuje "zapytanie dotyczące świata rzeczywistego", ale z oczywistych powodów nie chce, aby zapytanie było uruchamiane z pamięci podręcznej. Adres URL będzie wywoływany co 5 minut.

Nie mogę wyczyścić pamięci podręcznej, buforów itp., Ponieważ wpłynie to negatywnie na serwer produkcyjny. Próbowałem użyć losowo wygenerowany numer w instrukcji SELECT w celu generowania unikatowych kwerend, ale kwerenda buforowana jest nadal używana.

Czy istnieje sposób symulacji NO_CACHE w MySQL?

Pozdrowienia

+0

Cześć Mitch, mamy 3 serwery, serwer WWW, aplikację i bazę danych. Monitorowanie strony głównej nie odzwierciedla czasu zapytania ani reakcji naszych użytkowników, stąd "zapytanie dotyczące świata rzeczywistego" wykonywane przez skrypt PHP. Zmieniono oryginalne pytanie. –

+0

Usługi IIS i 2K5 są na oddzielnych serwerach. –

Odpowiedz

3

SQL Server nie posiada wyników cache jak MySQL lub Oracle, więc jestem nieco mylić o swoje pytanie. Jeśli chcesz, aby serwer ponownie rekompilował pamięć podręczną planu dla procedury składowanej, możesz wykonać ją Z NISKĄ OPCJĄ. Możesz upuścić pamięć podręczną bufora, ale to wpłynie na wszystkie zapytania, jak wiesz.

W mojej firmie testujemy oddzielnie dostępność i wydajność. Proponuję użyć tego zapytania tylko po to, aby upewnić się, że twój system współpracuje od front-end do bazy danych, a następnie zapisz inne testy, które sprawdzają poszczególne komponenty, aby ocenić wydajność. SQL Server ma wiele możliwości sprawdzenia, czy występują wąskie gardła i gdzie one są. Używam szeroko PerfMon i DMV. Korzystając z PerfMon, sprawdzam długość procesora i długość życia strony, a także widzę, jak długo trwa kolejka na dysku. Korzystając z DMV, mogę się dowiedzieć, czy moje zapytania trwają zbyt długo (sys.dm_exec_query_stats) lub czy czasy oczekiwania są długie (sys.dm_os_wait_stats).

Dwa największe wąskie gardła z IIS to procesor i pamięć, a IIS ma własny zestaw obiektów PerfMon do zapytania, ale nie jestem do nich tak dobrze zaznajomiony.

+0

Cześć Noel, powodem zapytania jest to, że mam zapytanie, które zajmuje 10 sekund, aby wykonać pierwszą rundę, a drugi czas zajmuje tylko 2 sekundy. Zmieniając klienta lub datę (nadal przy użyciu tej samej tabeli itp.), Wraca ona do 10 sekund dla pierwszego uruchomienia, 2 sekundy dla kolejnych serii. –

+0

Jim, brzmi to jak SQL Server buforuje w pamięci strony, które w przeciwnym razie czytasz z dysku, a tym samym widzisz różne czasy zapytania. Widzę, że próbujesz zapobiec ponownemu wykorzystaniu planu przez przypadkowe znaki, ale to nie spowoduje upuszczenia buforów.Być może powinieneś umieścić losową kolejność sortowania (ORDER BY NEWID()) tam, gdzie dodajesz TOP x, lub powinieneś wybrać losowy zakres wierszy za każdym razem, co spowoduje, że SQL odczyta z dysku (jeśli te strony nie były w pamięci z innych zapytań). – Noel

17

Aby wyczyścić pamięć podręczną bufora SQL i plan:

DBCC DROPCLEANBUFFERS 
GO 
DBCC FREEPROCCACHE 
GO 

Używaj DROPCLEANBUFFERS przetestowania zapytań z zimnym buforze pamięci podręcznej bez wyłączania i ponownego uruchamiania serwera. (source)

Użyj DBCC FREEPROCCACHE, aby wyczyścić pamięć podręczną planu. Zwolnienie pamięci podręcznej planów powoduje na przykład ponowną kompilację procedury składowanej zamiast ponownego użycia z pamięci podręcznej. (source)

+2

Warto wspomnieć, że wyczyści to pamięć podręczną dla całego serwera, więc uruchomienie go na serwerze produkcyjnym może nie być najlepszym pomysłem. Może to potrwać od kilku sekund do pół godziny, w zależności od liczby baz danych i planów buforowanych. – Groo