Come impedire che una query SQL a lunga esecuzione rimanga bloccata?

3

Se avessi un metodo come:

private void someMethod()
{
    runSqlQueryA();
    runSqlQueryB();
    runSqlQueryC();
}

La mia comprensione è che questo metodo sarà uno thread .

In weblogic, il thread apparirà bloccato se è in esecuzione da più di 10 minuti (per impostazione predefinita).

La mia domanda è: se queste query SQL impiegano abitualmente molto tempo, come faccio a impedire a Weblogic di rilevare il thread come bloccato?

Un'opzione sarebbe semplicemente cambiare la soglia del thread bloccato, ma mi chiedo se c'è una soluzione migliore, come un gestore di thread java che lo mantiene aggiornato.

    
posta dwjohnston 17.07.2015 - 00:22
fonte

1 risposta

2

WebLogic è principalmente un contenitore di applicazioni web. In quanto tale, qualsiasi cosa che richiede minuti (più di qualche secondo) per elaborare sarà sospetta. Le discussioni contrassegnate come bloccate indicano che qualcosa potrebbe essere sbagliato. Se si finisce con troppi thread bloccati, è probabile che il server entri in uno stato molto negativo. A parte la modifica dei tempi o l'esecuzione in un pool di thread non gestito (da WebLogic), c'è poco che non si possa impedire che un thread di lunga durata rimanga bloccato. L'utilizzo del proprio pool di thread può causare problemi di prestazioni significativi.

Se i processi richiedono molto tempo, è possibile utilizzare JMS o altri sistemi di accodamento per elaborarli. Ciò consentirà di limitare il numero di processi simultanei che eseguono questo processo lento. La coda può essere elaborata su una JVM separata con tempi di thread bloccati opportunamente modificati.

Se le query possono essere eseguite in parallelo, potrebbe essere possibile mettere in coda più elementi JMS. Questi sarebbero meno probabilità di funzionare abbastanza a lungo da apparire bloccati.

Come progettato, il thread verrà bloccato come bloccato. Questo non è necessariamente un problema a meno che non si generino troppi thread di questo tipo, o non vengano mai completati. È probabilmente utile esaminare altre opzioni piuttosto che un contenitore per eseguire il processo

    
risposta data 18.07.2015 - 19:52
fonte

Leggi altre domande sui tag