마크베이스를 설치하고 운영하면서 각종 사용 현황에 대한 모니터링이 필요할 때가 있습니다. 운영 엔지니어는 반드시 서비스가 하드웨어 자원내에서 적정하게 동작하고 있는지 확인해야 합니다.
- 연결된 세션의 갯수
- 수행중인 쿼리 상세
- 메모리 사용량
- 디스크 사용량
마크베이스는 meta 테이블과 virtual 테이블을 제공하고 있습니다. 이 2가지 종류의 테이블을 통해 다양한 정보들을 모니터링할 수 있습니다. 마크베이스 사용량은 주로 virtual 테이블을 통해 확인 가능하다.
- meta 테이블 : M$로 시작하며 사용자가 만든 테이블과 인덱스에 대한 정보를 확인할 수 있습니다.
- virtual 테이블 : V$로 시작하며 데이터베이스 전체 사용에 대한 각종 통계 및 정보를 확인할 수 있습니다.
1. 접속 세션(Session)
현재 마크베이스에 접속한 세션의 개수는 V$SESSION 테이블을 통해 확인합니다. 아래는 실행 결과 입니다.
Mach> SELECT COUNT(*) FROM V$SESSION; ID CLOSED USER_ID LOGIN_TIME SQL_LOGGING SHOW_HIDDEN_COLS FEEDBACK_APPEND_ERROR --------------------------------------------------------------------------------------------------------------- DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE MAX_QPX_MEM --------------------------------------------------------------------------------------------------------------- RS_CACHE_ENABLE RS_CACHE_TIME_BOUND_MSEC RS_CACHE_MAX_MEMORY_PER_QUERY RS_CACHE_MAX_RECORD_PER_QUERY --------------------------------------------------------------------------------------------------------------- RS_CACHE_APPROXIMATE_RESULT_ENABLE ------------------------------------- 11520873 0 1 2019-07-31 00:57:02 657:073:021 11 0 1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011 524288000 1 1000 16777216 50000 0 11409227 0 1 2019-07-28 11:24:13 079:009:793 11 0 1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011 524288000 1 1000 16777216 50000 0 11409226 0 1 2019-07-28 11:24:13 078:812:443 11 0 1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011 524288000 1 1000 16777216 50000 0 [3] row(s) selected.
2. 수행중인 쿼리(Statement)
현재 수행중인 SQL Statement 는 V$STMT 테이블을 통해 확인 가능합니다.
Mach> SELECT * FROM V$STMT; ID SESS_ID STATE RECORD_SIZE ----------------------------------------------------- QUERY ------------------------------------------------------------------------------------ 0 11409227 3 273 SELECT host, count(*) FROM weblog group by host order by host LIMIT 1000 0 11409226 3 8 SELECT COUNT(*) AS cnt FROM weblog 0 11520873 3 276 select * from v$stmt [3] row(s) selected.
3. 메모리(Memory)
리눅스 서버의 경우 top 명령어로 마크베이스 프로세스가 사용중인 메모리 총량을 확인할 수 있습니다. 각 항목별 세부적인 메모리 사용량은 V$SYSMEM 테이블을 통해 확인합니다. 아래는 현재 사용량이 많은 항목 10개를 기가바이트(GB) 단위로 정렬되어 표시된 모습입니다. SM_STC_INDEX 작업에 6.68GB 의 메모리를 사용하고 있다는 것을 알 수 있다.
Mach> select name, usage/1024/1024/1024 as usage_GB from v$sysmem order by usage desc limit 10; name usage_GB ------------------------------------------------------------------------- SM_STC_INDEX 6.68389 SM_STC_TABLE 2.72271 SM_SDD_DISK_BUFFER 0.146498 SM_SDC_CP_PAGE_APPEND 0.00281342 SM_SDD_TBS_AIO 0.00158327 PM_RBTREE 0.00110303 QP_META 0.000842227 QP_STATEMENT 0.00056196 SM_SVRC_TABLE_PAGE 0.000366271 SM_SCC_TABLE 0.000335693
4. 디스크(Disk)
리눅스 서버의 경우 du -sh $MACHBASE_HOME/dbs 명령어로 마크베이스 전체의 디스크 사용량을 확인할 수 있습니다. 구체적인 테이블과 인덱스의 디스크 사용량은 V$STORAGE 테이블을 통해 확인가능합니다.
- Tag Table : DC_KV_TABLE_FILE_SIZE 값으로 데이터와 인덱스 전체 사용량 확인
- Log Table : DC_TABLE_FILE_SIZE 값으로 전체 데이터 사용량을, DC_INDEX_FILE_SIZE 값으로 전체 인덱스 사용량을 확인
Mach> select * from v$storage; DC_TABLE_FILE_SIZE DC_INDEX_FILE_SIZE DC_TABLESPACE_DWFILE_SIZE DC_KV_TABLE_FILE_SIZE ----------------------------------------------------------------------------------------------- 2291313152 2648243296 67108864 43809498573
Log Table의 경우 각 테이블별 사용량을 확인할 수 있습니다. 아래와 같이 M$SYS_TABLES와 V$STORAGE_DC_TABLE_COLUMNS 테이블의 DISK_FILE_SIZE 칼럼을 통해 테이블별 데이터 파일 사용량을 확인합니다.
Mach> SELECT a.name, sum(b.disk_file_size) FROM M$SYS_TABLES a, V$STORAGE_DC_TABLE_COLUMNS b WHERE a.id = b.table_id GROUP BY a.name; name sum(b.disk_file_size) ------------------------------------------------------------------------------------------------- SYSLOG_TABLE 2277318144 WEBLOG_TABLE 13995008
테이블별 인덱스 파일 사용량은 M$SYS_TABLES와 V$STORAGE_DC_TABLE_INDEXES 테이블의 DISK_FILE_SIZE 칼럼을 확인해야 합니다.
Mach> SELECT a.name, sum(b.disk_file_size) FROM M$SYS_TABLES a, V$STORAGE_DC_TABLE_INDEXES b WHERE a.id = b.table_id GROUP BY a.name; name sum(b.disk_file_size) ------------------------------------------------------------------------------------------------- SYSLOG_TABLE 2624541184 WEBLOG_TABLE 23702112
Volatile/Lookup Table은 디스크가 아닌 메모리에 데이터를 저장하기 때문에, V$STORAGE_DC_VOLATILE_TABLE에서 사용량을 확인하셔야 합니다. 아래 결과 예시에서 MAX_MEM_SIZE는 machbase.conf 파일에서 설정된 최대 사용량이고 CUR_MEM_SIZE 는 현재 사용량을 의미합니다.
Mach> select * from v$storage_dc_volatile_table; MAX_MEM_SIZE CUR_MEM_SIZE --------------------------------------------------------- 2147483648 628360
5. 마치며
지금까지 마크베이스를 운영하면서 세션,쿼리문,메모리,디스크 사용량에 대한 정보를 확인하는 방법에 대해 알려드렸습니다. 조금더 자세한 내용은 다음의 메뉴얼 페이지를 확인해 주세요.