Quali sono i 3 principali problemi di prestazioni che riscontri con i tuoi server SQL?


15

Sono uno studente della Fontys University di Eindhoven e attualmente sto conducendo una serie di interviste per aiutare con lo sviluppo di uno strumento SQL Server e vorrei ricevere feedback dagli esperti del settore.

Una delle mie domande è:

Quali sono i 3 principali problemi di prestazioni che riscontri con le tue istanze di SQL Server e come li identifichi?

In particolare sono interessato agli script e agli strumenti utilizzati per misurare questo.

Risposte:


22

Fuori dalla cima della mia testa - primi 3 problemi di query:

  • Conversioni implicite
  • Strategie di indicizzazione errate (troppe o non sufficienti o del tipo sbagliato)
  • Utilizzando SELECT * invece di nominare solo i campi necessari

C'è molto di più in merito a problemi di configurazione a livello di server, problemi di schema del database, problemi hardware, ecc. Ho scritto uno script per analizzare rapidamente i server alla ricerca di questo tipo di problemi:

http://www.brentozar.com/blitz/


15
  • Design / query / indicizzazione scadenti
  • Non è consentito acquistare hardware corretto
  • Braindead ORMs (alias "SQL is dead")

14

Non tra i primi 3, ma ho pensato di menzionare cose non ancora menzionate:

  1. SQL ha messo su macchine virtuali senza dettagli / trasparenza forniti al DBA. Il server host modificherà in modo dinamico le impostazioni dei computer guest causando un calo delle prestazioni e lasciando il DBA senza indizi. Funzionalità come hypertreading, teaming di rete e ballooning della memoria rendono i contatori delle prestazioni un obiettivo mobile da monitorare.Tools: sysmon/perfmon, DMVs, maintaining a history of performance counters in tables.
  2. Allo stesso modo, nessuna trasparenza / verificabilità sulle impostazioni SAN fornite al DBA. Ho avuto LUN con diverse preferenze di cache di lettura / scrittura impostate ma ho detto che erano tutte uguali.Tools: IO DMVs, SQLIO.
  3. Architettura DB errata: come dimensionamento e posizionamento dei dati e dei file di registro e tempdb. Uso improprio del parallelismo. Creazione di più filegroup sugli stessi dischi fisici.Tools: experience.

Un altro strumento che sto verificando ora è Project Lucy . Sembra pulito.


10
  • privo di indici adeguati
  • uso di con nolock nel codice di produzione da parte di qualcuno per cercare di risolvere problemi di prestazioni. Soprattutto se il codice modifica i dati nelle tabelle
  • applicazione selezionando più dati del necessario in più volte di quanto sia necessario. Ex ha un binario restituito ogni volta anche se vuoi solo i dati di testo della stessa tabella.

2
+1 per la menzione nolock. Ogni sviluppatore che conosco pensa che sia una buona idea usarlo perché "non blocca la tabella nelle letture"
tucaz

Non lo odi solo quando un tuo cliente ha acquistato quell'enorme sistema per multimoney e la prima volta che lo guardi usano con nolock ovunque? E poi ...: - /
Martin Sjöberg il

9

Query che si ridimensionano male (ottieni tutti gli ordini per X anni per tutti i clienti ecc. Inclusi tutti gli ordini inclusi dati sommati e altri dati medi calcolati male)

Basta interrogare tutto in una volta.

Tabelle che contengono campi varchar / text 'descrittivi' che devono essere cercati attraverso ogni query.


7
  • Manutenzione impropria, vale a dire nessuna reorgs di indice, statistiche, nessun backup del registro
  • Indici mancanti
  • Query scritte male

7
  • Cattivo database e progettazione dell'applicazione
  • scarso utilizzo dei vantaggi della piattaforma (gli sviluppatori desideravano avere un codice di accesso al database integrato nella piattaforma. Nessun SP, nessuna funzione ecc.)
  • cattiva indicizzazione, ovviamente.

7
  • query ad hoc sui dati di prod - sì, gli sviluppatori ritengono che sia necessario e alcuni potrebbero persino avere accesso :-)
  • progettazione errata di un'app che utilizza il database, ad esempio: troppi dati aggiunti e mai rimossi anche se non sono più necessari (il che porta a problemi di prestazioni perché i backup diventano grandi, le attività di manutenzione richiedono più tempo ... ecc)
  • tutti i file di database sullo stesso raid o peggio, sulla stessa unità (ad esempio: dbs di sistema, tempdb, dbs utente tutti insieme sulla stessa unità / raid)

3
  • Cattiva progettazione del database
  • Scarsa strategia di indicizzazione (inclusi troppi indici, indici mancanti e mancanza di manutenzione degli indici)
  • Scarse decisioni sull'architettura hardware

2

L'indicizzazione è fondamentale per le prestazioni, ma ho scoperto che la maggior parte dei DBA lo sa, e quindi tende ad essere una delle prime cose che viene risolta tramite l'ottimizzazione delle query. Le aree che spesso non sono ben indirizzate:

  1. Troppi viaggi di andata e ritorno per DB. Chattiness è uno dei principali problemi di prestazioni che vedo.
  2. Ottenere i limiti di transazione giusti. La transazione di ogni INSERT / UPDATE / DELETE può essere un killer ad alte prestazioni.
  3. Mancata ottimizzazione del lato hardware; in particolare, inserendo il registro DB su un volume diverso dai dati DB.

Se potessi aggiungere un quarto elemento all'elenco, sarebbe un uso eccessivo e inappropriato di trigger e / o cursori. Non sembra succedere troppo in questi giorni, ma quando lo fa, è doloroso dal punto di vista delle prestazioni.

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.