MSSQLSERVER_856
Si applica a: SQL Server
Dettagli
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
ID evento | 856 |
Origine evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbolico | BAD_MEMORY_CLEAN_DATABASE_PAGE |
Testo del messaggio | SQL Server ha rilevato il danneggiamento della memoria hardware nel database '%ls', ID file: %u, ID pagina; %u, indirizzo di memoria: 0x%I64x ed è stata ripristinata correttamente la pagina |
Spiegazione
Questo messaggio indica che SQL Server ha rilevato una pagina di memoria non valida in un oggetto memorizzato nella cache all'esterno del pool di buffer. Questo messaggio viene generato nei sistemi che supportano la possibilità di eseguire il recupero dagli errori di memoria. SQL Server corregge questi errori di memoria rimuovendo le pagine di memoria danneggiate che non vengono modificate e registra questo messaggio di errore. Se la pagina di memoria danneggiata è stata modificata (dirty), viene generato l'errore 824 (MSSQLSERVER_824)
Azione utente
È consigliabile eseguire controlli dell'hardware o del sistema per determinare se esistono problemi di memoria o di CPU. Verificare che siano stati applicati al sistema tutti i driver di sistema, gli aggiornamenti del sistema operativo e gli aggiornamenti dell'hardware. Valutare la possibilità di eseguire qualsiasi diagnostica del produttore dell'hardware, inclusi i test correlati alla memoria. Ogni volta che viene visualizzato questo errore, provare a eseguire DBCC CHECKDB
su tutti i database in questa istanza.
Ulteriori informazioni
Nei computer con hardware più recente e che eseguono Windows Server 2012 o versione successiva, l'hardware può notificare al sistema operativo e alle applicazioni che le pagine di memoria (pagine del sistema operativo) sono contrassegnate come non valide o danneggiate. Le applicazioni come SQL Server possono registrare queste notifiche di pagina di memoria non valida usando il set di API seguente:
GetMemoryErrorHandlingCapabilities
RegisterBadMemoryNotification
BadMemoryCallbackRoutine
SQL Server aggiunge il supporto per queste notifiche in Microsoft SQL Server 2012 (11.x) e versioni successive. Durante l'avvio di SQL Server, SQL Server verifica se l'hardware supporta questa nuova funzionalità. Nel log degli errori viene inoltre visualizzato il messaggio seguente:
<Il computer server Datetime> supporta il ripristino degli errori di memoria. La protezione della memoria SQL è abilitata per il ripristino dal danneggiamento della memoria.
Attualmente, solo il pool di buffer esegue l'azione quando SQL Server riceve queste notifiche. Quando riceve una notifica, SQL Server deve scorrere l'intero pool di buffer e individuare l'indirizzo per ogni buffer allocato. SQL Server usa quindi l'API QueryWorkingSetEX
per verificare se una delle pagine di memoria che tornano alla pagina dei dati è contrassegnata come non valida. Nella struttura di output PSAPI_WORKING_SET_EX_BLOCK
che corrisponde a questa pagina di memoria, il membro non valido sarà impostato su 1 se è stato segnalato un danneggiamento.
Se la pagina di dati o il pool di buffer non è stata modificata o non elabora l'I/O, SQL Server può eliminare e annullare il commit della pagina dei dati. SQL Server registra quindi il messaggio seguente:
SQL Server ha rilevato il danneggiamento della memoria hardware nel database '%ls', ID file: %u, ID pagina; %u, indirizzo di memoria: 0x%I64x ed è stata ripristinata correttamente la pagina.
Quando le query richiedono nuovamente tale pagina di dati, il pool di buffer può leggere la pagina di dati dal disco e riportare il contenuto nel pool di buffer. È anche possibile che la versione su disco della pagina sia in uno stato danneggiato. In tal caso, SQL Server potrebbe registrare errori aggiuntivi, ad esempio l'errore 824.
Se la pagina non valida viene usata non dal pool di buffer ma da un altro oggetto o struttura memorizzata nella cache, SQL Server registra il messaggio seguente:
È stato rilevato danneggiamento della memoria hardware non correggibile. Il sistema potrebbe diventare instabile. Per informazioni più dettagliate, vedere il registro eventi di Windows.
Se il server segnala errori di memoria, è necessario contattare il fornitore dell'hardware del computer ed eseguire le azioni appropriate, ad esempio eseguire la diagnostica della memoria, aggiornare il BIOS e il firmware e sostituire i moduli di memoria non validi.
È possibile usare il flag di traccia di SQL Server 849 per impedire la registrazione di SQL Server con il sistema operativo per le notifiche di errore di memoria. Tenere tuttavia presente che l'abilitazione del flag di traccia 849 impedirà a SQL Server di ricevere notifiche di memoria non valida dal sistema operativo. Non è pertanto consigliabile usare questo flag di traccia in condizioni normali.
Tenere inoltre presente che, per impostazione predefinita, SQL Server riceverà queste notifiche sull'hardware supportato.
È inoltre necessario tenere presente che quando SQL Server esegue la registrazione per queste notifiche di errore di memoria, il processo di sistema lazy writer non esegue controlli di pagina costanti. Per altre informazioni sui controlli delle pagine costanti, vedere Come risolvere un errore Msg 832 (pagina costante modificata) in SQL Server.