Il riavvio di SQL Server lo accelera?


22

Ho notato che alcuni DBA riavviano SQL Server molto frequentemente, a volte anche di notte. Credo che lo facciano per liberare un po 'di memoria, o forse anche per velocizzare le query. So che dopo un riavvio i piani di query devono essere ricompilati, ma anche compreso che mi chiedo se ci sia un netto vantaggio in questa pratica.

È vero che il riavvio quotidiano di SQL Server lo rende più veloce?

Risposte:


37

Il riavvio del server è probabilmente una delle cose più dannose per le prestazioni. Significa forzare una cache fredda per i dati, una cache fredda per i piani di query e tutte le cache interne di SQL Server vengono anch'esse modificate nel processo. Per non parlare del fatto che gettando via tutte le statistiche raccolte nei DMV delle statistiche operative, si riducono le possibilità di indagare su qualcosa con successo.

Non esiste una guida ufficiale a sostegno di questa pratica, non l'ho mai visto menzionato in alcun lavoro rispettabile di buone pratiche, non ho mai sentito parlare di un esperto stimabile che abbia mai menzionato questo come una pratica. Non farlo


Non sono d'accordo. SQL Server è ospitato su un server Windows in cui le patch di sicurezza e gli aggiornamenti MS richiedono riavvii periodici. Credo che una migliore progettazione di SQL sia la chiave per risolvere i problemi di prestazioni e non fare affidamento sul riavvio dei server, ma a volte è un passaggio necessario.
Fandango68

27

Mentre le altre risposte sono buone, manca un pezzo importante: la cache dei file di Windows.

Su Windows a 64 bit, non esiste limite alla quantità di memoria che Windows utilizzerà per memorizzare nella cache i file. Windows può svuotare completamente il sistema dalla memoria e, a quel punto, inizierai a passare al disco. È stato documentato in alcuni punti:

Riavviando SQL Server, si impone a SQL di rinunciare alla memoria, consentendo a Windows di ottenere di più e il paging si interrompe temporaneamente. SQL si riavvierà all'utilizzo della memoria quasi zero e salirà gradualmente e quando la casella esaurisce nuovamente la memoria, il riavvio aiuterà temporaneamente. Riavviando l'intero sistema operativo, forzerai anche l'uso della cache dei file di Windows verso il basso.

La vera soluzione: interrompere la copia dei file dal server Windows o limitare la quantità di cache dei file in uso con il servizio di cache dei file dinamica come documentato nei post di blog sopra.


3
+1 Era a conoscenza del problema, non sapeva che la cache poteva essere limitata usando il servizio di cache dinamica.
Mark Storey-Smith,

La pratica di "bloccare" la memoria su MIN e MAX (anche se dovrebbero e potrebbero essere esattamente la stessa quantità di KB) aiuterebbe a garantire che SQL Server consumi solo una quantità predefinita di RAM MIN / MAX consentendo altri servizi / applicazioni Windows / richieste di rete per continuare a funzionare. Questa è stata la mia pratica e ha funzionato bene. Qualche altro pensiero?
SnapJag

@SnapJag - non necessariamente, perché SQL non consuma subito la quantità minima. SQL parte da zero e aumenta gradualmente in base alle esigenze.
Brent Ozar,

11

Se accelera le query, potrebbe essere coinvolto lo sniffing dei parametri . Se un piano di merda viene memorizzato nella cache e applicato a chiamate successive non appropriate, il miracolo del riavvio consente di memorizzare nella cache il piano comune / corretto. In tal caso, esistono modi infinitamente migliori per correggere il comportamento, come altri hanno indicato. Ma fino a quando non smettono di riavviare il box, non c'è modo di eseguire l'analisi della causa principale.


Questa avrebbe dovuto essere la risposta accettata. La corretta progettazione SQL e la progettazione del piano sono cruciali per evitare la necessità di un riavvio del server, ma i riavvii del server potrebbero essere necessari comunque a causa di politiche del server - come patch di sicurezza, ecc.
Fandango68

11

Non dovresti riavviare SQL Server se non hai modificato le proprietà del servizio o impostato tracce di avvio che desideri rendere immediatamente effettive.

Poiché @RemusRusanu ha dichiarato molti punti, cancella molte cache e fa sì che SQL Server esegua molte operazioni di avvio non necessarie .

Sembra che questo server non sia un server SQL dedicato / server database. È consigliabile che un server di database di produzione abbia un solo scopo ... essere un server di database. In tal caso, potresti mettere da parte memoria e risorse sufficienti per il sistema operativo e dare tutto il resto a SQL Server. Ciò porterebbe a non morire di fame altre applicazioni o ruoli del server.


2

Sono d'accordo con il sentimento che se stai facendo tutto nel modo giusto, potrebbe non essere necessario riavviare / riavviare il tuo server MSSQL.
Per me questo vale per lo scenario in cui tutti sono competenti e puoi sistemare qualsiasi cosa.

Non sono un DBA. Sono un architetto del software e parte di ciò implica la creazione di interi schemi di database da zero e, sfortunatamente , lavoro con database di terze parti sui quali non ho assolutamente alcun controllo.
Le persone, che hanno creato e conservano uno dei nostri principali database di terze parti, lo hanno reso a malapena funzionale.

Ho già detto che non sono neanche un esperto di sicurezza o un ingegnere di rete?

  • Almeno un importante aggiornamento del sistema operativo Window, aggiornamento della sicurezza, aggiornamento del BIOS, Service Pack OS / MSSQL o aggiornamento cumulativo MSSQL usciranno ogni mese o due.
  • Applicarli tempestivamente significa riavviare / riavviare il server ogni trimestre.
  • Anche quando si opera all'interno di una rete Intranet, perché non applicare gli aggiornamenti di sicurezza?
  • Se mi fosse permesso avere SSL sui nostri siti Web Intranet PHI, lo farei perché nessuna rete è infallibile. Sono paranoico, immagino.


Per me la domanda diventa allora: dovrei riavviare SQL Server più spesso di ogni 3 mesi?

La pianificazione si riavvia per la promessa di un pollice in più di performance, è come ballare per la pioggia.
Forse arriverà, forse no, ma non saprai con certezza cosa lo abbia causato la pioggia.

  • Se si nota un aumento significativo delle prestazioni dopo il riavvio del server a causa di una manutenzione regolare, è necessario indagare sul perché ciò accada.
  • Se stai riscontrando problemi e non sei sicuro di ciò che li sta causando, mentre riduci le variabili arrestando servizi e lavori per trovare qualcosa come una perdita di memoria (in casi estremi come questo), forse riavviare / riavviare il server con alcuni servizi disattivati off (o tracce attivate) ti aiuterà a escludere quegli altri servizi come causa.

Non mi piace dicendo che mai necessario riavviarlo per risolvere un problema o verificare il failover, ma io fare avere un problema con Restarts programmazione per mantenere un problema di prestazioni che si verificano in modo casuale ignoto.

L' unica eccezione a questo è se gestisci un database di terze parti canaglia in cui il riavvio ogni settimana o due sembra essere l'unico modo per mantenerlo operativo e non ti è permesso di ripararlo o addirittura toccarlo.
Anche allora, dovresti cercare delle correzioni, condividerle con il proprietario e sollevare l'inferno fino a quando non viene risolto.

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.