안녕하세요
큐브리드로 서버를 구성하고 있는데요
스트레스테스트를 하는 중인데
쿼리 응답이 없는 현상이 발생해서 추적을 하다보니
cci_execute()함수에서 lock이 걸리는 증상을 발견했습니다
현재 테스트에 사용되는 쿼리는 select와 update만 사용하고 있습니다
무한루프를 돌면서 쿼리를 날리는데요 몇 분 정도 돌리다 보면 발생합니다
특정한 부분에서만 발생하는것이 아니라 원인을 찾기가 힘든데요
루프 안에서 하나의 트랜잭션에 사용하는 함수들은
cci_prepare
cci_get_result_info
cci_bind_param
cci_execute <-- 여기서 lock
cci_close_req_handle
cci_cursor
cci_fetch
cci_get_data
cci_close_req_handle
cci_end_tran
입니다
혹시 cci_execute가 중복 실행되는 부분이 있나해서
윈도의 CRITICAL_SECTION으로 cci_execute를 중복호출하지 않게 Lock, Unlock을 사용해서 테스트 해봐도
여전히 발생을 하는데요
참고로 7.3, 2008 둘 다 발생합니다
cci_execute에서 lock걸렸을 때 지정된 시간이 지나면 풀린다던가 하는 옵션이 있나요?
lock이 걸릴 만한 상황이 어떤 상황이 있나요?
문제가 발생했을 때 큐브리드 메니저로 확인해 볼만한 사항이 있나요?
그럼 답변 부탁드리겠습니다
큐브리드로 서버를 구성하고 있는데요
스트레스테스트를 하는 중인데
쿼리 응답이 없는 현상이 발생해서 추적을 하다보니
cci_execute()함수에서 lock이 걸리는 증상을 발견했습니다
현재 테스트에 사용되는 쿼리는 select와 update만 사용하고 있습니다
무한루프를 돌면서 쿼리를 날리는데요 몇 분 정도 돌리다 보면 발생합니다
특정한 부분에서만 발생하는것이 아니라 원인을 찾기가 힘든데요
루프 안에서 하나의 트랜잭션에 사용하는 함수들은
cci_prepare
cci_get_result_info
cci_bind_param
cci_execute <-- 여기서 lock
cci_close_req_handle
cci_cursor
cci_fetch
cci_get_data
cci_close_req_handle
cci_end_tran
입니다
혹시 cci_execute가 중복 실행되는 부분이 있나해서
윈도의 CRITICAL_SECTION으로 cci_execute를 중복호출하지 않게 Lock, Unlock을 사용해서 테스트 해봐도
여전히 발생을 하는데요
참고로 7.3, 2008 둘 다 발생합니다
cci_execute에서 lock걸렸을 때 지정된 시간이 지나면 풀린다던가 하는 옵션이 있나요?
lock이 걸릴 만한 상황이 어떤 상황이 있나요?
문제가 발생했을 때 큐브리드 메니저로 확인해 볼만한 사항이 있나요?
그럼 답변 부탁드리겠습니다
이 현상이 발생했을 때 lockdb로 출력한 결과 lock이 걸린 상황은 아닌 것 같습니다
*** Lock Table Dump ***
Lock Escalation at = 100000, Run Deadlock interval = 1
Transaction (index 0, (unknown), (unknown)@(unknown)|-1)
Isolation REPEATABLE CLASSES AND READ UNCOMMITTED INSTANCES
State TRAN_ACTIVE
Timeout_period -1
Transaction (index 1, cub_cas, DBA@duyoungk-PC|7648)
Isolation READ COMMITTED CLASSES AND READ UNCOMMITTED INSTANCES
State TRAN_ACTIVE
Timeout_period -1
Transaction (index 2, lockdb, dba@duyoungk-PC|9680)
Isolation READ COMMITTED CLASSES AND READ UNCOMMITTED INSTANCES
State TRAN_ACTIVE
Timeout_period -2
Object Lock Table:
Current number of objects which are locked = 0
Maximum number of objects which can be locked = 10000
브로커의 쿼리 로그를 봤을 때도 마지막으로 남은 로그에는 end_tran COMMIT이 수행되어 있습니다