카테고리 없음

MariaDB 5.5 Collecting Stats for Galera Cluster v1.1

Walking again 2013. 9. 24. 11:32

MariaDB 5.5 Collecting Stats for Galera Cluster v1.1

 

Date

Ver

Etc.

13.09.12

v1.1

Galera Cluster 추가

13.08.05

v1.0

 

 

 

 

 

 

1.    Collecting Stats

MariaDB Galera Cluster 에서 성능지표로 활용가능한 Table 은 다음과 같다.

 

다음의 모든 테이블은 information_schema Database 에 위치

l  GLOBAL_VARIABLES (wsrep_* 를 포함함)

l  GLOBAL_STATUS (wsrep_* 를 포함함)

l  PROCESSLIST

 

각각은 세션에서 다음과 같이 조회할 수 있다.

l  show variables like %키워드%

l  show status like %키워드%

l  show processlist

 

/하의 관계는 시스템 명령으로 조회하던 걸 쿼리를 통해 조회할 수 있는것에 불과하다.

 

각 테이블의 의미는 다음과 같다.

 

GLOBAL_VARIABLES

ð  말 그대로 GLOBAL VARIABLES 정보를 가지고 있다. GLOBAL VARIABLES 는 자주 변하는 값이 아니기에 자주 수집 할 필요는 없다.
다만 수집해 두면 특정 VARIABLES 이 언제 수정되었는지 조회가 가능하다는 점이 유용하다.

특히 메모리 VARIABLES 관련은 성능이나 시스템 안정성에 영향을 끼치는 부분으로 변경 추이를 추적할 필요가 있다.

 

wsrep_*  Galera Cluster 와 연관 된 Variables 이다.

 

GLOBAL_STATUS

GLOBAL (SYSTEM  LEVEL)  STATUS 정보를 가지고 있다. DB STARTUP 이래로 누적값을 가지고 있다.
의미있는 데이터를 뽑기 위해서는 시점과 시점의 비교변화추이가 필요하다.

wsrep_* 
 Galera Cluster 와 연관 된 status 이다.

PROCESSLIST

ð  PROCESS (THREAD) 정보를 가지고 있다. USER-LEVEL 의 작업 내용을 추적하기 위해서는 이 테이블의 데이터 저장이 필요하다.
INTERVAL 
도 짧게 가져갈수록 더 많은 유용한 정보를 수집할 수 있다.
다만 connection 이 많을수록 DB 저장공간 소모가 커지므로 적절한 타협점을 찾아야 한다.

 

앞서 언급한 3개의 테이블에 대해 각 노드가 각기 다른 값을 가진다는게 주요 포인트이다. (구성에따라 같을수도 있다.)

때문에 위 정보들을 캡쳐할 때 어느 위치에서 캡쳐했는지 추가적인 정보가 반드시 필요하다.

 

2.    Collecting method

크게 두 가지 수집 방법이 있다.

 

l  crontab

l  event

 

둘다 job 스케쥴링을 지원한다.

다만 event 의 경우는 event 를 컨트롤하는 요소가 시스템 변수 밖에 없다.

때문에 실행을 컨트롤하기 위해서는 위 변수를 변경하거나 해당 event 를 삭제해야 한다.

 

위와 같은 이유 때문에 crontab 에 등록해 수집하는게 편하다.

 

데이터를 저장할 테이블에 대해서는 어떤 노드에서 들어온 데이터인지 구분자가 필요하다.

 

3.    Practice

<DB, TABLE>

 

create database dbstat collate = euckr_bin;

 

create table dbstat.global_variables (

ctime datetime,

inst_id int(1),

v_name varchar(64),

v_value varchar(2048),

key (ctime));

 

create table dbstat.global_status (

ctime datetime,

inst_id  int(1),

v_name varchar(64),

v_value varchar(1024),

key(ctime));

 

 

create table dbstat.processlist (

ctime      datetime      ,

inst_id    int(1),

id         bigint(4)     ,

user       varchar(16)   ,

host       varchar(64)   ,

db         varchar(64)   ,

command    varchar(16)   ,

time       int(7)        ,

state      varchar(64)   ,

info       longtext      ,

time_ms    decimal(22,3) ,

stage      tinyint(2)    ,

max_stage  tinyint(2)    ,

progress   decimal(7,3)  ,

key (ctime));

 

<SCRIPT>

 

# col_variables.sh

 

#!/bin/bash

 

/data/galera/bin/mysql -u'monitor' -p'mon$xde1' -h'172.18.174.161' -P3307 dbstat << EOF

insert into dbstat.global_variables

select date_format(now(),'%y%m%d%h%i%s'), 1, variable_name, variable_value from information_schema.GLOBAL_VARIABLES

where variable_name not like '%ARIA%'

and variable_name not like '%RELAY_LOG%'

and variable_name not like '%REPLICATE%'

and variable_name not like '%SSL%'

order by 1 ;

 

COMMIT;

exit

EOF

 

 

# GLOBAL STATUS 수집 : 5분 주기

# col_status.sh

 

#!/bin/bash

 

/data/galera/bin/mysql -u'monitor' -p'mon$xde1' -h'172.18.174.161' -P3307 dbstat << EOF

insert into dbstat.global_status

select date_format(now(),'%Y%m%d%H%i%s'), 1, VARIABLE_NAME,VARIABLE_VALUE

from information_schema.GLOBAL_STATUS

where VARIABLE_NAME not like 'SSL_%'

and VARIABLE_NAME not like '%ARIA%'

and VARIABLE_NAME not in ('COMPRESSION','RPL_STATUS','SLAVE_RUNNING');

 

COMMIT;

exit

EOF

 

 

# PROCESSLIST 수집 : 5분 주기

# col_processlist.sh

 

#!/bin/bash

 

/data/galera/bin/mysql -u'monitor' -p'mon$xde1' -h'172.18.174.161' -P3307 dbstat << EOF

insert into dbstat.processlist

select date_format(now(),'%Y%m%d%H%i%s'), 1, id, user, host, db, command, time, state, info, time_ms, stage, max_stage, progress

from information_schema.PROCESSLIST;

 

COMMIT;

 

exit

EOF

 

<CRONTAB>

 

0 */6 * * * /bin/bash /data/galera/scripts/col_variables.sh 1>/dev/null 2>/dev/null

0 * * * * /bin/bash /data/galera/scripts/col_status.sh 1>/dev/null 2>/dev/null

*/5 * * * * /bin/bash /data/galera/scripts/col_processlist.sh 1>/dev/null 2>/dev/null

 

4.    IMPROVEMENTS