Background Image
조회 수 20058 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

오래 걸리는 질의 추출하기

소개: 브로커에 관한 상태를 모니터링하는 cubrid broker status를 이용하여 수행시간이 긴 질의 및 동일 시간에 수행 중인 질의를 추출하는 방법을 소개한다.

적용 대상: CUBRID2008, UNIX/Linux

 

오래 걸리는 질의 추출하기

cubrid broker status을 수행하면 브로커의 상태를 모니터링 할 수 있다. 출력되는 내용에서 STATUS에 해당하는 값 중 BUSY는 현재 질의 처리가 진행 중인 것을 나타내며 질의 문도 간단하게 함께 출력된다.

% broker1  - cub_cas [23924,53000] /home/test/CUBRID/log/broker/broker1.access /home/test/CUBRID/log/broker/error_log/broker1.error

  job_queue : 0, AUTO-ADD-ON, TIMEOUT:300, SQL-LOG-ON:AB:100000, KC:AUTO

----------------------------------------------------

ID   PID     C PSIZE STATUS        LAST ACCESS TIME

----------------------------------------------------

 1 23929  3954 11024  BUSY       2009/05/13 16:39:17 execute update tn_visit_counting set visit_count=2 where visit_ilja='20090310'

 2 23930  3894  9956  IDLE       2009/05/13 16:39:20

cubrid broker status는 수행할 때 마다 수행 시점의 브로커 상태를 보여준다. 처음 수행했을 때 위 예제의 update 질의가 실행되고 있었는데 3초 후에 두 번째 수행했을 때도 동일한 질의 가 나타난다면 그때까지 질의 처리가 완료되지 않았다는 이야기가 된다.

본 문서에서는 이러한 cubrid broker status 기능을 이용하여 수행 시간이 긴 질의를 추출하는 방법을 소개한다.

모니터링 스크립트

아래 스크립트를 작성한다. 스크립트 파일이름은 편의상 mb.sh로 지칭한다.

#!/bin/sh

broker_name=$1

sec=$2

file_name=$3

echo "monitor start" > $file_name

while [ true ]

do

busy=`cubrid broker status $broker_name | grep BUSY`

# 브로커 상태 정보에서 BUSY인 것 만 추출

if [ ! -z "$busy" ]; then

# BUSY인 것이 있는 경우 로그 기록

date=`date`

echo "$date" >> $file_name

echo "ID   PID     C PSIZE STATUS        LAST ACCESS TIME" >> $file_name

echo "=======================================================================" >> $file_name

echo "$busy" >> $file_name

echo "=======================================================================" >> $file_name

fi

sleep $sec

# 입력 받은 주기() 간격으로 cubrid broker status를 수행.

done

위 스크립트는 수행 시 인자로 브로커명, 모니터링 주기(), 로그 저장 파일명을 입력 받는다.

cubrid broker status는 수행 시 브로커명을 입력 받으면 해당 브로커에 대한 정보만 출력한다. 한 시스템에 여러 개의 브로커가 운영될 수 있기 때문에 추출하고자 하는 브로커를 지정하여 정보를 가져오도록 한 것이다.

브로커 상태 정보 중에 BUSY가 포함되어 있으면 추출한 시간과 함께 BUSY 로그를 입력 받은 로그 저장 파일에 저장하고, 이 작업을 모니터링 주기로 반복 수행한다.

스크립트 실행

작성한 스크립트(mb.sh)를 브로커명, 주기, 파일명을 입력하여 백그라운드에서 수행되도록 실행한다.

[test ~]$ sh mb.sh broker 2 br_1.log &

예제는 2초 간격으로 cubrid broker status broker를 수행하고, 이때 BUSY 상태인 로그를 추출하여 br_1.log라는 파일에 저장하는 작업을 백그라운드에서 수행한다. 이는 수행 시간이 2초 이상 되는 질의를 추출하겠다는 것이고, 수행시간이 더 긴 질의를 추출하려면 두 번째 인자를 더 큰 수치를 주면 된다.

결과 로그 분석

monitor start

2009. 05. 13. () 16:39:14 KST

ID   PID     C PSIZE STATUS        LAST ACCESS TIME

=======================================================================

 1 23929  3851 11024  BUSY       2009/05/13 16:39:14 execute update tn_visit_counting set visit_count=2 where visit_ilja='20090310'

 2 23930  3704  9960  BUSY       2009/05/13 16:39:14 execute select * from tn_visit_counting where visit_ilja='20090310'

=======================================================================

2009. 05. 13. () 16:39:16 KST

