sql >> Databáze >  >> RDS >> Sqlserver

Otázka mezipaměti serveru SQL Server

Když provedete dotaz, data se načtou do paměti v blocích. Tyto bloky zůstávají v paměti, ale „stárne“. To znamená, že bloky jsou označeny posledním přístupem, a když Sql Server vyžaduje další blok pro nový dotaz a paměťová mezipaměť je plná, je z paměti vyhozen nejméně nedávno použitý blok (nejstarší). (Ve většině případů - bloky skenování celých tabulek okamžitě stárnou, aby se zabránilo tomu, že úplné skenování tabulek překročí paměť a zablokuje server).

Děje se zde to, že datové bloky v paměti z prvního dotazu ještě nebyly vyhozeny z paměti, takže je lze použít pro váš druhý dotaz, což znamená, že se zabrání přístupu na disk a zlepší se výkon.

Takže to, na co se vaše otázka ve skutečnosti ptá, je "mohu získat datové bloky, které potřebuji, do paměti, aniž bych je četl do paměti (ve skutečnosti dělal dotaz)?". Odpověď zní ne, pokud nechcete ukládat do mezipaměti celé tabulky a mít je trvale v paměti, což vzhledem k době dotazu (a tedy velikosti dat), kterou popisujete, pravděpodobně není dobrý nápad.

Nejlepším řešením pro zlepšení výkonu je podívat se na plány provádění dotazů a zjistit, zda by změna indexů mohla přinést lepší výsledek. Zde jsou dvě hlavní oblasti, které mohou zlepšit výkon:

  • vytvoření indexu, kde by mohl dotaz použít jeden, aby se zabránilo neefektivním dotazům a úplnému prohledávání tabulek
  • přidání dalších sloupců do indexu, aby se zabránilo druhému čtení z disku. Máte například dotaz, který vrací sloupce A a B s klauzulí where na A a C a máte index na sloupci A. Váš dotaz použije index pro sloupec A, který vyžaduje jedno čtení z disku, ale pak vyžaduje druhý disk. hitem získáte sloupce B a C. Pokud by index obsahoval všechny sloupce A, B a C, druhému zásahu disku k získání dat se lze vyhnout.


  1. postgres array_agg ERROR:nelze shromažďovat pole různých rozměrů

  2. Upozornění:Navazování SSL připojení bez ověření identity serveru nedoporučujeme

  3. Oracle 10g přijímá 5místný rok v datu

  4. Počítejte řádky v MySQL spolu se skutečným obsahem řádků