Database sotto carico più pesante: tutte le query SQL iniziano a scadere dopo un periodo di ore/giorni
-
02-11-2019 - |
Domanda
Faccio un'applicazione Web che ha registrato una forte crescita nella scorsa settimana e sembra che il mio database stia sequestrando a causa sua.
Puoi vedere che tutto sembrava andare bene fino alle 3 del mattino di questa mattina e poi tutte le mie richieste hanno iniziato a cronometrare. Questa non è la prima volta che è accaduto, ma dopo aver spinto nuove modifiche al server si riavvia di nuovo bene. Non sembra accadere a basso carico, ma ha anche funzionato ad alto carico per ore perfettamente bene. Non credo che le 3 del mattino siano un tempo di carico particolarmente elevato.
Cose che ho fatto / notare:
Server dedicato, MSSQL e sto usando NHibernate come ORM per generare le mie domande.
Il server è praticamente solo un archivio di dati. Il 99% delle query è un inserto/selezione di base. Ho un inserto sfuso per la creazione di una grande quantità di oggetti di playlist.
Ho abilitato il batching. È impostato su 50 per impostazione predefinita e 200 se> 1000 articoli di playlist stanno per essere scritti nel database. Ciò ha ridotto i picchi nei tempi di risposta del mio DB.
Ho il mio timeout di comando impostato su 5 secondi. È stato impostato al valore predefinito, 30 secondi, e stavo ancora riscontrando il problema. Il problema sembra essere rimasto lontano per un periodo di tempo più lungo dopo averlo messo a 5 secondi.
Ho provato a correre
exec sp_updatestats
Come descritto qui: https://stackoverflow.com/questions/8602395/timeout-expited-the-timeout-period-elapsed-prior-to-completion-of-the-operation# che mostrava alcuni indici aggiornati, ma non si sono comportati in differenze reali.Ho impostato il livello di isolamento della connessione dei database su ReadUnCommetted:
configuration.SetProperty("connection.isolation", "ReadUncommitted");
Specifico il db predefinito per le prestazioni nhibernate come descritto qui:
configuration.SetProperty("default_schema", "[db896d0fe754cd4f46b3d0a2c301552bd6].[dbo]");
Cosa diavolo dovrei cercare di provare a bloccare il blocco del mio database? Sta mostrando solo l'utilizzo della CPU dell'1%, quindi non penso che sia troppo tassato. Non dovrebbe essere una query a lunga durata se ho 5 secondi su tutto. Non sono gli indici. Sto esaurendo le idee.
In termini di query: sono tutte dichiarazioni utente selezionate. È solo un gruppo di persone che cercano di accedere e accedere al loro account. Ricevo circa 1000 richieste / 30 minuti per l'utente selezionato.
Ecco alcune informazioni in più:
@@VERSIONE:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4270.0 (X64) Nov 30 2012 17:11:43 Copyright (c) Microsoft Corporation Web Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor )
Nessuna soluzione corretta