Cache és újrahasznosítása végrehajtási terv
Az SQL Server, van egy medence a memória az adatok tárolására és teljesítő pufferek terveket. A százalékos medence mérete kiosztott kiviteli tervek és adatok pufferek, amely dinamikusan változik attól függően, hogy a rendszer állapotáról. Része a memória pool tárolására használt kiviteli tervek nevezik cache eljárásokat.
Az SQL Server kiviteli tervek állnak a következő összetevőkből.
A terv megvalósításának test reentráns adatstruktúra csak olvasható, amely használatra szánt bármely felhasználók száma. Ezt hívják lekérdezés tervét. A lekérdezés terv nem tartalmaz a felhasználó kontextusában. A memória nem lehet több, mint egy vagy két példányban a lekérdezési terv: az egyik - az összes soros kivégzések és a másik - az összes párhuzamos kivégzések. Egy párhuzamos másolat szolgál minden párhuzamos végrehajtás, függetlenül a párhuzamosságát.
Minden egyes felhasználó, hogy az éppen feldolgozás egy lekérdezés, van egy adatszerkezet, amely tartalmaz vonatkozó adatokat a jelen kiviteli alaknál, mint a beállításokat. Ez az adat struktúra nevezik végrehajtási környezetet. végrehajtása keretében adatstruktúrájára újrahasználható. Ha a felhasználó lefuttatja a lekérdezést, és az egyik struktúrák nem használják, akkor újra inicializálni keretében az új felhasználót.
Az SQL Server, SQL utasításként relációs motor első végignézi az eljárás cache, és ellenőrizzük, hogy a terv végrehajtása az azonos utasítást. SQL Server újrahasznosítani esetleges végrehajtási tervet, amely csökkenti a költségeit a újrafordítás. Ha nem egyezik az a meglévő terv, az SQL Server generál egy új tervet erre a lekérdezésre.
SQL Server ugyanakkor hatékony algoritmust találni a meglévő kiviteli tervek bármely SQL utasítást. A legtöbb rendszerben a fordított források keresését a kész terv mindig kevesebb erőforrás töltött fordítanod egyes SQL utasítást.
SQL megfelelő keresési algoritmusok Egy használaton kívüli végrehajtási terv a cache előírják, hogy minden objektum referenciák teljes. Például, az első a következő SELECT utasítások betartását a meglévő terv megtalálható, és a második - lesz:
Végrehajtási tervek továbbra is az eljárás cache amíg azok tárolására elegendő memória. Ha nincs elegendő memória a Database Engine meghatározni a terv végrehajtásának, amelyet el kell távolítani az eljárás cache, olyan módszert használ költség alapján. A Database Engine megnöveli elfogadásra költség-alapú megoldások és csökkenti a jelenlegi változó értékét az egyes kivitelezési terv, hogy vezéreljék a következő tényezők.
Ha egy felhasználói folyamat növeli a cache a kivitelezési terv, ez határozza meg az aktuális érték egyenlő az összeállítása költségeinek az eredeti kérelem. Az eseti kiviteli tervek a felhasználói folyamat beállítja az aktuális költsége nulla. Ezt követően, amikor egy felhasználó folyamat utal, hogy a terv végrehajtásának, hogy visszaállítja az aktuális értéket, ami megegyezik az eredeti ára a válogatás. Az eseti kiviteli tervek a felhasználói folyamat növeli az értékét az aktuális értéket. Minden terv, a legnagyobb áram értéke megegyezik az eredeti ára a válogatás.
Ha nincs elegendő memória, a Database Engine reagál rá eltávolításával végrehajtási eljárás cache terveket. Annak megállapítására, milyen tervei szerint el kell távolítani Database Engine komponens többször ellenőrzi az állapotát az egyes végrehajtási terv és eltávolítja azokat, amelyek az aktuális érték nulla. A végrehajtási terv nulla áram értéke nem törlődnek automatikusan esetén memória hiánya; akkor el kell távolítani csak ellenőrzés után komponens Database Engine, ha az aktuális érték nulla. Amikor ellenőrzi a kivitelezési terv a Database Engine hozza az aktuális érték nullára csökkenti, ha a kérelem jelenleg nem használja a tervet.
A Database Engine ismételten megvizsgálja a végrehajtási terveket, amíg ő törli ahhoz, hogy megfeleljen a memória igénye. Kevés memória költsége a terv végrehajtása növelhető és csökkenthető többször. Ha nincs memória elhalványult, Database Engine összetevő megszűnik, hogy csökkentsék a jelenlegi költsége nem használt kiviteli tervek és az összes kiviteli tervek maradnak az eljárás cache, akkor is, ha azok értéke nulla.
A Database Engine a forrás monitor és a felhasználó szálak szabad szükséges memória cache eljárások hiánya esetén a memória. forrás monitor és a felhasználó menet párhuzamosan futtatni, hogy ellenőrizze a terveket, amelyek csökkentik a jelenlegi költség minden fel nem használt kiviteli terv. forrás monitor eltávolítja végrehajtási terveket az eljárásból cache, ha van egy globális hiány memóriát. Ő szabadít memóriát érvényesíteni a politikák rendszer memória, memória folyamatok, a memória, az erőforrás-medence és a maximális mérete a cache.
A maximális mérete az összes cache függvénye a puffertárméret, és nem haladhatja meg a maximális szerver memória. További információ arról, hogyan kell beállítani a maximális szerver memória, lásd. Az A paraméter leírását max szerver memória szakaszt sp_configure (-SQL).
Felhasználói szálak eltávolítása végrehajtási terveket az eljárásból cache, ha van egy kevés a memória egyetlen cache. Ezek betartásának biztosítása politikák maximális mérete a cache bejegyzéseket, és a legnagyobb egyszeri cache.
Az alábbi példák azt mutatják, amit a végrehajtási tervek eltávolítják az eljárás cache.
A végrehajtási tervet gyakran használják, így annak értéke nem feltételezi, hogy a nulla értéket. Ez a terv marad az eljárás cache és nem kell eltávolítani, amíg van elegendő mennyiségű memóriát, és annak aktuális értéke nem nulla.
Ad hoc végrehajtási tervet egészül ki, és régebben a memória hiánya. Mivel az ad hoc lekérdezési tervek kezdeti értéke az aktuális értéket, amely nulla, amikor ellenőrzi a kivitelezési terv a Database Engine észlelt nulla áram értékét, valamint a terv eltávolítjuk az eljárás cache. Ad hoc végrehajtási tervet nulla aktuális érték marad az eljárás cache, ha elegendő mennyiségű memóriát.
A következő parancs DBCC FREEPROCCACHE (-SQL) manuálisan eltávolítani egy végrehajtási tervet, vagy az összes terveket.
Néhány változás az adatbázis vezethet, hogy a végrehajtási tervet a változás az állapota hatástalanná válik, vagy rossz. SQL Server felismeri a változásokat, amelyek lehet, hogy egy terv végrehajtása érvénytelen, és megjelöli a terv rossz. A következő alkalommal a lekérdezés tervet kell fordítanod. A terv érvényteleníteni lehet az alábbi esetekben.
Megváltozott tábla vagy nézet, amelyre hivatkoznak a lekérdezés (ALTER TABLE és ALTER nézet).
Módosításához az index által használt végrehajtási terv.
Frissített statisztikák által használt végrehajtási tervet, kialakítva akár kifejezetten az UPDATE STATISZTIKA, vagy automatikusan.
Eltávolították az indexek által használt végrehajtási terv.
Nyilvánvaló okozta eljárás sp_recompile.
A gyakori változása gombok (beszúrni vagy törölni utasítást felhasználó, pelenkázó által hivatkozott lekérdezés).
Táblázatokból kiváltó: jelentősen nőtt a sorok számát a táblázatban egészül ki, és hagyni.
Végre egy tárolt eljárás paraméter újrafordítása.
A legtöbb recompilations van szükség akár megfelelő működésének biztosítása érdekében az utasításokat, vagy potenciálisan végrehajtásának felgyorsítása a terv.
Újrafordítás utasításokat szinten ad a teljesítmény előnyeit, hiszen a legtöbb esetben recompilation kis utasítások számát és a kapcsolódó veszteség vesz kevesebb erőforrással a CPU időt és költséget a zárat. Ezek a veszteségek így elkerülhetők a többi csomag utasításokat, amelyek nem igényelnek újrafordítás.
SQL Trace Esemény: StmtRecompile információkat jelenít meg az utasítás szintű recompilations. Ezt fel lehet használni arra, hogy nyomon hibakeresés recompilations. Esemény SP: Fordítsuk csak akkor jön létre a tárolt eljárások és triggerek, és az SQL: StmtRecompile - A tárolt eljárások, triggerek, speciális csomagokat, csomagok végigmenni sp_executesql. előkészített lekérdezések és a dinamikus SQL.
EventSubClass oszlopot SP események: Fordítsuk újra és SQL: StmtRecompile kódot tartalmaz egy egész jelezve az oka a újrafordítás. Az alábbi táblázat felsorolja azokat az értékeket minden egyes ilyen kódokat.