È possibile migliorare la resilienza agli arresti anomali di SQL Server?


20

Abbiamo PC che eseguono SQL Server (2008 SP4 e 2016 SP1) che perdono regolarmente energia. Ovviamente, questo a volte porta alla corruzione (indice) del database di SQL Server, che è necessario ripristinare in seguito.

Sono consapevole che SQL Server non è progettato per tali scenari e la soluzione corretta è quella di correggere la causa della perdita di potenza (più su quello che segue, se sei curioso). Tuttavia, ci sono opzioni di ottimizzazione in SQL Server che posso impostare per ridurre il rischio di corruzione del database in caso di interruzione dell'alimentazione ?


Sfondo: il "PC" è un tablet Windows montato su un carrello elevatore. Quando l'utente spegne il carrello elevatore, il tablet perde potenza. Abbiamo cercato di insegnare agli utenti a chiudere correttamente Windows prima di spegnere il carrello elevatore, ma non ci siamo riusciti (probabilmente perché spegnerlo "funziona" la maggior parte delle volte). Attualmente stiamo anche studiando altre opzioni, come l'aggiunta di un UPS che segnala al tablet di spegnersi in caso di interruzione dell'alimentazione.

Risposte:


28

Sono consapevole che SQL Server non è progettato per tali scenari e la soluzione corretta è quella di correggere la causa della perdita di potenza [...]

In realtà è progettato per gestire la perdita di energia, ecco perché ci sono cose come scrivere in anticipo (WAL) e il crash crash all'avvio (o come si desidera chiamarlo). Uno dei modi in cui questo viene fatto è scegliendo di non memorizzare nella cache le scritture che sembra essere ciò che il tablet sta facendo, quindi la corruzione.

Tuttavia, ci sono opzioni di ottimizzazione in SQL Server che posso impostare per ridurre il rischio di corruzione del database in caso di interruzione dell'alimentazione?

No, SQL Server sta facendo ciò che dovrebbe. Dovresti guardare al di fuori di SQL Server (impostazioni di Windows per la memorizzazione nella cache dell'unità [che SQL vuole essere spento ma non possiamo forzarti], aggiornamenti hardware / firmware, ecc.) O come ha detto Eric, acquista un alimentatore esterno per relativamente economico che potrebbe risolvere i sintomi (il vero problema è probabilmente un tipo di cache o scrittura con batteria che non è effettivamente supportata).



1
Ho una buona idea di quale sia l'impostazione colpevole se si tratta di un problema con il sistema operativo . (anche se questo è probabilmente uno dei vecchi sistemi operativi integrati se potessi indovinarlo, non ho mai verificato se avevano anche quell'impostazione). E poi almeno la maggior parte dei dischi rigidi di livello consumer mentono spudoratamente sull'aver completato la scrittura per "motivi di ottimizzazione delle prestazioni", quindi praticamente non c'è speranza su quelli.
Voo,

26

Se il tablet ha una batteria funzionante , è possibile configurare Windows affinché si spenga quando la batteria è scarica .

Se il tablet ha una batteria non funzionante , prendere in considerazione la sostituzione della batteria. (Ho avuto portatili del genere: rimarrai sorpreso di quanto possano essere economiche le batterie sostitutive su eBay. Non funzionano bene come OEM, ma ehi, in questa situazione c'è di meglio di niente.)

Se il tablet non ha alcuna capacità della batteria , considera l'aggiunta di un piccolo gruppo di continuità (UPS) con uscite USB in grado di comunicare con Windows per dirlo quando è alimentato a batteria. (Ad esempio, il mio desktop è configurato per spegnersi quando l'UPS è quasi scarica, in questo modo si spegnerà in caso di interruzione dell'alimentazione anche se non sono a casa.)

Se nessuna di queste è un'opzione, sei un po 'sfortunato. È un vecchio white paper, ma le nozioni di base sugli I / O di SQL Server 2000 di Microsoft spiegano sostanzialmente che è necessario un sottosistema di I / O in grado di gestire le interruzioni di corrente in modo elegante.

Esistono opzioni che è possibile utilizzare per aumentare il rischio, ad esempio Durabilità ritardata o tabelle di sola memoria (non durevoli), ma per impostazione predefinita, SQL Server sta già facendo del suo meglio per massimizzare l'affidabilità con ogni scrittura nel registro delle transazioni. Se anche le scritture dei registri delle transazioni non possono essere garantite a causa di interruzioni di corrente casuali, spendere $ 100 per una batteria UPS.


6

Supponendo di avere un DB locale sul carrello elevatore anziché un server a causa di connessioni wireless irregolari? Ovviamente rimuovere SQL dal carrello elevatore sarebbe la soluzione preferibile.

Comunque, come suggerito da Brent, imposta il tablet per spegnersi da solo dopo x minuti di carica della batteria o con criteri simili.

In caso contrario, un piccolo UPS in grado di avviare un normale arresto sarà probabilmente la soluzione migliore in tal caso. Affidarsi agli utenti per cose del genere significa chiedere di fallire.


1
"Supponendo di avere un DB locale sul carrello elevatore piuttosto che un server a causa di connessioni wireless spotty?" Sì, è esattamente così. L'applicazione mantiene sincronizzati i DB locali e il DB del server, il che consente ai carrelli elevatori di lasciare l'area coperta dalla WLAN e continuare a utilizzare l'applicazione.
Heinzi,

2

Il sistema operativo sottostante deve garantire una scrittura corretta o la restituzione di un errore. Il sistema operativo a sua volta si basa su driver che a loro volta si basano su firmware che si basa sull'hardware Se entrambi i driver, il firmware o l'hardware si trovano, non c'è nulla che Windows o SQL Server possano fare al riguardo.

Questo è il motivo per cui è necessario verificare con il produttore del driver / firmware / hardware.

Inoltre, l'ordinamento in scrittura deve essere garantito su tutti i livelli, quindi anche questo deve essere verificato.

Anche le cache alimentate a batteria possono fallire, ad esempio durante le tempeste di New York alcuni data center non erano accessibili per giorni e le batterie si sarebbero esaurite, perdendo potenzialmente le scritture commutate

https://www.postgresql.org/docs/devel/static/wal-reliability.html

https://brad.livejournal.com/2116715.html

http://rhaas.blogspot.com/2010/10/wal-reliability.html?m=1


1

Per espandere le altre risposte:

Innanzitutto, prova a togliere l'SQL dal carrello elevatore, se possibile. Pensa che il recupero da una perdita di potenza sia negativo, prova a farlo dopo che il laptop è stato investito da oltre 7.000 libbre. Con ore di attività di magazzino su di esso, non eseguito il backup ...

In secondo luogo, un meccanismo per il laptop per eseguire uno spegnimento automatico dopo x tempo di carica della batteria dovrebbe essere comunque inserito.

In terzo luogo, il collegamento del laptop a un'alimentazione non commutata sul carrello elevatore sarebbe un'opzione? Assicurati di prendere in considerazione le norme di sicurezza (l'ambiente potrebbe richiedere tutto con la chiave del carrello elevatore) e per quanto tempo il carrello elevatore rimane tra gli usi (specialmente nei fine settimana e nei giorni festivi) per evitare di scaricare la batteria della macchina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.