Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

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.

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutte le correzioni di protezione che sono state 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:

http://support.microsoft.com/contactus/?ws=supportNota: 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.

Stato

Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".

Ulteriori 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 = 1
WHILE @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]
DROP TABLE #spinlock_stats
Per ulteriori informazioni sulla diagnosi e risoluzione dei conflitti spinlock su SQL Server, visitare il seguente documento:

Diagnosticare e risolvere il conflitto Spinlock su SQL ServerNota: 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:

Informazioni sui flag di traccia in SQL Server 2012
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


Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×