Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pytanie o pamięć podręczną serwera SQL

Kiedy wykonujesz zapytanie, dane są wczytywane do pamięci w blokach. Bloki te pozostają w pamięci, ale "starzeją się". Oznacza to, że bloki są oznaczone ostatnim dostępem, a gdy Sql Server wymaga kolejnego bloku dla nowego zapytania, a pamięć podręczna jest pełna, najrzadziej używany blok (najstarszy) jest wyrzucany z pamięci. (W większości przypadków - bloki skanowania pełnych tabel są natychmiast przedawniane, aby zapobiec przepełnieniu pamięci i zablokowaniu serwera przez skanowanie pełnych tabel).

To, co się tutaj dzieje, polega na tym, że bloki danych w pamięci z pierwszego zapytania nie zostały jeszcze wyrzucone z pamięci, więc można je wykorzystać w drugim zapytaniu, co oznacza, że ​​unika się dostępu do dysku i poprawia wydajność.

Więc to, co tak naprawdę zadaje twoje pytanie, to „czy mogę pobrać potrzebne bloki danych do pamięci bez wczytywania ich do pamięci (właściwie wykonując zapytanie)?”. Odpowiedź brzmi:nie, chyba że chcesz buforować całe tabele i mieć je na stałe w pamięci, co od czasu zapytania (a tym samym rozmiaru danych), który opisujesz, prawdopodobnie nie jest dobrym pomysłem.

Najlepszym sposobem na poprawę wydajności jest przyjrzenie się planom wykonywania zapytań i sprawdzenie, czy zmiana indeksów może dać lepszy wynik. Istnieją dwa główne obszary, które mogą poprawić wydajność tutaj:

  • tworzenie indeksu, w którym zapytanie mogłoby go użyć, aby uniknąć nieefektywnych zapytań i pełnych skanów tabeli
  • dodanie większej liczby kolumn do indeksu, aby uniknąć drugiego odczytu dysku. Na przykład masz zapytanie, które zwraca kolumny A i B z klauzulą ​​where w A i C oraz masz indeks w kolumnie A. Twoje zapytanie użyje indeksu dla kolumny A wymagającej odczytu jednego dysku, a następnie drugiego dysku hit, aby uzyskać kolumny B i C. Jeśli indeks zawierał wszystkie kolumny A, B i C, można uniknąć drugiego trafienia dysku, aby uzyskać dane.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozwiązywanie problemów z wąskimi gardłami we/wy dysku

  2. Jak uniknąć pojedynczego cytatu w programie SQL Server?

  3. Unikaj duplikatów w zapytaniu INSERT INTO SELECT w SQL Server

  4. Wybieranie wartości z tabeli jako nagłówków kolumn

  5. jak uruchomić równoległe zapytanie na serwerze sql 2008?