오픈한지 1년된 사이트(웹로직, oracle11g, spring3, mybatis ) 가
DB에 락이 발생하여 해당 세션을 KILL 하였는데
그 시간대에 발생한 해당 사이트의 모든 트랜잭션(insert, update, delete..) 이 rollback이 되는 현상이 발생하였습니다.
connection pool 갯수는 15개 정도입니다.
그 시간대에 was 에러 로그는 아래와 같습니다.
<Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '239' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "1,229" seconds working on the request "Workmanager: default, Version: 0, Scheduled=true, Started=true, Started time: 1229277 ms
", which is more than the configured time (StuckThreadMaxTime) of "1,200" seconds in "server-failure-trigger". Stack trace:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:503)
org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:810)
org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
아래는 락이 발생한 세션을 kill하기 전의 현상입니다.
사이트내에서 게시글을 읽으면 조회수가 1->2로 정상적으로 증가하여 보이지만
실제 DB 조회시에는 1로 조회되고 있었습니다.
이런 현상이 모든 테이블에서 동일하게 발생하고 있었습니다.
제 생각으로는 락이 걸렸던 해당 row나 테이블만 rollback이 되어야 할듯한데..
원인을 분석하여 조치하여야 하는 상황인데..아무리 고민을 해보아도 답이 나오지 않아
답답한 마음에 조언을 구합니다.
|