Keresés és megakadályozzák a holtpont zárak
Holtpont - ez egy zárt lánc blokk, amelyben két vagy több szál blokkolják egymást, így hogy egyikük nem tudja folytatni végrehajtását. Amikor az áramlás nyomkövető holtpont SQL Server észleli zárt blokk lánc, az egyik résztvevő a holtpont, úgy dönt, mint egy áldozat, törli az aktuális csomag spid, és tekercsben vissza a tranzakciós hogy egy másik spid tovább. Az áldozat kap egy holtpont hibaüzenetet 1205:
Tranzakció (Process ID 52) volt holtponton lezárás források egy másik folyamat, és választották a patthelyzet áldozat. Futtassa újra a tranzakciót.
Holtpont - egy speciális típusú blokkoló forgatókönyvet, de a zárolás és patthelyzet blokkolás - nem ugyanaz a dolog. Néha az emberek beszélnek a holtpont, de valóban látni blokkoló.
Néhány kivételtől eltekintve, a holtpontok fordul elő természetes melléktermékei blokkoló hatása, és nem tekinthető a hibákat az SQL Server. Egy tipikus megoldás, hogy megakadályozzák holtpont az a beállítás, a tárolt eljárások / alkalmazás kódját, vagy a séma változás / indexelési.
Olvassa el az információkat kapunk, ha a zászló -T1222. Ez az információ lesz jelen az SQL Server error log után történik holtpont.
Ez valahogy így néz ki:
„Bontás” kapott információkat annak érdekében, hogy jobban megértsék a blokkoló forgatókönyv.
Információ a patthelyzet képviseli szakaszai „folyamat-lista” (a folyamatok listáját), „erőforrás-lista” (a források listája). „Process” - a spid vagy a munkafolyamat, amely részt vesz a zsákutcából. Minden folyamatot egy azonosító van rendelve, mint ez a „processdceda8”. Resource - erőforrás, amely nem áll rendelkezésre (általában blokkolja) és a kibocsátás, amely arra vár, az egyik résztvevő. Szeretem használni a formátumot mutatjuk be annak érdekében, hogy információt gyűjtsenek a zsákutcából. Ha azt szeretnénk, akkor ezt a lépést, de én soha nem, hogy; ez segít megérteni a helyzetet világosabban holtpont. Én sárgával az adatokat az eredmény beállított 1222 annak érdekében, hogy vissza tudja állítani magának a következő kép.
Lekérdezések futtatásához részt a holtpont, a Database Tuning Advisor. Helyezze el a szöveget a lekérdezés Management Studio lekérdezés ablakban válasszuk ki az adatbázist a kérelem kapcsán meg kell tenni, kattintson a jobb gombbal a szöveg a lekérdezés, és válassza ki a „elemzése Query DTA”. Ne hagyja ki ezt a lépést; több mint a fele vezető problémák holtpontra, egyszerűen megoldható hozzáadásával megfelelő index egyik lekérdezés gyorsabb és kevésbé erőforrás blokk. Ha DTA javasolja, hogy építsenek indexek, hozza létre őket, és nézd meg a holtpont fennáll.
Győződjön meg arról, hogy a tranzakciókat a lehető legrövidebb belül az üzleti - szabályokat. Kerülje implicit tranzakció, mivel a tranzakció menedzsment modellt hoz létre a szükségtelenül hosszú tranzakciókat.
Kivánom egyéb funkciók hatékonyságának javítása a lekérdezést. részt vesz egy holtpont, akár egy változtatási kérelem vagy indexálás. A kérés, hogy a minimális számú blokkot a források kisebb valószínűséggel vezetnek a holtpont. Ha a lekérdezés terv jelenleg asztal vizsgálat, index scan, tágas tördelő vagy szétválogatása nagy mennyiségű adatot, szükséges, hogy a teljesítmény javítása.
Ha az egyik vagy mindkét spid végre többutasításos tranzakciót. valószínű, akkor létre kell hoznia egy sort profiler, hogy információt kapjon a patthelyzet, és azonosítsák a teljes halmazát okozó előfordulása patthelyzet. Sajnos -T1204 és -T1222 mutatják, csak két kérelmet, amelyeket „eldugult ciklus”, de lehetséges, hogy az egyik zár szabtak korábbi kéréseket ugyanazon ügylet.
Az alábbiakban néhány általános irányelv, amelyek alkalmazhatók olyan patthelyzet. Ha a probléma továbbra is fennáll ezen ajánlások követése után, akkor kell, hogy belevetik magukat a kérdés egy kicsit mélyebbre, és megoldást találni egy egyedi script. Itt van egy lista a tipikus módszerek, ahonnan ki lehet választani a legmegfelelőbb módszer foglalkozik holtpontok:
Hozzáférés a tárgyak fut ugyanabban a sorrendben. Tekintsük a következő két csomag.
1. Kezdjük Tranzakciós
4. transzferrekordot
Ez a két csomag, nagy valószínűséggel okozhat holtpont. Ha mindkettő fog végezni a 3. lépést, amelyek mindegyike lehet blokkolja más, mert mindkettő utal olyan erőforrás, amely egy másik kapcsolat blokkolt a 2. lépésben.
Ha mindkét tagja holtpont azonos index, akkor létre kell hozni egy indexet, amely biztosíthatja egy kiegészítő pálya az egyik spid. Például, hozzátéve, a bevonat egy fürtözött index SELECT, részt vesz a holtpont, lehetőség van, hogy megakadályozza a probléma (azzal a megkötéssel, hogy egyik a kulcsok a bevonat index nem változott egy másik résztvevője által istálló zár).
Másrészt, ha spid válnak fél holtpontra annak a ténynek köszönhető, hogy az alternatív útvonal (indexek) használtak volna elérni a kívánt adatsort, vagy az oldal, úgy a eltávolítása egyik mutatója, illetve a használata index kártyákat a kérelmeket a közösen használt egy utat. Legyen óvatos, az eredmény ez a megközelítés lehet a gyenge teljesítmény.
Holtpontok, speciális típusú blokk, ahol két spid blokk egymást. Néha a legjobb módja, hogy megakadályozzák holtpont kényszerül elzáródása egy korábbi időpontjában az egyik tranzakciót. Például ha blokk az előre spid A egy tranzakció Szoba spid, majd az elejétől a tranzakció spid És nem lehet tudni, hogy a forrásokat, hogy vessen véget a lockout kiszabott spid B. Ez azt jelenti, hogy szándékosan beavatott blokkoló? Igen, mert az erőforrások vannak zárva, a helyzet nem áll be a holtpont, és ebben az értelemben, egyszerű tiltás - jobb megoldás zsákutcából blokkoló. Továbbá lehetőség van arra, hogy továbbra is a blokkoló eszközt és kéri HOLDLOCK UPDLOCK lezárni a tranzakciót spid B.
Ha szükséges, ami, mint áldozatot a felbontás a patthelyzet zár eljárást választjuk, a magasabb prioritású feldolgozni c alacsonyabb prioritású beállítás hasznosítani SET DEADLOCK_PRIORITY LOW. Spid, amely használja ezt a beállítást mindig ki van jelölve, mint az áldozat esetén patthelyzet, amelyre ő lesz.
Kerüljük a fürtözött indexek oszlopok, amelyek gyakran változott. Változások alkatrészek kulcs klaszter index oszlopai szab ki zár a klaszter index (mozog a vonal), ami blokkolja az összes nem fürtözött index (mert a vonal a lapot, nem fürtözött index a referencia index értéke kulcsfontosságú a klaszter).
Bizonyos esetekben hasznos lehet használni a NOLOCK célzást, ha az egyik lekérdezés a SELECT utasításban. Bár ez a módja a legvonzóbb, mert Ez egy gyors és egyszerű megoldás sok esetben zsákutcába blokkoló, ezt a megközelítést óvatosan, mert ez hozza a problémákat szintű tranzakció izolációs olvasható le nem kötött (lekérdezés visszatérhet következetlen adatnézetet). Ha nem ismeri a problémáit ezzel izolációs szint, lásd „SET ÜGYLETI izolációs szint” az SQL Books Online, vagy forduljon az illetékes szakemberek használata előtt ezt a lehetőséget.