Mam witrynę sieci Web ASP.NET, która wykonuje własne buforowanie danych, a dane nie zmieniają się przez długi czas, więc nie trzeba ponownie wysyłać zapytań do programu SQL Server za pomocą tego samego zapytania. Muszę poprawić wydajność pierwszych zapytań (dziewiczych), które trafiają do tego programu SQL Server. Niektóre zapytania przetwarzają tak dużo danych, że mogą powodować użycie programu SQL Server tempdb
. Nie używam zmiennych tabeli tymczasowej ani tabel tymczasowych, więc SQL Server sam decyduje się na użycie tempdb
, gdy tylko zajdzie taka potrzeba.
Mój rozmiar bazy danych wynosi 16 GB, mam 32 GB fizycznej pamięci RAM na moim serwerze.
Rozumiem, że strategia buforowania MS SQL Server próbuje utrzymać dane w pamięci RAM, aby przyspieszyć wydajność podobnych zapytań, jeśli potrzebują one ponownie załadować te same dane. Oprócz tego spróbuje użyć dostępnej pamięci RAM zamiast tempdb w celu przyspieszenia wydajności bez powodowania dostępu do dysku.
Podejrzewam, że gdy pojawia się zapytanie, które musi przechowywać coś w tempdb SQL Server i nie ma wystarczającej ilości pamięci RAM, SQL Server ma 2 możliwości:
1) aby zwolnić niektóre buforowane dane i użyć oszczędzonej pamięci RAM zamiast tempdb, aby uniknąć zapisywania na dysku
2) zachowuj buforowane dane dla przyszłych zapytań i zacznij używać tempdb, co powoduje, że zapis spowalnia dysk.
Nie wiem, jakiego wyboru dokona SQL Server w tej sytuacji, ale chciałbym, aby dokonał wyboru nr 1, ponieważ zależy mi tylko na wydajności pierwszych zapytań (dziewiczych), ponieważ nigdy więcej nie wysyłam tego samego zapytania do SQL Server (chociaż mogę wysłać podobne zapytanie).
Jaka jest strategia buforowania programu SQL Server dla tego scenariusza?
W jaki sposób równoważy użycie pamięci RAM między unikaniem tempdb dla pierwotnych zapytań a szybkością drugiego zapytania?
Czy można skonfigurować program SQL Server w taki sposób, aby dokonał wyboru nr 1? Jeśli tak to jak?
Jak inaczej mogę zwiększyć wydajność wszystkich dziewiczych zapytań SQL?
Ponieważ nie znam strategii buforowania programu SQL Server, chcę umieścić bazę danych na dysku RAM. Zapewni to, że każde pierwotne zapytanie ma wysoką prędkość ładowania niebuforowanych danych, nawet jeśli SQL Server zawsze dokonuje wyboru nr 1. Ryzyko polega na tym, że SQL Server może zacząć używać więcej tempdb z mniej dostępną pamięcią RAM (pozostało tylko 16 GB po użyciu 16 GB dla dysku RAM), jeśli nadal wybierze numer 2, co spowolni te dziewicze zapytania, które powodują rozlanie tempdb
.
Interesuje mnie rozwiązanie dla SQL 2008 R2, ale chyba jest tak samo dla SQL 2008, SQL 2005 i może to być SQL 2000.
Wyjaśnienia:
Na tym urządzeniu nie działają żadne inne aplikacje, jest on dedykowany dla SQL Server . Strona internetowa działa na osobnym polu.
Jest to SQL Server 2008 R2 Standard Edition 64-bitowy w systemie Windows Server 2008 R2 Enterprise 64-bitowy.
Uruchamiam tylko zapytania tylko do odczytu, a baza danych jest ustawiona tylko do odczytu .
Załóżmy, że istnieją już dobre indeksy . To pytanie dotyczy SQL Server dokonującego wyboru nr 1 vs. wyboru nr 2, jak to zrobić, czy istnieje sposób, aby to kontrolować i czy Dysk RAM pomaga w dokonaniu właściwego wyboru w przypadku dziewiczych zapytań.