altiProfile
altiProfile#
개요#
Altibase 서버 내에서 수행되는 작업과 서버의 상태 정보를 파일로 기록하여 분석할 수 있다. 서버가 남긴 상태 파일을 프로파일이라 하며 altiProfile은 이 프로파일을 문자 형태로 변환하여 출력하거나, STATEMENT 관련 데이터만 추출하여 통계 정보를 구축하여 출력한다. 이 정보를 사용하여 사용자는 시스템의 상태를 분석할 수 있다.
altiProfile [-stat query|session] {profile_name [profile_name2 [profile_name3] ...}
구문#
파라미터#
파라미터 | 설명 |
---|---|
-h | 도움말을 출력한다. |
-stat query/session | 서버가 남긴 프로파일에서 STATEMENT의 통계 정보를 구축하여, 텍스트와 CSV 형태의 파일로 출력한다. 구축되는 통계 정보에 대한 자세한 설명은 아래의 "사용 방법"을 참고하기 바란다. |
설명#
서버가 남긴 프로파일을 문자 형태로 변환하거나, STATEMENT 관련 데이터만 추출하여 통계 정보를 구축한다.
사용 예#
iSQL> ALTER SYSTEM SET QUERY_PROF_FLAG = 1;
Alter success.
iSQL> ALTER SYSTEM SET TIMED_STATISTICS = 1;
Alter success.
iSQL> --(Execute an SQL query here.)
$ cd $ALTIBASE_HOME/trc
$ altiProfile alti-1286503704-0.prof
$ altiProfile -stat query $ALTIBASE_HOME/trc/*.prof
사용 방법#
서버의 상태 및 작업 내용을 기록하려면 QUERY_PROF_FLAG 프로퍼티를 0보다 큰 값으로 설정하여야 한다. QUERY_PROF_FLAG 프로퍼티의 값에 따라 다음의 정보들이 기록된다.
값 | 이름 | 설명 |
---|---|---|
0 | 기록하지 않음 | |
1 | [STATEMENT] | SQL 문이 실행될 때마다 실행된 SQL문, 실행시간, 실행정보, 색인 및 디스크 접근 정보 출력. 단, 실행시간이 제대로 출력되게 하려면 TIMED_STATISTICS 프로퍼티를 1로 설정해야 한다. TIMED_STATISTICS 프로퍼티에 대한 자세한 설명은 General Reference를 참조하기 바란다. |
2 | [BIND] | SQL 문이 실행될 때마다 BIND 파라미터 출력 |
4 | [PLAN] | SQL 문이 실행될 때마다 실행계획 출력 |
8 | [SESSION STAT] | 3초마다 세션 정보 출력(V$SESSTAT 정보) |
16 | [SYSTEM STAT] | 3초마다 시스템 정보 출력(V$SYSSTAT 정보) |
32 | [MEMORY STAT] | 3초마다 메모리 정보 출력(V$MEMSTAT 정보) |
위의 값을 조합하여 원하는 정보를 기록하도록 설정한다. 예를 들어, 프로퍼티를 1+4+32=37로 설정하면 SQL 문이 실행될 때마다 SQL 문의 실행정보와 실행계획을 출력하고 3초마다 메모리 정보를 출력한다.
프로퍼티가 설정되면, 서버는 alti-#시간-#번호.prof 이름의 파일에 정보를 남긴다. 사용자는 altiProfile 명령어로 상태 파일을 변환하여 분석할 수 있다.
통계 정보 출력#
altiProfile은 -stat 옵션을 사용해서 실행된 SQL문에 대한 통계 정보를 구축하고 출력할 수 있다. 이 정보는 튜닝 대상이 되는 SQL문을 찾는데 도움이 된다.
-stat query 옵션을 실행하여 구축되는 통계 정보는 아래와 같다.
-
COUNT: QUERY가 실행된 횟수
-
AVG: QUERY 수행에 걸린 평균 시간 (microseconds 단위)
-
TOTAL: QUERY 수행에 걸린 시간 합계 (microseconds 단위)
-
MIN: QUERY 수행에 걸린 최소 시간 (microseconds 단위)
-
MAX: QUERY 수행에 걸린 최대 시간 (microseconds 단위)
-
SUCCESS: QUERY 실행에 성공한 횟수
-
FAIL: QUERY 실행에 실패한 횟수
-
QUERY: 수행된 SQL문
-stat session 옵션으로 수행한다면, query 옵션을 실행하여 구축되는 통계 정보에 SESSION ID가 추가된다.
아래는 $ALTIBASE_HOME/trc 디렉토리에 생성된 모든 프로파일을 분석하여 SQL문 별로 통계 정보를 구축하는 altiProfile 실행 예제이다.
$ altiProfile -stat query $ALTIBASE_HOME/trc/*.prof
### Processing [/altibase_home/trc/alti-1423543095-0.prof]...
100% [====================]
### Writing CSV File [alti-prof-stat-1423543711.csv]...
### Writing TEXT File [alti-prof-stat-1423543711.txt]...
### Successfully done.
위에 실행 로그를 살펴보면, 통계 정보는 CSV 형식과 텍스트 형식의 파일로 저장된다. 출력된 파일의 이름은 'alti-prof-stat-#시간.csv'과 'alti-prof-stat-#시간.txt'로 자동 생성된다.
다음은 텍스트 파일의 내용이다. 통계 정보는 TOTAL 값으로 정렬되어 출력된다.
$cat alti-prof-stat-1423543711.txt
COUNT AVG TOTAL MIN MAX SUCCESS FAIL QUERY
===========================================================================================================
5 0.003730 0.018650 0.003035 0.004640 5 0 DROP VIEW REVENUE
5 0.003523 0.017616 0.003004 0.003745 5 0 CREATE VIEW REVENUE (
...
다음은 CSV 파일의 내용이다. 텍스트 파일과 동일한 내용이 CSV 형식으로 출력된다. CSV 형식의 파일은 excel 같은 스프레드시트 애플리케이션을 사용해서 사용자가 원하는 포맷으로 가공할 수 있다.
$ cat alti-prof-stat-1423543711.csv
COUNT,AVG,TOTAL,MIN,MAX,SUCCES,FAIL,QUERY
5, 0.003730, 0.018650, 0.003035, 0.004640,5,0,"DROP VIEW REVENUE"
5, 0.003523, 0.017616, 0.003004, 0.003745,5,0,"CREATE VIEW REVENUE (
...
주의 사항#
프로파일링 기능을 동작시킬 경우, 서버 내에서 실행되는 모든 SQL 문에 대해 실행 정보를 기록하며 또한 매 3초마다 세션 및 시스템 정보 등 서버의 상태를 기록하므로 시스템에 부하를 줄 수 있다.
또한 프로파일링 기능을 설정할 때 프로파일이 커져 디스크가 꽉 찰 수 있으므로 신중해야 한다.
출력항목#
다음과 같은 형식으로 출력된다.
[STATEMENT]
..
[BIND]
..
[PLAN]
..
[SESSION STAT]
..
[SYSTEM STAT]
..
[MEMORY STAT]
..
각 정보는 아래와 같은 형식으로 출력된다.
[STATEMENT]#
다음의 표는 실행한 STATEMENT에 대한 정보를 나타낸다.
필드 이름 | 값 | 설명 |
---|---|---|
SQL | 문자열 | 실행된 SQL 문 |
User Info | ||
User ID | INTEGER | 사용자 식별자 |
Client PID | BIGINT | 클라이언트 프로세스 아이디 |
Client Type | VARCHAR(40) | 접속한 클라이언트의 타입 |
Client AppInfo | VARCHAR(128) | 클라이언트의 정보 문자열 |
Elapsed Time for this SQL statemen | ||
Total | BIGINT | 총 쿼리 수행 시간 |
Parse | BIGINT | 파싱 수행 시간 |
Valid | BIGINT | 정당성 검사 수행 시간 |
Optim | BIGINT | 최적화 수행 시간 |
Execu | BIGINT | 실행 수행 시간 |
Fetch | BIGINT | Fetch 수행 시간 |
Query Execute Info | ||
EXECUTE Result | INTEGER | 0: failure 1: rebuild 2: retry 3: queue empty 4: success |
Optimizer Mode | BIGINT | 최적화 모드 |
Cost Mode | BIGINT | 최적화 비용 |
Used Memory | BIGINT | 향후 확장 예정 |
SUCCESS SUM | BIGINT | 실행 성공 횟수의 총합 |
FAILURE SUM | BIGINT | 실행 실패 횟수의 총합 |
PROCESSED ROW | BIGINT | 처리된 레코드 개수 |
Result Set Info | ||
FETCH Result | INTEGER | 0: failure 1: success 2: no results |
Index Access Info | ||
Memory Full Scan Count | BIGINT | 메모리 테이블에 대한 Full Scan이 발생한 횟수 |
Memory Index Scan Count | BIGINT | 메모리 테이블에 대한 Index Scan이 발생한 횟수 |
Disk Full Scan Count | BIGINT | 디스크 테이블에 대한 Full Scan이 발생한 횟수 |
Disk Index Scan Count | BIGINT | 디스크 테이블에 대한 Iindex Scan이 발생한 횟수 |
Disk Access Info | ||
READ DATA PAGE | BIGINT | 질의 수행 시 디스크 페이지에 대한 읽기 연산 횟수 |
WRITE DATA PAGE | BIGINT | 사용하지 않음 |
GET DATA PAGE | BIGINT | 질의 수행 시 디스크 페이지에 대한 버퍼 접근 횟수 |
CREATE DATA PAGE | BIGINT | 질의 수행 시 디스크 페이지 생성 횟수 |
READ UNDO PAGE | BIGINT | 질의 수행 시 UNDO 영역 디스크 페이지에 대한 읽기 연산 횟수 |
WRITE UNDO PAGE | BIGINT | 사용하지 않음 |
GET UNDO PAGE | BIGINT | 질의 수행 시 UNDO 영역 디스크 페이지에 대한 버퍼 접근 횟수 |
CREATE UNDO PAGE | BIGINT | 질의 수행 시 UNDO 영역 디스크 페이지 생성 횟수 |
[BIND]#
SQL 문에 바인드 되는 변수들에 대한 정보이다.
[PLAN]#
실행된 SQL 문의 실행 계획이 출력된다. 실행 계획에 관한 자세한 내용은 Performance Tuning Guide를 참고한다.
[SESSION STAT]#
매 3초마다 V$SESSTAT 정보가 출력된다. V$SESSTAT의 자세한 내용은 General Reference 의 성능 뷰 부분을 참고한다.
[SYSTEM STAT]#
매 3초마다 V$SYSSTAT 정보가 출력된다. V$SYSSTAT의 자세한 내용은 General Reference의 성능 뷰 부분을 참고한다.
[MEMORY STAT]#
매 3초마다 V$MEMSTAT 정보가 출력된다. V$MEMSTAT의 자세한 내용은 General Reference의 성능 뷰 부분을 참고한다.