2009년 12월 27일 일요일

MySQL - 모니터링7

Linux커널의 I/O스케줄러 변경

커널2.6에서는 다음처럼 I/O스케줄러를 변경할 수 있다.

#I/O스케줄러의 변경
root@shell# echo "anticipatory" > /sys/block/sda/queue/scheduler

하드디스크단위로 지정한다.
하드디스크의 인식명에 따라서 위 예의 sda부분이 바뀌게 된다.
또 boot할 때 커널의 파라미터에 디폴트 I/O스케줄러를 부여하는 것이 가능하다.

elevator=deadline

/sys/block/디스크명/queue/iosched/ 아래의 파일로 I/O스케줄러의 파라미터를 변경할 수 있다.

I/O스케줄러에는 다음과 같은 것이 있다. 커널의 config시에 디폴트를 지정할 수 있다.

  • Anticipatory
  • Deadline
  • CTQ
  • NOOP
커널의 config의 변수, CONFIG_DEFAULT_IOSCHED이던지 make config의 메뉴의
「Block layer」→ 「IO Schedulers」→ 「Default I/O scheduler」에 값을 부여한다.




2009년 12월 21일 월요일

MySQL - 모니터링6

운영체제 툴

MySQL본체이외에도 운영체제의 상태를 알고 싶을 때가 있을 것이다.
여기에서는 Linux를 기준으로 몇가지 툴과 수법을 소개해보자.

iostat

iostat는 디스크 드라이브 단위로 I/O통계정보를 얻을 수 있는 명령어이다. 구문은 다음과 같다.

iostat [옵션] [간격 [횟수] ]

간격에 초수를 지정하면 지정 초수마다 횟수에 지정된 횟수만큼 iostat를 실행하고 끝낸다.
이 때 최초의 레포트는 지금까지의 누적정보를 내고, 두번째부터는 전 레포트 보고시점부터의 통계를 나타낸다. 횟수를 지정하지 않으면 영원히 레포트를 출력한다 .


vmstat

vmstat는 VM의 통계정보를 얻을 수 있는 명령어이다. 구문은 다음과 같다.

vmstat [옵션] [간격 [횟수] ]

간격에 초수를 지정하면 초수마다 횟수에 지정된 횟수만큼 vmstat를 실행하고 끝낸다.
횟수를 지정하지 않으면 영원히 레포트를 출력한다


Linux프로파일러( oprofile)

어플리케이션 어느 부분이 어느 정도의 처리를 하고 있는지등의 정보를 얻을 수 있다.
oprofile에서 프로파일링을 하기 위해서는 커널이 oprofile을 지원하고 있을 필요가 있다.
커널의 config변수는 다음과 같다.

CONFIG_PROFILING  「y」
CONFIG_OPROFILE 「y」또는 「m」


커널의 config의 menu에서는 다음 항목을 유효로 해둔다.
Instrumentation Support -> Profiling support를 「y」
OProfile system profiling을 「y」또는 「m」

실제 조작은 다음과 같다.

oprofile실행예

opcontrol --shutdown <-- oprofile데몬 정지
opcontrol --reset <-- oprofile의 과거 데이터를 삭제
opcontrol --start <-- oprofile 데몬 기동

조사하고 싶은 명령어를 실행

opcontrol --shutdown <-- oprofile데몬 정지
opcontrol --save=test01 <-- 방금 취득한 데이터를 test01라는 이름으로 백업
opcontrol -1 session:test01 <-- test01의 레포트를 표시


oprofile의 데이터는 /var/lib/oprofile/에 기록된다.

2009년 12월 14일 월요일

MySQL - 모니터링5

옵티마이져의 동작을 확인(EXPLAIN SELECT)

EXPLAIN문으로 SELECT에 대한 옵티마이져의 정보를 아는 것이 가능하다.

구문은 다음과 같이 된다.

EXPLAIN [EXTENDED|PARTITIONS] SELECT문

EXPLAIN PARTITIONS는 파티셔닝된 테이블에 대한 쿼리를 검사한다.
EXPLAIN EXTENDED는 filtered정보가 추가적으로 얻을 수 있다. 또 계속해서 SHOW WARNINGS을 실행하면 컬럼명등 정보를 얻을 수 있다.

MySQL 5.1.12-beta에서 추가되었다.

mysql> explain select * from m_page where page_id > 5\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: m_page
type: ALL
possible_keys: PRIMARY
key: NULL
key_len: NULL
ref: NULL
rows: 120
Extra: Using where
1 row in set (0.00 sec)


각 컬럼의 의미는 다음과 같다.

  • id: 쿼리내의 SELECT순번
  • select_type: SIMPLE, PRIMARY, UNION, DEPENDENT UNION, UNION RESULT, SUBQUERY, DERIVED, DEPENDENT SUBQUERY, UNCACHEABLE SUBQUERY
  • table:대상이 되는 테이블
  • type: JOIN종류. system, const, eq_ref, ref, ref_or_null, index_merge, unique_subquery, index_subquery, range, index, ALL
  • possible_keys:어느 인덱스가 사용가능한지 나타냄. EXPLAIN에 표시되는 테이블 순서에 따라서 사용가능한 키가 바뀌는 경우가 있다. NULL이면 적절한 인덱스는 찾을 수 없었다는 것을 나타냄. 이 경우 퀄리 조건절의 기술을 수정할 것을 권함.
  • key: 사용하려고 결정된 키가 표시됨. NULL이면 인덱스는 사용되지 않고 있다는 것을 의미. MyISAM의 경우, ANALYZE TABLE문 실시로 개선되는 경우도 있음. 인덱스사용을 강제하는 문에는 다음과 같은 것이 있다. FORCE INdEX, USE INDEX, IGNORE INDEX
  • key_len: 사용하려고 결정된 키의 크기
  • ref: 어느 컬럼이나 정수가 인덱스하고 비교되는지를 나타냄.
  • filtered: MySQL 5.1.12-beta에서 추가되었다. 다음 관계가 있다. rows × filtered ÷100 = 전 테이블과 조인된 레코드수 . filtered는 조건에 따라서 취득되어야 하는 레코드가 레코드 전체의몇 %가 되는 지를 나타냄.
  • Extra:부가 설명이 제공됨. 어떤 처리를 수행하는지 나타냄. Distinct, Not exists, Range checked for each record(index map: N), Using filesort, Using index, Using temporary, Using where, Using sort_union(...), Using union(...), Using intersect(...), Using index for group-by, Using where with pushed condition





2009년 12월 2일 수요일

MySQL - 모니터링4

설정값을 알기(SHOW VARIABLES)

다음 문장과 명령어로 서버의 설정값( 변수값)을 확인할 수 있다.

mysql> SELECT * FROM information_schema.GLOBAL_VARIABLES;
mysql> SELECT * FROM information_schema.SESSION_VARIABLES;
mysql> SHOW VARIABLES;

shell$ mysqladmin variables

information_schema.GLOBAL_VARIABLES나 information_schema.SESSION_VARIABLES테이블은 Mysql 5.1.12-beta에서 추가되었다.

변수의 사용및 변수값의 변경(SET문, 옵션)에 대해서는 mysqld옵션과 서버변수를 참조하길 바란다.