KB2926217 – POPRAVKA: Problemi sa performansama se javljaju kada se aktivnost zaključavanja baze podataka poveća tokom SQL Server

Primenjuje se na
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2012 Express SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard

Servisni paket 1 za SQL Server 2014 i servisni paket 3 za SQL Server 2012 podrazumevano uključuju ovu ispravku i ne morate da dodajete zastavice praćenja da biste omogućili ispravku. Da biste omogućili popravku nakon instaliranja jedne od kumulativnih ispravki u odeljku "Rezolucija", morate da pokrenete Microsoft SQL Server tako što ćete parametrima pokretanja dodati zastavicu praćenja 1236.

Simptomi

Pretpostavimo da pokrenete instancu sistema Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 ili SQL Server 2008 R2 na računaru koji sadrži veliki broj procesora. Kada broj zaključavanja (tip resursa = BAZA PODATAKA) za određenu bazu podataka premaši određenu graničnu vrednost, nailazite na sledeće probleme sa performansama:

  • Povišene vrednosti se javljaju LOCK_HASH broju spinlocka.

    Napomena: Pogledajte odeljak "Više informacija" za informacije o tome kako da nadgledate ovaj spinlock.

  • Dovršavanje upita ili operacija koje zahtevaju zaključavanje baze podataka dugo traju. Na primer, možda ćete primetiti sledeća kašnjenja performansi:

    • Prijavljivanja u SQL Server
    • Upiti na povezanom serveru
    • sp_reset_connection
    • Transakcije

Napomena: Da biste pronašli listu prevodnica (tip resursa = BAZA PODATAKA) u datoj bazi podataka, pogledajte odeljak "Više informacija". Granična vrednost se razlikuje u zavisnosti od okruženja.

Rešenje

Informacije o kumulativnom ažuriranju

Problem je prvi put rešen u sledećoj kumulativnoj ispravci sistema SQL Server.

Kumulativna ispravka 13 za SQL Server 2008 R2 SP2 /en-us/help/2967540

Kumulativna ispravka 17 za SQL Server 2008 SP3 /en-us/help/2958696

Kumulativna ispravka 1 za SQL Server 2014 /en-us/help/2931693

Kumulativna ispravka 9 za SQL Server 2012 SP1 /en-us/help/2931078

Osnovni podaci o kumulativnim ispravkama za SQL Server

Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:

      

Informacije o hitnim ispravkama
 Podržana hitna ispravka je dostupna od korporacije Microsoft. Međutim, ova hitna ispravka je namenjena samo za rešavanje problema koji je opisan u ovom članku. Primenite ovu hitnu ispravku samo na sisteme koji imaju ovaj određeni problem.

Ako je hitna ispravka dostupna za preuzimanje, na vrhu ovog članka u bazi znanja postoji odeljak "Dostupno je preuzimanje hitne ispravke". Ako se ovaj odeljak ne pojavi, prosledite zahtev Microsoft korisničkoj službi i podršci da biste dobili hitnu ispravku.

Napomena: Ako se pojave dodatni problemi ili ako je potrebno rešavanje problema, možda ćete morati da kreirate zaseban zahtev za uslugom. Uobičajeni troškovi podrške primenjivaće se na dodatna pitanja podrške i probleme koji ne ispunjavaju uslove za ovu određenu hitnu ispravku. Kompletnu listu brojeva telefona Microsoft korisničke službe i podrške ili da biste kreirali zaseban zahtev za uslugom, posetite sledeću Microsoft veb lokaciju:

/contactus/?ws=support Napomena: Obrazac "Dostupno je preuzimanje hitne ispravke" prikazuje jezike za koje je hitna ispravka dostupna. Ako ne vidite svoj jezik, to je zato što hitna ispravka nije dostupna za taj jezik.

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.

Više informacija

Kada aplikacija uspostavlja vezu sa sistemom SQL Server, ona najpre uspostavlja kontekst baze podataka. Podrazumevano, veza će pokušati da se zaključa DATABASE u SH režimu. Zaključavanje SH-DATABASE će biti oslobođeno kada se veza prekine ili se kontekst baze podataka promeni tokom trajanja veze. Ako imate mnogo aktivnih veza koje koriste isti kontekst baze podataka, možete imati mnogo zaključavanja tipa resursa DATABASE za tu određenu bazu podataka.

Na računaru koji ima 16 ili više CPU-a samo objekti tabele koriste šemu particionisanog zaključavanja. Međutim, zaključavanja baze podataka nisu podeljena na particije. Stoga, što je veći broj zaključavanja baze podataka, to je duže potrebno da SQL Server zaključa bazu podataka. Većina aplikacija nema problema koje izaziva ovaj dizajn. Ali čim broj pređe određeni prag, potreban je dodatni rad i vreme da bi se dobila brava. Iako je cena samo mikro sekunde za svaku dodatnu bravu, ukupno vreme se može brzo povećati jer su brave hash kontejneri zaštićeni korišćenjem spinlock-a. To uzrokuje dodatne cikluse procesora i čeka dodatne radnike da dobiju zaključavanje.

Ova hitna ispravka uvodi zaključavanje baze podataka na particionisanje kada se zastavica praćenja T1236 omogući pri pokretanju. Particionisanje brave baze podataka održava dubinu liste zaključavanja kojom se može upravljati na svakoj lokalnoj particiji. Ovo znatno optimizuje putanju pristupa koja se koristi za dobijanje zaključavanja baze podataka.

Da biste nadgledali LOCK_HASH spinlock, možete da koristite sledeći upit. POSTAVI NOCOUNT UKLJUČENO
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
DOK 100 @counter<
      BEGIN
            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
            WAITFOR DELAY '00:00:05'
            POSTAVI @counter +=1
      END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats Za više informacija o dijagnostikovanju i rešavanju Spinlock sukoba na SQL Server, idite na sledeći dokument:

Dijagnostikovanje i rešavanje Spinlock sukoba na SQL Server Napomena Iako je ovaj dokument napisan za SQL Server 2008 R2, informacije su i dalje primenljive na SQL Server 2012.

Reference

Više informacija o zastavicama praćenja u sistemu SQL Server 2012 potražite na sledećem veb sajtu TechNet:

Informacije o zastavicama praćenja u sistemu SQL Server 2012
Za više informacija o tome kako da pronađete broj zaključavanja baze podataka u pojedinačnoj bazi podataka, koristite sledeći upit za izračunavanje sledeće vrednosti:select Resource_database_id, resource_type, request_mode, request_status,
count (*) "LockCount" od sys.dm_tran_locks
Grupisanje po Resource_database_id, resource_type, request_mode, request_status