Mam proste zapytanie uruchomione przeciwko SQL Server 2005
SELECT *
FROM Table
WHERE Col = 'someval'
Pierwsze uruchomienie zapytania może zająć > 15 secs
. Kolejne wykonania są z powrotem < 1 sec
.
Jak mogę uzyskać, aby SQL Server 2005 nie używał żadnych wyników w pamięci podręcznej? Próbowałem biegać
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Ale wydaje się, że nie ma to wpływu na szybkość zapytania (nadal < 1 sec
).
sql-server
caching
PaulB
źródło
źródło
Odpowiedzi:
Oto kilka dobrych wyjaśnień. sprawdź to.
http://www.mssqltips.com/tip.asp?tip=1360
Z powiązanego artykułu:
źródło
Osiem różnych sposobów na wyczyszczenie pamięci podręcznej planu
1. Usuń wszystkie elementy z pamięci podręcznej planu dla całej instancji
Użyj tego, aby ostrożnie wyczyścić pamięć podręczną planu. Zwolnienie pamięci podręcznej planu powoduje na przykład rekompilację procedury składowanej zamiast ponownego użycia z pamięci podręcznej. Może to spowodować nagły, tymczasowy spadek wydajności zapytań.
2. Opróżnij pamięć podręczną planu dla całej instancji i pomiń komunikat o regularnym zakończeniu
„Wykonanie DBCC zakończone. Jeśli DBCC wydrukuje komunikaty o błędach, skontaktuj się z administratorem systemu.”
3. Opróżnij pamięć podręczną ad hoc i przygotowany plan dla całej instancji
4. Opróżnij pamięć podręczną ad hoc i przygotowany plan dla jednej puli zasobów
5. Opróżnij całą pamięć podręczną planu dla jednej puli zasobów
6. Usuń wszystkie elementy z pamięci podręcznej planu dla jednej bazy danych (nie działa w SQL Azure)
7. Wyczyść pamięć podręczną planu dla bieżącej bazy danych
8. Usuń jeden plan zapytań z pamięci podręcznej
Źródło 1 2 3
źródło
Pytanie jest nieco stare, ale może pomóc. Mam podobne problemy i skorzystanie z opcji poniżej pomogło mi. Nie jestem pewien, czy jest to trwałe rozwiązanie, ale na razie to naprawia.
Wtedy twoje zapytanie będzie takie
źródło
select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
Podana wartość pamięci serwera nie jest ważna, o ile różni się od bieżącej.
Btw, rzeczą, która powoduje przyspieszenie nie jest pamięć podręczna zapytań, ale pamięć podręczna danych.
źródło
Należy pamiętać, że ani
DBCC DROPCLEANBUFFERS;
ani nieDBCC FREEPROCCACHE;
jest obsługiwany w usłudze SQL Azure / SQL Data Warehouse.Jeśli jednak musisz zresetować pamięć podręczną planu na SQL Azure, możesz zmienić jedną z tabel w zapytaniu (na przykład po prostu dodaj, a następnie usuń kolumnę), będzie to miało efekt uboczny usuwania planu z pamięci podręcznej .
Osobiście robię to jako sposób testowania wydajności zapytań bez konieczności radzenia sobie z buforowanymi planami.
Więcej informacji o pamięci podręcznej procedur SQL Azure tutaj
źródło