Domanda

Gestisco una comunità di fotografi online e sembra che il sito stia attirando una scansione dell'accesso al database, a volte colpendo i timeout.

Mi ritengo abbastanza compiacente nella scrittura di query SQL e nella progettazione di tabelle, ma non sono affatto un DBA ... da qui il problema.

Alcuni retroscena:

  1. Il mio sito e il mio server SQL sono in esecuzione su un host remoto. Aggiornamento il codice ASP.NET da Visual Studio e SQL tramite Mgmt di SQL Server. Studio Express. Non ho accesso fisico al server.

  2. Tutti i miei proc memorizzati (penso di averli tutti presi) sono racchiusi in transazioni.

  3. La tabella principale contiene solo 9400 record al momento. Aggiungo 12 nuovi record a questa tabella ogni notte.

  4. In questa tabella principale è presente una vista che riunisce i dati di diverse altre tabelle in un'unica vista.

  5. le tabelle secondarie sono record più piccoli, ma molti di più. 70.000 in uno, 115.000 in un altro. Questi sono i record di commenti e valutazioni per gli articoli in # 3.

  6. Gli indici si trovano nei campi più necessari. E li ho impostati su Ricalcola automaticamente le statistiche sui grandi tavoli.

Quando il sito si ferma, se eseguo il codice per cancellare il registro delle transazioni, aggiorno le statistiche, ricostruisco la vista principale e ricostruisco la procedura memorizzata per ottenere i commenti, la velocità ritorna. Devo farlo manualmente comunque.

Purtroppo i miei utenti sono frustrati da questi problemi e la loro partecipazione diminuisce.

Quindi la mia domanda è ... in un ambiente remoto, qual è il modo migliore per impostare e pianificare un piano di manutenzione per mantenere il mio db SQL in esecuzione al suo apice ???

Grazie mille! KLK

È stato utile?

Soluzione

Non è necessario impostare le attività di manutenzione come piano di manutenzione.

È sufficiente creare una procedura memorizzata che esegua le attività di manutenzione che si desidera eseguire, ricostruzioni dell'indice, aggiornamenti delle statistiche ecc.

Quindi creare un lavoro che chiama le procedure memorizzate. Il lavoro può essere configurato per l'esecuzione secondo la pianificazione desiderata.

Per creare un lavoro, utilizzare la procedura sp_add_job.

Per creare una pianificazione utilizzare la procedura sp_add_schedule.

Spero che ciò che ho dettagliato sia chiaro e comprensibile, ma sentiti libero di lasciarmi un messaggio se hai bisogno di ulteriore assistenza.

Saluti, John

Altri suggerimenti

Il mio istinto dice che stai facendo qualcosa di sbagliato. Sembra un po 'come quelle storie che senti dove un sistema non può rimanere attivo a meno che non riavvii il server di notte :-)

Qualcosa non va nelle tue query, il numero di righe che hai è quasi sempre irrilevante per le prestazioni e il tuo database è comunque molto piccolo. Non ho molta familiarità con SQL Server, ma immagino che abbia alcuni strumenti di analisi delle query piuttosto dolci. Immagino anche che abbia un modo per registrare query lente.

Sembra davvero che tu abbia un indice mancante. Sicuramente potresti pensare di aver aggiunto gli indici giusti, ma fino a quando non verifichi che vengano utilizzati, non importa. Forse pensi di avere quelli giusti, ma le tue domande suggeriscono il contrario.

Per prima cosa, scopri come registrare le tue query. Le probabilità sono molto buone: hai un killer lì dentro che fa una scansione sequenziale che un indice correggerebbe.

In secondo luogo, potresti avere un sacco di piccole query che invece lo stanno uccidendo. Ad esempio, potresti avere un "Utente" " oggetto che colpisce il database ogni volta che si cerca un nome utente da un ID_utente. Cerca i punti in cui stai interrogando il database centinaia di volte e sostituiscilo con una cache, anche se quella "cache". non è altro che una variabile privata che viene cancellata alla fine di una richiesta.

In conclusione, dubito davvero che sia qualcosa di mal configurato in SQL Server. Voglio dire, se dovessi riavviare il server tutte le sere perché il sistema si è bloccato, incolperesti il ??sistema o il tuo codice? Lo stesso affare qui ... impara gli strumenti forniti da SQL Server, scommetto che sono piuttosto chiari :-)

Detto questo, una volta che accetti di fare qualcosa di sbagliato, goditi il ??processo. Niente, per me, è più divertente quindi ottimizzare le query lente del database. È semplicemente fantastico poter eseguire una query con un tempo di esecuzione di 10 secondi e trasformarlo in uno con un tempo di esecuzione di 50 ms con un singolo indice ben posizionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top