Jak wyczyścić tabelę z pamięci podręcznej programu SQL Server?

10

W mojej bazie danych jest kilka tabel, których nie należy buforować.

Jak powiedzieć SQL Serverowi, aby nie buforował stron tabeli lub jak wyczyścić pojedynczą tabelę z bufora?

Opróżnianie całej pamięci podręcznej nie jest opcją.

Używam SQL Server 2008 i SQL Server 2008 R2.

Catalin Adler
źródło
4
Na jakiej podstawie zdecydowałeś, że tabele nie powinny być buforowane?
3
Jeśli twoje tabele są buforowane, to są one odpytywane. Jeśli są one uzyskiwane rzadko, menedżer pamięci SQL Server wypłukuje je w preferowanym czasie w stosunku do innych obiektów. Jaki jest twój cel tutaj?
John Sansom,
4
@John - Nie mam pojęcia, jaki jest cel PO, ale są chwile, w których byłoby to przydatne. np. wykonanie jednorazowego skanowania dużego stołu bez opróżniania puli buforów.
3
Niektóre z powodów: tabela o niskim priorytecie, iis / rs na tym samym komputerze co serwer sql, zużycie energii itp. Najważniejsze jest to, że niektóre tabele są tabelami o niskim priorytecie pod względem wydajności aplikacji i można je bezpiecznie odczytać z dysku za każdym razem, gdy są dostępne. Dzięki utrzymywaniu tych tabel poza pulą buforów analiza pamięci staje się nieco łatwiejsza.
Catalin Adler
1
@ user973156: Czy Twój kod i projekt są tak dobre , że teraz możesz tylko zgadywać SQL Server, aby poprawić sytuację?
gbn

Odpowiedzi:

12

Nie da się tego zrobić.

DBCC DROPCLEANBUFFERSnie akceptuje żadnych parametrów dla konkretnej bazy danych lub obiektu. Wewnętrznie SQL Server może to zrobić na poziomie bazy danych, jednak tak jak w przypadku bazy danych AUTO_CLOSEd wszystkie odpowiednie strony są usuwane z bufora bufora.

Również wewnętrznie SQL Server może oznaczać niektóre strony tak, że będą one pierwszymi wyrzuconymi przez leniwego pisarza. Jest to wykorzystywane przez DMV, takie jak sys.dm_db_index_physical_statsunikanie opróżniania puli buforów, jak wspomniano w tym artykule, ale ta funkcja nie jest nam w żaden sposób ujawniona (nawet jeśli może być przydatne określenie tego samego, jeśli wykonujesz jednorazowy skan na przykład dużego stołu).

Martin Smith
źródło
7

Nie można określić, że określone tabele nie powinny być buforowane. Co sprawia, że ​​myślisz, że nie chcesz tabel w pamięci podręcznej?

SQL Server wykonuje WSZYSTKIE swoje normalne operacje w puli buforów, więc jeśli byłeś w stanie powiedzieć SQL Serverowi, aby nie ładował tabeli do pamięci podręcznej, ta tabela nie byłaby dostępna dla żadnych normalnych operacji DML.

mrdenny
źródło