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.

enter image description here

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ù:

enter image description here enter image description here

@@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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top