Mamy rozbudowany serwer Windows 2008 x64 (4 x 4 rdzeniowy procesor, 32 GB pamięci RAM) z uruchomionym SQL Server 2005 64-bitowym. Mamy małą (6 GB), ale bardzo ważną bazę danych, do której dostęp jest nieco powolny, dopóki strony nie zostaną buforowane w pamięci (użycie jest bardzo losowe we / wy, więc szanse są bardzo niskie, że dana strona jest w pamięci, a użytkownicy końcowi narzekać na początkową powolność). Dyski są wystarczająco szybkie (lokalny SAS 15K), ale myślę, że aplikacja jest dość niezdarnie napisana (jest to rozwiązanie COTS), więc zastanawiam się, czy istnieje sposób na „wymuszenie” bazy danych w pamięci w SQL Server 2005 (2008 nie jest obsługiwany przez dostawcę, więc nie powinniśmy jeszcze tego robić), aby uniknąć początkowego bluesa wypełniającego pamięć podręczną?
Moja obecna metoda polega na tym, że uruchamiam SELECT * z każdej tabeli w skrypcie, aby uzyskać strony danych w pamięci, ale niektóre obiekty (indeksy, wyszukiwanie pełnotekstowe itp.) Nie są buforowane przez tę metodę (i modyfikują skrypt, aby przesłuchiwał indeksy i napisz odpowiednie klauzule WHERE, aby buforować kompleks boil-the-ocean).
źródło
Dlaczego obiekty bazy danych są w pierwszej kolejności usuwane z pamięci podręcznej? Czy ponownie uruchamiasz usługi SQL, czy wyłączasz bazę danych / online? A może są wypychane przez buforowanie z innych baz danych?
Pozdrowienia,
SCM.
źródło
Jeśli baza danych jest tak mała, rozważ umieszczenie jej na dysku SSD?
źródło
Miałem kilka scenariuszy, że aktualizacja statystyk za pomocą FULLSCAN w tabelach kluczy zmusiła dane do buforowania i sprawiła, że moje kolejne pliki DML wokół tych tabel były znacznie szybsze. I nie było to wynikiem nieaktualnych statystyk, ponieważ nie spowodowało żadnych zmian w planach wykonania.
źródło
Dlaczego nie zainstalujesz drugiej instancji SQL Server z tylko tą bazą danych i nie ustawisz minimalnej pamięci dla tej instancji na 6 GB?
To zagwarantuje, że twoje inne bazy danych nigdy nie będą gromadziły pamięci z twojej „małej, ale bardzo ważnej” bazy danych.
Oznacza to również, że możesz przełączyć drugą instancję w tryb offline, a mały DB pozostanie w pamięci.
źródło
Użyłbym profilera do sprawdzenia twojej sql. Porównaj odczyty „logiczne” z odczytami „fizycznymi”. Serwer SQL jest inteligentny i użyje potrzebnej pamięci RAM, aby uzyskać najbardziej efektywne wyniki.
Sprawdź także, czy Twoje autostaty są aktualne.
Bez większego pojęcia o rodzaju zapytania i rozmiarach tabeli db brzmi to nieco dziwnie.
źródło