Diagnosticare un problema di attesa del blocco

Un lock wait si verifica quando una transazione cerca di ottenere un lock su una risorsa già in possesso di un'altra transazione. Quando la durata del tempo di attesa del blocco si allunga, si verifica un rallentamento dell'esecuzione delle query SQL. È probabile che si tratti di un problema di attesa del blocco se si verificano tempi di attesa del blocco lunghi o inaspettati e nessun timeout del blocco.

Informazioni preliminari

In generale, per poter valutare in modo oggettivo che il sistema sta dimostrando un comportamento anomalo, che può includere ritardi di elaborazione e prestazioni scadenti, è necessario disporre di informazioni che descrivano il comportamento tipico (linea di base) del sistema. Si può quindi fare un confronto tra le osservazioni del sospetto comportamento anomalo e la linea di base. La raccolta di dati di base, programmando attività di monitoraggio operativo periodico, è una componente fondamentale del processo di risoluzione dei problemi. Per informazioni più dettagliate sulla definizione del funzionamento di base del sistema, vedere: Monitoraggio operativo delle prestazioni del sistema.

Per istruzioni su come monitorare gli eventi di blocco di attesa, vedere: Monitoraggio degli eventi di chiusura.

Informazioni su questa attività

Diagnosi
Un lock wait si verifica quando una transazione (composta da una o più istruzioni SQL) cerca di acquisire un lock la cui modalità è in conflitto con un lock detenuto da un'altra transazione. Un tempo di attesa eccessivo per il blocco si traduce spesso in un tempo di risposta insufficiente, quindi è importante monitorarlo. La quantità di tempo di attesa per i lock è meglio normalizzata su un migliaio di transazioni, perché il tempo di attesa per i lock su una singola transazione è in genere piuttosto basso e una misura normalizzata è più facile da gestire.
Esistono diverse qualità di attesa della serratura che devono essere prese in considerazione quando si cerca di confermare la diagnosi di ciascuna di esse. L'elenco seguente mostra le tre diverse qualità di attesa del blocco e il modo migliore per diagnosticarle:
  • Lunga attesa per il blocco individuale
    • Verificare il tempo di attesa di picco del blocco in base alla classe di servizio e al carico di lavoro. Impostare il monitoraggio degli eventi di chiusura sul carico di lavoro per ottenere questo valore.
  • Tempi di attesa lunghi per i lock, ma tempi di attesa brevi per i singoli lock
    • In genere è il risultato di un convoglio di serrature. Utilizzare il comando db2pd -locks wait per rilevare le catene di attesa.
  • Tipi di blocco in attesa
    • Il controllo potrebbe aiutare a determinare il problema. Trovare l'agente in attesa della chiusura per ottenere informazioni sul tipo di chiusura. Utilizzare le informazioni sul tipo di blocco per determinare se si sta verificando qualcosa di ovvio. Ad esempio, un blocco di un pacchetto potrebbe indicare un comando BIND / REBIND o un DDL in collisione con un utente di quel pacchetto; un blocco interno c (catalog cache) potrebbe indicare un DDL in collisione con la compilazione di una dichiarazione.
Segni indicativi
Cercate i seguenti segnali indicativi di attese di blocco:
  • Il numero di attese di blocco sta aumentando (valore crescente dell'elemento di monitoraggio lock_waits )
  • Un'alta percentuale di agenti attivi in attesa di blocco (ad esempio, il 20% o più degli agenti attivi totali). Per informazioni su come ottenere queste informazioni, vedere la sezione successiva, Cosa monitorare.
  • Un valore crescente del tempo di attesa del blocco (elemento di monitoraggio lock_wait_time ) acquisito a livello di database o di carico di lavoro
Cosa monitorare
A differenza di molti altri tipi di dati di monitoraggio Db2®, le informazioni di chiusura sono molto transitorie. A parte lock_wait_time, che è un totale continuo, la maggior parte delle altre informazioni sui lucchetti sparisce quando i lucchetti stessi vengono rilasciati. Pertanto, i dati sugli eventi di blocco e di attesa sono più preziosi se raccolti periodicamente per un certo periodo di tempo, in modo da comprendere meglio l'evoluzione del quadro.
Per raccogliere informazioni sugli agenti attivi in attesa di blocco, utilizzare la funzione della tabella WLM_GET_SERVICE_CLASS_AGENTS. Gli agenti in attesa di blocco sono indicati da agenti con le seguenti coppie attributo-valore:
  • OGGETTO_EVENTO = BLOCCO
  • TIPO_EVENTO = ACQUISIRE
Per ottenere informazioni sugli agenti attivi in attesa di lock, è possibile utilizzare anche application snapshot, le viste amministrative sui lock o l'opzione lock wait del comando db2pd -wlocks.
Questi sono gli elementi chiave del monitoraggio degli indicatori:
  • lock_waits valore è in aumento
  • long lock_wait_time valore

Se sono stati osservati uno o più dei segnali indicativi qui elencati, è probabile che si sia verificato un problema di attesa del blocco. Seguite il link nella sezione Cosa fare per risolvere il problema.

Operazioni successive

Dopo aver diagnosticato che le attese di blocco sono probabilmente la causa del problema riscontrato, è necessario intervenire per risolverlo: Risolvere i problemi di attesa del blocco