Qualcuno di voi ha sperimentato quanto segue e ha trovato una soluzione:
Gran parte del back-end del nostro sito Web è MS SQL Server 2005. Ogni settimana o due settimane il sito inizia a funzionare più lentamente - e vedo che le query impiegano sempre più tempo per essere completate in SQL. Ho una domanda che mi piace usare:
USE master
select text,wait_time,blocking_session_id AS "Block",
percent_complete, * from sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 order by start_time asc
Il che è abbastanza utile ... fornisce un'istantanea di tutto ciò che è in esecuzione proprio in quel momento contro il tuo server SQL. La cosa bella è che anche se la tua CPU è bloccata al 100% per qualche motivo e Activity Monitor si rifiuta di caricare (sono sicuro che alcuni di voi sono stati lì) questa query ritorna ancora e puoi vedere quale query sta uccidendo il tuo DB.
Quando eseguo questo, o Activity Monitor durante i periodi in cui SQL ha iniziato a rallentare, non vedo alcuna query specifica che causa il problema: sono TUTTI in esecuzione più lentamente su tutta la linea. Se riavvio il servizio MS SQL, allora tutto va bene, accelera subito - per una settimana o due fino a quando non si ripete.
Nulla che mi venga in mente è cambiato, ma questo è appena iniziato alcuni mesi fa ... Idee?
--Added
Si noti che quando si verifica questo rallentamento del database, non importa se stiamo ottenendo 100.000 visualizzazioni di pagina all'ora (ora del giorno più occupata) o 10.000 visualizzazioni di pagina all'ora (tempo lento), il completamento delle query richiede più tempo del normale. Il server non è davvero sotto stress: la CPU non è alta, l'utilizzo del disco non sembra essere fuori controllo ... sembra una frammentazione dell'indice o qualcosa del genere, ma non sembra essere il Astuccio.
Per quanto riguarda incollare i risultati della query che ho incollato sopra, non posso davvero farlo. La query sopra elenca il login dell'utente che esegue l'attività, l'intera query, ecc. Ecc. E non vorrei davvero distribuire online i nomi dei miei database, tabelle, colonne e accessi:) ... I posso dirti che le query in esecuzione in quel momento sono normali, query standard per il nostro sito che funzionano sempre, nulla fuori dalla norma.
- 24 marzo
Sono passate circa due settimane dall'ultimo riavvio. Ho apportato diverse modifiche: ho trovato alcune query in cui stavamo facendo un uso pesante di tabelle temporanee che erano totalmente inutili e che i nostri sviluppatori hanno cambiato il modo in cui lo stavano facendo. Ho adattato le dimensioni di alcuni dei database in costante (lento ma sicuro) sviluppo a una dimensione intelligente per la loro crescita. Ho regolato le impostazioni di crescita automatica per tutto e per essere più intelligente (erano TUTTI impostati su una crescita di 1 MB). Infine ho ripulito un po 'MSDB. Effettuiamo il log shipping e davvero non abbiamo avuto bisogno di mantenere anni e anni di punti di backup, ho scritto alcuni script che lo mantengono solo per pochi mesi. Continuerò ad aggiornare questo thread, poiché è troppo presto per dire se il problema è stato ancora risolto.