FIX: Rallentamento delle prestazioni o deadlock quando si ripristina un database ed eseguano istruzioni nello stesso momento in SQL Server 2012

Traduzione articoli Traduzione articoli
Identificativo articolo: 2725950 - Visualizza i prodotti a cui si riferisce l?articolo.
Microsoft distribuisce le correzioni di Microsoft SQL Server 2012 come un unico file scaricabile. Poiché le correzioni sono cumulative, ogni nuova versione contiene tutte le correzioni rapide e rilascio delle correzioni per tutte le correzioni fornite con il precedente 2012 di SQL Server.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Scenario 1

Si consideri lo scenario seguente:
  • Ripristino di un database di Microsoft SQL Server 2012.
  • Prima che sia terminata l'operazione di ripristino di database, un altro processo fa riferimento alla vista del catalogo di sys.database_recovery_status e richiede un blocco del database stesso. Ad esempio, è necessario eseguire l'istruzione SELECT seguente:

    SELECT * FROM sys.database_recovery_status
In questo scenario, il rallentamento delle prestazioni si verifica in cui un processo per l'istruzione SELECT deve attendere fino al termine del processo di ripristino di database.

Scenario 2

Si consideri lo scenario seguente:
  • Ripristino di un database in SQL Server 2012.
  • Prima che sia terminata l'operazione di ripristino di database, è necessario eseguire l'istruzione seguente:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Nota Il DataBaseID rappresenta l'ID del database su cui viene eseguita l'operazione di ripristino di database.
In questo scenario, un deadlock si verifica nel processo di ripristino del database. Questo blocco critico causa il mancata riuscita del processo di ripristino database.

Cause

I due scenari in cui sono descritti nella sezione "Sintomi" sono causati dalle stesse cause.

Nella sezione "Scenario1" il problema si verifica perché il processo di ripristino di database richiede un blocco esclusivo sul database. Quando si esegue l'istruzione menzionato nella sezione, è necessario un blocco condiviso sullo stesso database. Di conseguenza, il blocco condiviso attende che il blocco esclusivo fino a quando non viene rilasciato il blocco esclusivo.

Nella sezione "Scenario 2" quando si esegue l'istruzione menzionato nella sezione, un blocco condiviso è necessario sullo stesso database e la tabella sys.sysdbreg . All'ultima fase del processo di ripristino di database, il processo richiede un blocco di aggiornamento sulla tabella sys.sysdbreg . Tuttavia, il blocco condiviso non viene rilasciato dal database. Di conseguenza, si verifica un deadlock nella tabella sys.sysdbreg e il processo di ripristino di database viene impostato automaticamente su vittima del deadlock.

Risoluzione

Informazioni sull'aggiornamento cumulativo

Pacchetto di aggiornamento cumulativo 1 per SQL Server 2012 Service Pack 1

La correzione di questo problema è stata rilasciata prima nell'aggiornamento cumulativo 1. Per ulteriori informazioni su come ottenere il pacchetto di aggiornamento cumulativo per SQL Server 2012 Service Pack 1, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
2765331 Pacchetto di aggiornamento cumulativo 1 per SQL Server 2012 Service Pack 1
Nota Poiché le versioni sono cumulative, ogni nuova versione contiene tutte le correzioni rapide e rilascio delle correzioni per tutte le correzioni fornite con il precedente 2012 di SQL Server. Si consiglia di considerare l'ipotesi di applicare la versione più recente contenente tale hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
2772858 Il 2012 di SQL Server versioni rilasciate dopo il rilascio di SQL Server 2012 Service Pack 1

Pacchetto di aggiornamento cumulativo 3 per SQL Server 2012

La correzione di questo problema è stata rilasciata prima nell'aggiornamento cumulativo 3. Per ulteriori informazioni su come ottenere il pacchetto di aggiornamento cumulativo per SQL Server 2012, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
2723749 Aggiornamento cumulativo 3 per SQL Server 2012
Nota Poiché le versioni sono cumulative, ogni nuova versione contiene tutte le correzioni rapide e rilascio delle correzioni per tutte le correzioni fornite con il precedente 2012 di SQL Server. Si consiglia di considerare l'ipotesi di applicare la versione più recente contenente tale hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
2692828 Il 2012 di SQL Server versioni rilasciate dopo il rilascio di SQL Server 2012

Status

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

Workaround

Per aggirare il problema descritto nel secondo Scenario, utilizzare uno dei metodi descritti di seguito.
Metodo 1


Modificare l'istruzione per evitare il blocco condiviso per la tabella sys.sysdbreg utilizzando l'hint "NOLOCK".
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Metodo 2
Impostare la priorità di un deadlock dell'istruzione a "Basso".
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Nota Quando si utilizza il secondo metodo per evitare il deadlock nell'istruzione e nel processo di ripristino del database, i codici nell'istruzione IF non verranno eseguiti.

Riferimenti

Per ulteriori informazioni sul blocco esclusivo, blocco condiviso e blocco dell'aggiornamento, visitare il seguente sito Web MSDN:
Informazioni generali sulle modalità di blocco
Per ulteriori informazioni per il modello di manutenzione incrementale per SQL Server, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
935897 Un modello di manutenzione incrementale è disponibile dal team di SQL Server per offrire gli hotfix per i problemi segnalati
Per ulteriori informazioni sullo schema di denominazione per gli aggiornamenti di SQL Server, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
822499 Schema di denominazione per i pacchetti di aggiornamento software di Microsoft SQL Server
Per ulteriori informazioni sulla terminologia degli aggiornamenti software, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:
824684 Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

Proprietà

Identificativo articolo: 2725950 - Ultima modifica: martedì 20 novembre 2012 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Chiavi: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 2725950
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com