Finestra 24x7 vs notturna


19

Dove posso trovare risorse su come passare meglio a un'operazione 24x7? Come riescono le grandi aziende con grandi database? I nostri lavori notturni come

  1. eliminare i vecchi dati
  2. reindex
  3. aggiornare le statistiche

tutti sembrano causare un impatto critico sul nostro sistema (ad es . utenti online e feed di dati in tempo reale). Ho cercato su Amazon qualsiasi libro correlato a questo argomento e finora non ho trovato nulla.


Stai cercando di migrare database da un server a un altro o modi migliori per gestire l'impatto dei tuoi lavori notturni?
Mike Fal,

Come gestire l'impatto dei lavori notturni? Vale a dire come ridurre o eliminare la "finestra batch" notturna.
NealWalters,

2
@NealWalters In quale edizione di SQL Server ti trovi? (Le ricostruzioni dell'indice online e il partizionamento delle tabelle per cambiare i vecchi dati sono disponibili in Enterprise Edition)
Martin Smith

1
Quale versione di SQL Server stai usando? Azienda / standard? Enterprise ha alcune funzionalità che possono consentirti di eseguire alcune operazioni come ONLINE con un impatto minimo per l'utente.
Kin Shah,

1
@NealWalters Dai un'occhiata alla suddivisione di DBCC CHECKDB per più giorni fornisce maggiori dettagli. Anche se è più per CHECKDB, ma ti aiuterà a farti più idea. Facci sapere quale edizione stai utilizzando, così le persone qui possono aiutarti meglio.
Kin Shah,

Risposte:


27

Il mantenimento di database 24x7 è un argomento piuttosto ampio con molte opzioni da considerare. Questo ampio argomento ha molti elementi da considerare, ma possiamo provare a toccare la base su alcuni dei punti più alti.

Quello che prima vorresti identificare è, mentre molte operazioni sono 24x7, di solito ci sono periodi di bassa attività. È possibile sfruttare questi tempi per l'esecuzione della manutenzione in modo da ridurre l'interferenza che si avrà sul database. Il secondo è che dovrai riservare del tempo per interruzioni complete (per cose come service pack o migrazioni di database), quindi dovrai negoziare le finestre di manutenzione completa con la tua direzione. Per elementi specifici dovrai considerare e pianificare ognuno di essi, oltre a sfruttare gli strumenti in modo appropriato. Il pezzo importante è che devi PIANIFICARE ciascuno di questi, tutti gli esempi che fornisco sono molto "le tue miglia possono variare".

I backup

I backup in genere non avranno un impatto enorme sui carichi di lavoro, ma devono essere considerati in quanto possono consumare molto I / O. Ti consigliamo di pianificare questi in modo appropriato e monitorare il tempo necessario per il completamento. Il più grande ostacolo qui è che in un'operazione 24x7, probabilmente non sarai in grado di eseguire backup notturni completi ogni notte della settimana. Ti consigliamo di pianificare quando puoi prendere il pieno, quando stai prendendo i differenziali e i periodi di conservazione per entrambi in combinazione con i tuoi backup del registro.

Ad esempio, eseguo backup completi di tutti i miei database la domenica sera (attività più bassa), i differenziali in tutte le altre notti (dal lunedì al sabato). Tengo le ultime due settimane di full e diff su disco, registri per gli ultimi due giorni. Questo mi dà abbastanza flessibilità per il recupero, ma potrei dover recuperare i backup dal nastro, se necessario.

Manutenzione indice / statistiche

Questo è il tipo più comune di manutenzione attiva che dovrai affrontare. Non puoi evitarlo, ma puoi mitigare l'impatto. La regola empirica iniziale è che si dovrebbe fare solo manutenzione sugli oggetti che ne hanno bisogno. Le linee guida generali sono solo per ricostruire gli indici che sono frammentati più del 30% e più grandi di 1000 pagine . Se disponi di statistiche di aggiornamento automatico , questo gestirà la maggior parte della manutenzione delle statistiche, ma un lavoro notturno per mantenere le cose sincronizzate non è una cattiva idea.

Se hai Enterprise Edition, hai anche accesso ad alcune altre opzioni per la gestione della manutenzione. Il più importante è Ricostruzioni di indici online , che ti permetteranno di ricostruire gli indici mentre sono ancora in uso (essenzialmente, costruisce l'indice fianco a fianco, quindi lo scambia). È inoltre possibile sfruttare il partizionamento per tabelle "di grandi dimensioni" per ridurre il tempo necessario per la ricostruzione.

La soluzione migliore per questo tipo di manutenzione, se non si dispone di script personalizzati che gestiscono queste best practice, è utilizzare gli script di manutenzione di Ola Hallengren . Questi sono abbastanza facili da installare e configurare e hanno molte di queste linee guida integrate.

Controlli di coerenza DBCC

A seconda del carico di lavoro complessivo, è possibile che i controlli DBCC siano dannosi per l'operazione. Esistono due modi comuni per ridurre al minimo l'impatto di DBCC per i database:

  • PHYSICAL_ONLY- L'esecuzione di questa opzione controllerà i database a livello di pagina fisica ed eviterà il controllo completo più invasivo. Ciò riguarderà l'identificazione dei tipi più probabili di corruzione.
  • Verifica di una copia ripristinata: se si dispone dello spazio, è possibile ripristinare il database in un'altra istanza ed eseguire un controllo DBCC sulla copia ripristinata. Questo racconterà la stessa storia sul tuo database live, ma ovviamente non interferirai con l'attività. Alcune altre alternative qui eseguono DBCC su una copia di log o su un db con mirroring.

Questo post sul blog fornisce maggiori dettagli sulle tue opzioni.

Lavori in lotti / ETL

Questo dipende davvero da come progetti i tuoi processi. Il tuo ETL può sempre interferire con le tabelle OLTP live (proprio come qualsiasi altra applicazione), quindi alcune chiavi da tenere a mente:

  • Pianifica tale lavoro intorno ad altri interventi di manutenzione e in periodi di bassa attività.
  • Ridimensiona il lavoro in modo che sia batch per entrambe le prestazioni e in modo che il batch non sia così grande da bloccare il tavolo per ore. Esempi delle estremità dello spettro: riga per riga agonizzante (RBAR) rispetto a un singolo milione di righe eliminate.
  • Utilizzare le tabelle degli stage e offline l'elaborazione dei dati, ove appropriato. Tocca le cose dal vivo solo quando assolutamente necessario.

Conclusione

Ancora una volta, c'è un sacco di terreno da coprire qui. Questa non è una guida completa, ma una panoramica di alto livello di alcuni approcci. Non ho nemmeno discusso delle opzioni di disponibilità elevata (come gruppi di disponibilità e clustering di failover). Dovrai rivedere ogni articolo e costruire un piano su come gestirlo. In molti modi, dovrai anche iterare e perfezionare il tuo lavoro mentre avanzi.

Risorse addizionali:

Best practice per la manutenzione di SQL Skills VLDB


Concordato, eccellente, utile, risposta dettagliata. Grazie! Ci stiamo lavorando.
NealWalters,

Un altro fattore su cui stiamo lavorando è il trasferimento di molti dati non aggiornati in un ODS (Operational Data Store) per mantenere il database principale più ordinato. Troviamo anche che "Statistiche di aggiornamento" è in esecuzione da 2 a 2,5 ore ogni mattina, e questo sembra rallentare le prestazioni generali. È "best practice" eseguire Update-Statistics ogni giorno?
NealWalters,

Di solito lo farò, ma YMMV. Il rischio di non aggiornare le statistiche è che le statistiche diventano obsolete e si iniziano ad avere piani di query errati. Dovrai analizzare se questo è un problema o meno se non esegui le statistiche di aggiornamento ogni notte. Potresti vedere come distanziare di più i tuoi lavori statistici e vedere come le tue query si comportano in generale.
Mike Fal,
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.