KB2926217 – RJEŠENJE: Problemi s performansama događaju se kada se aktivnost zaključavanja baze podataka poveća u SQL Server

Primjenjuje 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 Service Pack 1 za SQL Server 2014 i Service Pack 3 za SQL Server 2012 po zadanom sadrže taj popravak te ne morate dodavati zastavice praćenja da biste omogućili popravak. Da biste omogućili popravak nakon instalacije jednog od kumulativnih ažuriranja u odjeljku Razlučivost, morate pokrenuti Microsoft SQL Server dodavanjem zastavice praćenja 1236 u parametre pokretanja.

Simptomi

Pretpostavimo da instancu sustava Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 ili SQL Server 2008 R2 pokrećete na računalu koje sadrži mnogo procesora. Kada broj zaključavanja (vrsta resursa = BAZA PODATAKA) za određenu bazu podataka premaši određeni prag, naići ćete na sljedeće probleme s performansama:

  • Povišene vrijednosti javljaju se za LOCK_HASH spinlock broj.

    Napomena Pogledajte odjeljak "Više informacija" za informacije o tome kako nadzirati ovu bravu.

  • Upiti ili operacije koje zahtijevaju zaključavanje baze podataka dugo traju. Možda ćete, primjerice, primijetiti sljedeće kašnjenja u performansama:

    • Prijave na SQL Server
    • Upiti povezanog poslužitelja
    • sp_reset_connection
    • Transakcije

Napomena Da biste pronašli popis zaključavanja (vrsta resursa = BAZA podataka) za određenu bazu podataka, pročitajte odjeljak "Dodatne informacije". Vrijednost praga ovisi o okruženju.

Rješenje

Kumulativni podaci o ažuriranju

Problem je prvi put riješen u sljedećem kumulativnom ažuriranju sustava SQL Server.

Kumulativno ažuriranje 13 za SQL Server 2008 R2 SP2 /en-us/help/2967540

Kumulativno ažuriranje 17 za SQL Server 2008 SP3 /en-us/help/2958696

Kumulativno ažuriranje 1 za SQL Server 2014 /en-us/help/2931693

Kumulativno ažuriranje 9 za SQL Server 2012 SP1 /en-us/help/2931078

O kumulativnim ažuriranjima za SQL Server

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

      

Informacije o hitnom popravku
 Microsoft nudi podržani hitni popravak. No namjena ovog hitnog popravka jest samo za rješavanje problema opisanog u ovom članku. Primijenite ovaj hitni popravak samo na sustave koji imaju taj određeni problem.

Ako je hitni popravak dostupan za preuzimanje, pri vrhu članka iz baze znanja nalazi se odjeljak "Dostupno je preuzimanje hitnog popravka". Ako se ovaj odjeljak ne prikazuje, pošaljite zahtjev Microsoftovoj korisničkoj službi i podršci da nabavite hitni popravak.

Napomena: ako se pojave dodatni problemi ili je potrebno otklanjanje poteškoća, možda ćete morati stvoriti zaseban zahtjev za uslugu. Uobičajene cijene poziva službi za podršku primjenjuju se na dodatna pitanja i probleme koje nemaju veze s ovim hitnim popravkom. Cjelovit popis telefonskih brojeva Microsoftove službe za korisnike i podršku ili stvaranje zasebnog zahtjeva za uslugu potražite na sljedećem Microsoftovu web-mjestu:

/contactus/?ws=support Napomena Obrazac "Dostupno preuzimanje hitnog popravka" prikazuje jezike za koje je hitni popravak dostupan. Ako ne vidite jezik, hitni popravak nije dostupan za taj jezik.

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Dodatne informacije

Kada se aplikacija poveže sa sustavom SQL Server, ona prvo uspostavlja kontekst baze podataka. Prema zadanim postavkama veza će pokušati zaključati DATABASE u načinu rada SH. Zaključavanje baze podataka SH-DATABASE otključat će se kada se veza prekine ili se kontekst baze podataka promijeni tijekom trajanja veze. Ako imate mnogo aktivnih veza koje koriste isti kontekst baze podataka, za tu bazu podataka možete imati mnogo zaključavanja vrste resursa DATABASE.

Na računalu sa 16 ili više CPU-a samo objekti tablice koriste particioniranu shemu zaključavanja. No, zaključavanja baza podataka nisu particionirana. Prema tome, što je veći broj zaključavanja baze podataka, to je procesu SQL Server potrebno više vremena da dobije zaključavanje baze podataka. Većina aplikacija nema problema uzrokovanih ovim dizajnom. Ali čim broj prijeđe određeni prag, potreban je dodatni rad i vrijeme za dobivanje brave. Iako je cijena samo mikro sekundi za svaku dodatnu bravu, ukupno vrijeme se može brzo povećati jer su kante za raspršivanje brava zaštićene korištenjem spinlocka. To uzrokuje dodatne cikluse CPU-a i čeka da se dodatni radnici zaključaju.

Ovaj hitni popravak uvodi particioniranje zaključavanja baze podataka kada je pri pokretanju omogućena oznaka praćenja T1236. Particioniranje zaključavanja DATABASE održava dubinu popisa lokota kojom se može upravljati na svakoj lokalnoj particiji. Time se znatno optimizira put pristupa koji se koristi za zaključavanje baze podataka.

Da biste nadzirali LOCK_HASH Spinlock, možete koristiti sljedeći upit. POSTAVI NOCOUNT ON
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'
            SET @counter +=1
      END
ODABERITE * FROM #spinlock_stats REDOSLIJED PO [CaptureTime]
DROP TABLE #spinlock_stats Dodatne informacije o dijagnosticiranju i rješavanju sporova oko zaključavanja tipke Spinlock na SQL Server-u potražite u sljedećem dokumentu:

Dijagnosticiranje i rješavanje Spinlock sporova na SQL Server Napomena Iako je ovaj dokument napisan za SQL Server 2008 R2, informacije su i dalje primjenjive na SQL Server 2012.

Reference

Dodatne informacije o zastavicama praćenja u sustavu SQL Server 2012 potražite na sljedećem web-mjestu TechNet:

Informacije o zastavicama praćenja u sustavu SQL Server 2012
Dodatne informacije o broju zaključavanja baze podataka u korisniku po bazi podataka izračunajte pomoću sljedećeg upita:select Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' from sys.dm_tran_locks
Grupiraj prema Resource_database_id, resource_type, request_mode, request_status