ID   PID     C PSIZE STATUS        LAST ACCESS TIME

=======================================================================

 1 23929  3851 11024  BUSY       2009/05/13 16:39:14 execute update tn_visit_counting set visit_count=2 where visit_ilja='20090310'

 2 23930  3734  9960  BUSY       2009/05/13 16:39:15 execute select * from tn_visit_counting where visit_ilja='20090310'

=======================================================================

위 로그는 2초 단위로 BUSY 상태인 로그를 추출한 결과다.

처음 두 개의 수행 중인 질의가 있고, 2초 후에도 두 개의 수행 중인 질의가 있다.

그렇다면 이중 2초 이상 수행 중인 질의는 어떤 것일까?

여기서 수행시간이 긴 질의로써 판단하는 기준은 ID, PID, C, LAST ACCESS TIME 모두 일치 여부이다.

따라서 위 예제에서는 ID 1인 질의만 2초 이상 수행 중인 질의에 해당한다.

ID 2는 동일한 질의처럼 보이나 처음 것은 16:39:14에 수행된 질의이고 두 번째 것은 16:39:15에 수행된 것으로 서로 다른 트랜잭션에서 수행한 것이다.

이 결과에는 상세 내용은 기록되지 않으므로 ID(cas number) 값과 LAST ACCESS TIME을 가지고 해당 sql log에서 상세 내역을 확인해야 한다.

Sql log $CUBRID/log/broker/sql_log <broker_name>_<ID>.sql.log 파일로 존재한다.

위 예제에 따르면 broker1_1.sql.log 파일이 해당하며, 해당 시간의 질의를 확인해보면 execute ... time 부분에서 질의 처리에 소요된 시간을 확인할 수 있다.

05/13 16:39:14.290 (3721) prepare 0 update tn_visit_counting set visit_count=2 where visit_ilja='20090310'

05/13 16:39:14.291 (3721) prepare srv_h_id 1 (PC)

05/13 16:39:14.316 (3721) execute srv_h_id 1 update tn_visit_counting set visit_count=2 where visit_ilja='20090310'

05/13 16:39:17.317 (3721) execute 0 tuple 1 time 3.001 // 질의 수행 시간

05/13 16:39:17.317 (0) auto_commit

05/13 16:39:17.363 (0) auto_commit 0

*** 3.073

결과 로그 활용

종종 서비스를 하는 중 서비스가 느려져서 원인이 되는 질의 문을 찾아 튜닝을 하고자 하는데 질의 처리시간이 오래 걸렸다고 생각한 질의가 실제는 금방 처리되는 질의 인 경우가 있다. 질의 하나에 의해서 부하가 발생하는 경우도 있겠지만 이런 경우에는 여러 질의가 동시에 수행되는 과정에서 다른 질의 들에 영향을 받아 성능이 느려지는 경우인 것이다. 이러한 경우에 sql log를 모두 뒤져서 해당 시점의 질의들을 모두 찾아 확인을 해야 하는데 쉬운 작업이 아니다. 이 스크립트를 작성하게 된 가장 큰 이유가 바로 여기에 있다.

위에서도 설명했듯이 결과 로그에는 해당 시간대에 수행 중인 질의가 기록된다. 그렇기 때문에 위와 같이 수행시간이 긴 질의를 찾아내는 작업뿐만 아니라 동일 시간대에 수행 중인 질의들을 확인 할 수 있고 이를 통해 어떤 질의가 실제 성능에 큰 영향을 미치고 있는 지를 확인해볼 수 있다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
166 기타 트랜잭션과 LOCK 초급과정 정만영 2010.07.01 20760
165 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1391
164 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13428
163 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27990
162 기타 제로보드 XE 사용하기 file admin 2008.11.21 33068
161 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81365
160 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35663
159 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27479
» 기타 오래 걸리는 질의 및 동일 시간에 수행 중인 질의 추출하기 손승일 2009.05.26 20058
157 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49817
156 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18546
155 기타 에러 메시지(error) 설명 및 조치 가이드 file CUBRID_DEV 2009.07.11 24420
154 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12018
153 기타 시스템 카다로그 2 admin 2008.11.21 22333
152 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28268
151 기타 서비스 오픈을 위한 CUBRID 구성 가이드 손승일 2009.11.28 23204
150 Linux 복제 따라하기 admin 2008.11.21 29094
149 기타 보안 설정 admin 2008.11.21 22838
148 기타 멀티미디어 데이터 관리를 위한 CUBRID GLO Method 활용 janus 2009.12.11 16191
147 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 26553
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales