Teljesítményhangolás az eredményhalmaz gyorsítótárazásával

Ha az eredményhalmaz gyorsítótárazása engedélyezve van, a dedikált SQL-készlet automatikusan gyorsítótárazza a lekérdezési eredményeket a felhasználói adatbázisban ismétlődő használatra. Ez lehetővé teszi, hogy a későbbi lekérdezésvégrehajtások közvetlenül a tárolt gyorsítótárból kapják meg az eredményeket, így nincs szükség újraszámításra. Az eredményhalmaz gyorsítótárazása javítja a lekérdezési teljesítményt, és csökkenti a számítási erőforrások használatát. Emellett a gyorsítótárazott eredménykészletet használó lekérdezések nem használnak egyidejűségi tárolóhelyeket, így nem számítanak bele a meglévő egyidejűségi korlátokba. A biztonság érdekében a felhasználók csak akkor férhetnek hozzá a gyorsítótárazott eredményekhez, ha ugyanazokkal az adathozzáférési engedélyekkel rendelkeznek, mint a gyorsítótárazott eredményeket létrehozó felhasználók. Az eredményhalmaz gyorsítótárazása alapértelmezésből kikapcsolva van az adatbázis és a munkamenet szintjén.

Megjegyzés:

Az eredményhalmaz gyorsítótárazását nem ajánlott együtt használni a DECRYPTBYKEY-vel. Ha ezt a titkosítási függvényt kell használni, győződjön meg arról, hogy az eredménykészlet gyorsítótárazása le van tiltva ( munkamenet- vagy adatbázisszinten) a végrehajtás időpontjában.

Fő parancsok

Kapcsolja be/ki egy felhasználói adatbázis eredménykészletének gyorsítótárazását

Egy munkamenet eredménykészletének gyorsítótárazásának be-/kikapcsolása

A gyorsítótárazott eredményhalmaz méretének ellenőrzése

A gyorsítótár tisztítása

Mi nincs a gyorsítótárban?

Ha az eredményhalmaz gyorsítótárazása be van kapcsolva egy adatbázis esetében, a rendszer az összes lekérdezéshez gyorsítótárazza az eredményeket, amíg meg nem telik a gyorsítótár, kivéve az alábbi lekérdezéseket:

  • Olyan beépített függvényekkel vagy futtatókörnyezeti kifejezésekkel rendelkező lekérdezések, amelyek nem determinisztikusak akkor is, ha az alaptáblák adataiban vagy lekérdezéseiben nincs változás. Például: DateTime.Now(), GetDate().
  • Felhasználó által definiált függvényeket használó lekérdezések
  • Táblákat használó lekérdezések sorszintű biztonsággal
  • 64 KB-nál nagyobb sorméretű adatokat visszaadó lekérdezések
  • Nagyméretű lekérdezések (>10 GB)

Megjegyzés:

  • Egyes nem determinisztikus függvények és futtatókörnyezeti kifejezések determinisztikusak lehetnek ugyanazon adatok ismétlődő lekérdezéseihez. Például ROW_NUMBER().
  • Használja az ORDER BY klauzulát a lekérdezésben, ha a lekérdezés eredményhalmazában lévő sorok sorrendje fontos az alkalmazás logikájához.
  • Ha az ORDER BY oszlopokban lévő adatok nem egyediek, az ORDER BY oszlopokban azonos értékeket tartalmazó sorokhoz nincs garantált sorsorrend, függetlenül attól, hogy az eredményhalmaz gyorsítótárazása engedélyezve vagy letiltva van-e.

Fontos

Az eredményhalmaz-gyorsítótár létrehozására és a gyorsítótárból való adatok lekérésére szolgáló műveletek egy dedikált SQL-készletpéldány vezérlőcsomópontján történnek. Ha az eredményhalmaz gyorsítótárazása be van kapcsolva, a nagy eredményhalmazt visszaadó lekérdezések (például >1 GB) fokozott korlátozást okozhatnak a vezérlőcsomóponton, és lelassíthatják a példány általános lekérdezési válaszidejét. Ezeket a lekérdezéseket gyakran használják az adatfeltárás vagy az ETL-műveletek során. A vezérlőcsomópont terhelésének elkerülése és a teljesítményproblémák elkerülése érdekében a felhasználóknak ki kell kapcsolniuk az eredményhalmaz gyorsítótárazását az adatbázison, mielőtt futtatják az ilyen típusú lekérdezéseket.

Futtassa ezt a lekérdezést, hogy meghatározza az eredményhalmaz gyorsítótárazási műveleteinek időtartamát egy adott lekérdezés esetében:

SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id  = <'request_id'>;

Íme egy példakimenet egy olyan lekérdezéshez, amelynél az eredményhalmaz gyorsítótárazása ki van kapcsolva.

Képernyőkép a lekérdezés eredményeiről, beleértve a hely típusát és a parancsot.

Íme egy példakimenet egy olyan lekérdezéshez, amely engedélyezve van az eredménykészlet gyorsítótárazásával.

Képernyőkép a lekérdezési eredményekről a kijelölt * paranccsal a [D W ResultCache D b] dot d b o lekérdezéshez.

Gyorsítótárazott eredmények használata esetén

A gyorsítótárazott eredményhalmazt a rendszer újra felhasználja egy lekérdezéshez, ha az alábbi követelmények mindegyike teljesül:

  • A lekérdezést futtató felhasználó hozzáféréssel rendelkezik a lekérdezésben hivatkozott összes táblához.
  • Pontos egyezés van az új lekérdezés és az eredményhalmaz gyorsítótárát létrehozó előző lekérdezés között.
  • A gyorsítótárazott eredményhalmazt létrehozó táblákban nincs adat- vagy sémamódosítás.

Futtassa ezt a parancsot annak ellenőrzéséhez, hogy egy lekérdezést végrehajtottak-e az eredménygyorsítótár találatával vagy annak hiányával. A result_cache_hit oszlop 1-et ad vissza a gyorsítótár-találathoz, 0-t a gyorsítótár-kihagyáshoz, és negatív értékeket, amiért az eredményhalmaz gyorsítótárazását nem használták. Ellenőrizd a sys.dm_pdw_exec_requests a részletekért.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

Gyorsítótárazott eredmények kezelése

Az eredményhalmaz gyorsítótárának maximális mérete adatbázisonként 1 TB. A gyorsítótárazott eredmények automatikusan érvénytelenítve lesznek a mögöttes lekérdezési adatok változásakor.

A gyorsítótár kiürítését a dedikált SQL-készlet kezeli automatikusan az ütemezés szerint:

  • 48 óránként, ha az eredményhalmazt nem használták vagy érvénytelenítették.
  • Amikor az eredményhalmaz gyorsítótára megközelíti a maximális méretet.

A felhasználók manuálisan kiüríthetik a teljes eredményhalmaz gyorsítótárát az alábbi lehetőségek egyikével:

  • Kapcsoljuk ki az eredményhalmaz gyorsítótárazási funkcióját az adatbázisban.
  • A DBCC DROPRESULTSETCACHE futtatása az adatbázishoz való csatlakozáskor

Az adatbázis szüneteltetése nem üríti ki a gyorsítótárazott eredményhalmazt.

Következő lépések

További fejlesztési tippekért tekintse meg a fejlesztés áttekintését.