FIX: Verificarsi problemi di prestazioni quando aumenta l'attività di blocco del database in SQL Server

IMPORTANTE: il presente articolo è stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l’obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre è perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilità per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualità della traduzione.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 2926217
Avviso
Per impostazione predefinita, il Service Pack 1 per SQL Server 2014 e Service Pack 3 per SQL Server 2012 include questa correzione e non è necessario aggiungere dei flag di traccia per attivare la correzione. Per attivare la correzione dopo avere installato uno degli aggiornamenti cumulativi nella sezione Risoluzione, è necessario avviare Microsoft SQL Server aggiungendo il flag di traccia 1236 a parametri di avvio.
Sintomi
Si supponga che si esegue un'istanza di Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 o SQL Server 2008 R2 in un computer che contiene molti processori. Quando il numero di blocchi (tipo di risorsa = DATABASE) per un database specifico supera una determinata soglia, si verificano problemi di prestazioni seguenti:
  • Valori elevati si verificano per il conteggio di spinlock LOCK_HASH .

    Nota Vedere la sezione "Informazioni" per informazioni su come monitorare questo spinlock.
  • Le operazioni che richiedono blocchi di database o query richiedere molto tempo per essere completata. Ad esempio, si noterà che i ritardi di prestazioni seguenti:
    • Account di accesso di SQL Server
    • Query su server collegati
    • sp_reset_connection
    • Transazioni
Nota Per individuare l'elenco dei blocchi (tipo di risorsa = DATABASE) in un determinato database, vedere la sezione "Informazioni". Il valore di soglia varia dall'ambiente.
Risoluzione

Informazioni sull'aggiornamento cumulativo

Il problema è stato risolto prima nell'aggiornamento cumulativo seguente di SQL Server.

Aggiornamento cumulativo 13 per SQL Server 2008 R2 SP2

Aggiornamento cumulativo 17 per SP3 di SQL Server 2008

Aggiornamento cumulativo 1 per SQL Server 2014

Aggiornamento cumulativo 9 per SQL Server 2012 SP1

Informazioni sugli aggiornamenti cumulativi per SQL Server

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutte le correzioni di protezione che sono stati incluse nell'aggiornamento cumulativo precedente. Estrarre gli ultimi aggiornamenti cumulativi per SQL Server:

Informazioni sull'hotfix

Un hotfix supportato è disponibile da Microsoft. Tuttavia, questo hotfix è destinato esclusivamente alla correzione del problema descritto in questo articolo. Applicare questo hotfix solo ai sistemi in cui si verificano questo problema specifico.

Se l'hotfix è disponibile per il download, vi è una sezione "Hotfix Download disponibile" nella parte superiore di questo articolo della Knowledge Base. Se non viene visualizzato in questa sezione, inviare una richiesta al servizio clienti Microsoft e supporto tecnico per ottenere l'hotfix.

Nota Se si verificano ulteriori problemi o se qualsiasi risoluzione dei problemi è necessario, è necessario creare una richiesta di assistenza separata. I costi di supporto normale verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare specifico hotfix in questione. Per un elenco completo dei numeri di telefono del servizio clienti Microsoft e supporto tecnico o per creare una richiesta di assistenza separata, visitare il seguente sito Web Microsoft: Nota Il modulo "Hotfix Download disponibile" Visualizza le lingue per cui è disponibile l'hotfix. Se non viene visualizzata la lingua, è perché un aggiornamento rapido non è disponibile per tale lingua.

Status
Microsoft ha confermato che questo è un problema per i prodotti Microsoft elencati nella sezione "Si applica a".
Informazioni
Quando un'applicazione effettua una connessione a SQL Server, innanzitutto stabilisce un contesto di database. Per impostazione predefinita, la connessione tenterà di ottenere un blocco DATABASE in modalità SH. Il blocco SH-DATABASE verrà rilasciato quando la connessione viene interrotta o contesto del database viene modificato nel corso della durata della connessione. Se si dispongono di molte connessioni attive che utilizzano lo stesso contesto di database, è possibile avere molti blocchi del tipo di risorsa di DATABASE per il database specifico.

Nel computer che dispone di 16 o più CPU, solo gli oggetti tabella utilizzano uno schema di blocco partizionata. Tuttavia, i blocchi di database non sono partizionati. Di conseguenza, blocca il numero di database più grande, maggiore sarà il tempo impiegato per SQL Server ottenere un blocco del database. Maggior parte delle applicazioni non si verificano problemi causati da questa struttura. Ma non appena il numero supera una determinata soglia, tempo e lavoro aggiuntivo necessario per ottenere il blocco. Sebbene il costo solo micro secondi per ogni blocco aggiuntiva, poiché i bucket di hash di blocco sono protetti mediante uno spinlock può aumentare rapidamente il tempo totale. In questo modo ulteriori cicli della CPU e attende per altri lavoratori ottenere il blocco.

Questa correzione introduce partizionamento del blocco DATABASE quando viene abilitato il flag di traccia T1236 all'avvio. Il blocco del DATABASE di partizionamento consente di mantenere la profondità dell'elenco di blocco gestibili in ogni partizione locale. Ciò Ottimizza notevolmente il percorso di accesso utilizzato per ottenere un blocco DATABASE .

Per monitorare il spinlock LOCK_HASH , è possibile utilizzare la query seguente.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @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      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
Per ulteriori informazioni sulla diagnosi e risoluzione dei conflitti spinlock su SQL Server, visitare il seguente documento:

Nota Sebbene questo documento è stato scritto per SQL Server 2008 R2, le informazioni sono ancora applicabili a SQL Server 2012.
Riferimenti
Per ulteriori informazioni sui flag di traccia in SQL Server 2012, visitare il seguente sito Web di TechNet:


Per ulteriori informazioni su come trovare il numero di blocchi di database utente per ogni database, utilizzare la seguente query per calcolare questo valore:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 2926217 - Ultima revisione: 12/03/2015 15:52:00 - Revisione: 7.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtit
Feedback