Pagal numatytuosius nustatymus ši pataisa yra įtraukta į "„SQL Server“ 2014" 1 pakeitimų paketą ir "„SQL Server“ 2012" 3 pakeitimų paketą, todėl jums nereikia pridėti jokių sekimo vėliavėlių, kad įgalintumėte taisymą. Norėdami įjungti pataisą įdiegę vieną iš kaupiamųjų naujinimų skyriuje Skiriamoji geba, turite paleisti "Microsoft „SQL Server“" pridėdami pėdsakų vėliavėlę 1236 prie paleisties parametrų.
Požymiai
Tarkime, kad paleidžiate "Microsoft „SQL Server“ 2014", "„SQL Server“ 2012", "„SQL Server“ 2008" arba "„SQL Server“ R2" egzempliorių kompiuteryje, kuriame yra daug procesorių. Kai konkrečios duomenų bazės užrakinimų skaičius (ištekliaus tipas = DUOMENŲ BAZĖ) viršija tam tikrą ribą, kyla šių veikimo problemų:
Didesnės reikšmės pasitaiko LOCK_HASH suktukų skaičiui.
Pastaba: Daugiau informacijos rasite skyriuje "Daugiau informacijos", jei reikia informacijos apie tai, kaip stebėti šį suktuką.
Užklausos arba operacijos, kurioms reikia užrakinti duomenų bazę, užtrunka ilgai. Pavyzdžiui, galite pastebėti veikimo delsą:
- „SQL Server“ prisijungimai
- Susietojo serverio užklausos
- sp_reset_connection
- Operacijos
Pastaba Norėdami rasti užraktų sąrašą (ištekliaus tipas = DATABASE) tam tikroje duomenų bazėje, žr. skyrių "Daugiau informacijos". Ribinė vertė skiriasi atsižvelgiant į aplinką.
Sprendimas
Kaupiamojo naujinimo informacija
Problema pirmą kartą buvo išspręsta šiame kaupiamajame „SQL Server“ naujinime.
13 kaupiamasis naujinimas, skirtas „SQL Server“ 2008 R2 SP2 /en-us/help/2967540
17 kaupiamasis naujinimas, skirtas „SQL Server“ 2008 SP3 /en-us/help/2958696
1 kaupiamasis naujinimas, skirtas „SQL Server“ 2014 /en-us/help/2931693
9 kaupiamasis naujinimas, skirtas „SQL Server“ 2012 SP1 /en-us/help/2931078
Apie kaupiamuosius „SQL Server“ naujinimus
Kiekviename naujame „SQL Server“ kaupiamajame naujinime yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo įtrauktos į ankstesnį kaupiamąjį naujinimą. Peržiūrėkite naujausius "„SQL Server“" kaupiamuosius naujinimus:
- Naujausias kaupiamasis naujinimas, skirtas „SQL Server“ 2008 R2 SP2
- Naujausias kaupiamasis naujinimas, skirtas „SQL Server“ SP3
- Naujausias "„SQL Server“ 2014" kaupiamasis naujinimas
- Naujausias kaupiamasis naujinimas, skirtas „SQL Server“ 2012 SP1
Karštųjų pataisų informacija
Palaikomas karštąsias pataisas galima gauti iš "„Microsoft“". Tačiau ši karštoji pataisa skirta ištaisyti tik šiame straipsnyje aprašytą problemą. Taikykite šią karštąją pataisą tik toms sistemoms, kurios susiduria su šia problema.
Jei karštąją pataisą galima atsisiųsti, šio žinių bazės straipsnio viršuje yra skyrius "Karštosios pataisos atsisiuntimas". Jei šis skyrius nerodomas, pateikite užklausą "Microsoft" klientų aptarnavimo ir palaikymo tarnybai, kad gautumėte karštąją pataisą.
Pastaba: iškilus papildomų problemų arba prireikus trikčių diagnostikos, gali tekti sukurti atskirą aptarnavimo užklausą. Įprastos palaikymo išlaidos bus taikomos papildomiems palaikymo klausimams ir problemoms, kurios neatitinka šios konkrečios karštosios pataisos reikalavimų. Norėdami gauti visą "„Microsoft“" klientų aptarnavimo ir palaikymo tarnybos telefonų numerių sąrašą arba sukurti atskirą aptarnavimo užklausą, apsilankykite šioje "„Microsoft“" svetainėje:
/contactus/?ws=support Pastaba: Formoje "Karštųjų pataisų atsisiuntimas yra" rodomos kalbos, kurioms galima naudoti karštąją pataisą. Jei nematote savo kalbos, vadinasi, nėra tos kalbos karštųjų pataisų.
Būsena
„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.
Daugiau informacijos
Kai programa prisijungia prie „SQL Server“, ji pirmiausia sukuria duomenų bazės kontekstą. Pagal numatytuosius nustatymus ryšys bandys gauti DATABASE užraktą SH režimu. SH-DATABASE užraktas bus atlaisvintas, kai ryšys bus sustabdytas arba duomenų bazės kontekstas bus pakeistas per ryšio gyvavimo laiką. Jei turite daug aktyvių ryšių, naudojančių tą patį duomenų bazės kontekstą, galite turėti daug konkrečios duomenų bazės išteklių tipo DATABASE užrakinimų.
Kompiuteryje, kuriame yra 16 ar daugiau procesorių, tik lentelės objektai naudoja suskaidytą užrakto schemą. Tačiau duomenų bazės užraktai nėra suskaidyti. Todėl kuo didesnis duomenų bazės užrakinimų skaičius, tuo ilgiau užtrunka, kol „SQL Server“ užrakins duomenų bazę. Dauguma programų nepatiria jokių problemų, kurias sukelia šis dizainas. Bet kai tik skaičius viršija tam tikrą ribą, spynai gauti reikia papildomo darbo ir laiko. Nors kiekvieno papildomo užrakto kaina yra tik mikro sekundės, bendras laikas gali greitai padidėti, nes spynos maišos kaušai yra apsaugoti naudojant suktuką. Tai sukelia papildomus procesoriaus ciklus ir laukia, kol papildomi darbuotojai gaus užraktą.
Ši karštoji pataisa pristato duomenų bazės užrakto skaidymą, kai sekimo vėliavėlė T1236 įjungiama paleisties metu. Skaidymas: DATABASE užraktas užtikrina, kad užrakinimo sąrašo gylis būtų valdomas kiekviename vietiniame skaidinyje. Tai žymiai optimizuoja prieigos kelią, kuris naudojamas norint gauti DATABASE užraktą.
Norėdami stebėti LOCK_HASH suktuką, galite naudoti šią užklausą. SET NOCOUNT ON
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[sukimai] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE int @counter = 1
NORS @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'
NUSTATYTI @counter +=1
END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats Norėdami gauti daugiau informacijos apie "spinlock" ginčo diagnostiką ir sprendimą „SQL Server“, eikite į šį dokumentą:
"Spinlock" ginčo diagnozavimas ir sprendimas „SQL Server“ Pastaba Nors šis dokumentas parašytas "„SQL Server“ R2", informacija vis tiek taikoma "„SQL Server“ 2012".
Nuorodos
Daugiau informacijos apie sekimo vėliavėles "„SQL Server“ 2012" rasite šioje "TechNet" žiniatinklio svetainėje:
Informacija apie sekimo vėliavėles "„SQL Server“ 2012"
Norėdami gauti daugiau informacijos, kaip sužinoti vartotojo duomenų bazės užrakinimų skaičių kiekvienoje duomenų bazėje, naudokite šią užklausą šiai reikšmei apskaičiuoti:select Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' iš sys.dm_tran_locks
Grupuoti pagal Resource_database_id, resource_type, request_mode request_status