Alapértelmezés szerint az SQL Server 2014-hez készült Service Pack 1 és az SQL Server 2012-höz készült Service Pack 3 tartalmazza ezt a javítást, és a javítás engedélyezéséhez nem kell nyomkövetési jelzőt hozzáadnia. Ha engedélyezni szeretné a javítást a Megoldás szakaszban szereplő összegző frissítések egyikének telepítése után, el kell indítania a Microsoft SQL Server programot úgy, hogy hozzáadja az 1236-os nyomkövetési jelzőt az indítási paraméterekhez.
Tünetek
Feltételezzük, hogy a Microsoft SQL Server 2014, az SQL Server 2012, az SQL Server 2008 vagy az SQL Server 2008 R2 egy példányát egy olyan számítógépen futtatja, amely sok processzort tartalmaz. Ha egy adott adatbázis zárolásainak száma (erőforrástípus = DATABASE) meghalad egy bizonyos küszöbértéket, a következő teljesítménybeli problémákat tapasztalja:
Emelkedett értékek fordulnak elő LOCK_HASH spinlockok száma esetén.
Megjegyzés: A spinlock figyelésével kapcsolatos információkért lásd a "További információ" című részt.
Az adatbázis zárolását igénylő lekérdezések vagy műveletek végrehajtása hosszú időt vesz igénybe. Például a következő teljesítménybeli késéseket tapasztalhatja:
- SQL Server-bejelentkezések
- Csatolt kiszolgálói lekérdezések
- sp_reset_connection
- Tranzakciók
Megjegyzés: Egy adott adatbázis zárolásainak listáját (erőforrástípus = ADATBÁZIS) a "További információ" részben találja. A küszöbérték környezetenként változik.
Megoldás
Összegző frissítéssel kapcsolatos információk
A hibát először az SQL Server következő összegző frissítésében javítottuk.
13-as összegző frissítés a SQL Server 2008 R2 SP2-höz /en-us/help/2967540
17-es összegző frissítés a SQL Server 2008 SP3 verzióhoz /en-us/help/2958696
1. összegző frissítés a SQL Server 2014-hez /en-us/help/2931693
9-es összegző frissítés a SQL Server 2012 SP1 rendszerhez /en-us/help/2931078
Az SQL Server összegző frissítéseinek ismertetése
Az SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és minden biztonsági javítást, amely az előző kumulatív frissítésben szerepelt. Tekintse meg az SQL Server legújabb összegző frissítéseit:
- Az SQL Server 2008 R2 SP2 legújabb összegző frissítése
- Az SQL Server 2008 SP3 legújabb összegző frissítése
- Az SQL Server 2014 legújabb összegző frissítése
- Az SQL Server 2012 SP1 legújabb összegző frissítése
Gyorsjavítással kapcsolatos információk
A Microsoft beszerezhet egy támogatott gyorsjavítást. A gyorsjavítás azonban csak a cikkben ismertetett problémát hivatott elhárítani. Csak olyan rendszereken alkalmazza ezt a gyorsjavítást, amelyeket tapasztal ez a probléma.
Ha a gyorsjavítás letölthető, a jelen Tudásbázis-cikk tetején található egy "Gyorsjavítás letölthető fájl" szakasz. Ha ez a szakasz nem jelenik meg, küldjön be egy kérelmet a Microsoft ügyfélszolgálatának és támogatási szolgálatának a gyorsjavítás beszerzése érdekében.
Megjegyzés: Ha további problémák merülnek fel, vagy hibaelhárításra van szükség, előfordulhat, hogy külön szolgáltatáskérést kell létrehoznia. A szokásos támogatási költségek a további támogatási kérdések és az adott gyorsjavításra nem alkalmas problémák esetén merülnek fel. A Microsoft ügyfélszolgálati és támogatási telefonszámainak teljes listájáért, illetve külön szolgáltatáskérés létrehozásához látogasson el a Microsoft következő webhelyére:
/contactus/?ws=support Megjegyzés: A "Gyorsjavítás letöltése elérhető" űrlapon láthatók azok a nyelvek, amelyekhez elérhető a gyorsjavítás. Ha nem látja a kívánt nyelvet, annak az az oka, hogy nem érhető el gyorsjavítás az adott nyelvhez.
Állapot
A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.
További információ
Amikor egy alkalmazás kapcsolatot létesít az SQL Server-rel, először adatbázis-környezetet hoz létre. Alapértelmezés szerint a kapcsolat DATABASE zárolást próbál megszerezni SH módban. Az SH-DATABASE zárolása feloldódik, ha a kapcsolat megszakad, vagy az adatbázis-környezet megváltozik a kapcsolat élettartama alatt. Ha sok aktív kapcsolata van, amelyek ugyanazt az adatbázis-környezetet használják, több DATABASE erőforrás típusú zárolást is létrehozhat az adott adatbázishoz.
A 16 vagy több processzorral rendelkező számítógépeken csak a táblaobjektumok használnak particionált zárolási sémát. Az adatbáziszárolások azonban nincsenek particionálva. Ezért minél nagyobb számú adatbáziszárolás, annál tovább tart az SQL Server az adatbázis zárolásáig. A legtöbb alkalmazás nem tapasztal semmilyen problémát, amelyet ez a kialakítás okozna. De amint a szám meghalad egy bizonyos küszöböt, további munkára és időre van szükség a zár megszerzéséhez. Bár az egyes további zárolások költsége csak mikro másodperc, a teljes idő gyorsan megnőhet, mivel a zárolási kivonatgyűjtőket spinlock védi. Ez további CPU-ciklusokat okoz, és arra vár, amíg további dolgozók hozzájutnak a zároláshoz.
Ez a gyorsjavítás ADATBÁZIS-zárolási particionálást vezet be, ha a T1236 nyomkövetési jelző engedélyezve van az indításkor. A DATABASE zárolás particionálásával a zárolási lista mélysége kezelhető marad az egyes helyi partíciókon. Ez jelentősen optimalizálja az ADATBÁZIS zárolásának eléréséhez használt elérési útvonalat.
A LOCK_HASH spinlock figyeléséhez használhatja az alábbi lekérdezést. NOCOUNT BEÁLLÍTÁSA BEKAPCSOLVA
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[pörgetés] bigint,[spins_per_collision] valós,[sleep_time] bigint,[visszalépések] int)
DECLARE @counter int = 1
MÍG @counter< 100
BEGIN
INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
WAITFOR DELAY '00:00:05'
SET @counter +=1
END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
TÁBLÁZAT LEDOBÁSA #spinlock_stats A SQL Server spinlock versengésének diagnosztizálásáról és megoldásáról a következő dokumentumban talál további információt:
A spinlock versengésének diagnosztizálása és megoldása az SQL Server alkalmazásban Megjegyzés Bár ez a dokumentum az SQL Server 2008 R2 rendszerhez készült, az információk továbbra is érvényesek az SQL Server 2012-re.
Hivatkozások
Az SQL Server 2012 nyomkövetési jelzőiről a TechNet következő webhelyén talál további információt:
Nyomkövetési jelzők az SQL Server 2012-ben
A felhasználónkénti adatbáziszárolások számának meghatározásáról a következő lekérdezéssel számíthatja ki ezt az értéket:select Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' sys.dm_tran_locks-ból
Csoportosítás Resource_database_id, resource_type, request_mode request_status szerint