2016-11-10 2 views
0

Ich habe 5000 SELECT-Anweisungen auf einer Datenquelle ausführen und Ergebnisse ziehen und die 5000 Werte in Tabelle einer anderen Datenquelle einfügen.Transaction Timedout nach 300s Websphere, Spring Batch, DB2

für 5000 select-Anweisungen (alle verschieden sqls sind) Ich bin ein exeuting von einer (Dies ist mehr Zeit nehmen)

für 5000 Einsätze I JdbcTemplate.batchUpdate tue()

Der obige Job muss alle 30 Minuten ausgeführt werden. Ich habe Spring Batch für diesen Job konfiguriert, der von CRON alle 30 Minuten ausgelöst wird.

Sobald die Methode aufgerufen wird, um 5000 select-Anweisungen zu vervollständigen, dauert es mehr als 300s. Daher wirft die Websphere eine timeout-Ausnahme. Es besagt, dass die globale Transaktionszeit 300 s überschritten hat.

Ich weiß, ich kann das Timeout in der Websphere erhöhen, aber ich kann das nicht tun, da in der Produktion die Serverprofile standardmäßig konfiguriert sind.

Kann mir jemand einen besseren Weg vorschlagen, damit umzugehen.

Antwort

0

Aufruf Sie können versuchen, die Anzahl der SELECTs als Anfragen zu reduzieren und Antworten für jede von ihnen sind separate Elemente der Netzwerklatenz, unabhängig davon, wie viel Zeit sie auf der Datenbankseite einnehmen. Das Ausgeben von 5000 einzelnen Abfragen und das Warten auf ihre individuellen Ergebnisse dauert auch dann, wenn die Abfragen einfach sind. SELECT 1 FROM SYSIBM.SYSDUMMY1 s

Wenn zwei oder mehr Abfragen den gleichen Ergebnistyp aufweisen, können Sie sie mit UNION s verbinden und wenn zwei oder mehr Abfragen werden erwartet, um die gleiche Anzahl von Ergebnissen haben, dann können Sie sie durch ihre Ergebnisspalten oder konfektionierten Schlüssel wie ein mit ROW_NUMBER() erzeugt beitreten:

select a,b,c from .... and select a,e,f from... verwandelt sich in

select table1.a, b,c,d,e,f from 
table (select a,b,c from ...) table1, 
table (select a,e,f from ...) table2 
where 
table1.a = table2.a 

Hoffnung dieser hilft,

0

Danksagungen und Turan Yuksel für Ihre Vorschläge. Ich habe das Problem gelöst.

Ich habe die 5000 sqls zu kleineren Einheiten aufgeteilt und verarbeitet als eine Liste von Anfragen anstelle einer Anfrage mit 5000 sqls. Jetzt gibt es kein Timeout-Problem mit der Federcharge. Das Zeitlimit, das vom Spring-Batch-Element-Writer verursacht wurde, da die Batch-Transaktion nach 300 Sekunden abgelaufen ist.

Jetzt ist es gelöst. Hoffe, das hilft jemandem, der ähnliche Probleme hat.

Verwandte Themen