4. 4
- Internal Use Only -
데이터베이스 모니터링 소개 및 필요성
데이터베이스 모니터링이란?
왜 데이터베이스 모니터링이 요구되어지는가?
•특정대상(서비스, 정책, 물리적 장치 등)에 대해 감시, 형태분석, 시정활동을 하는 행위
•리포팅 모니터를 바라보고 있는 행위
•시스템 진단, 문제해결
•물리적 장비, 특정 서비스 리포팅
•오류감지
•문제에 대한 경고
5. 5
- Internal Use Only -
데이터베이스 모니터링 기능
모니터링의 기능 모니터링을 이용해 시스템의 상태를 캡처하여 통계를 작성/ 분석할 수 있으며 오류를 감지하거나 담당자에게 통보할 수 있음
시스템 상태 캡처 통계
•문제해결, 진단에 유용
•그래프 / 차트를 이용하기에 매우 편리함
•놓치고 넘어갈 수 있는 부분들에 대한 리포트
오류감지
•시스템 상태 모니터
•문제에 대한 경고
6. 6
- Internal Use Only -
데이터베이스 모니터링 툴의 종류
상용 제품
오픈소스 제품군
데이터베이스 모니터링 툴제품군 오픈소스 툴들은 100% 무료이며 수 많은 플러그인 기능 및 충분한 기능을 제공
7. 7
- Internal Use Only -
데이터베이스 모니터링 툴 제품군 비교
Mysql Enterprise Monitor
Nagios
Cacti
Zabbix
라이선스 구분
licence
subscribtion
free
free
licence
free
기술지원업체
mysql
nagios
자체
자체
zabbix
지원 제품
Mysql Enterprise Monitoring
Nagios XI
Cacti
준비 중
추가
구성 제품
-
-
Many plug-ins
Many plug-ins
준비 중
장비소요
1대
1대
1대
준비 중
특징
깔끔한 UI
다른 툴에서는 제공하지 않는
Adviser, query analyzer 제공
user custom 가능
무료 Eazy Install / Control / use
준비 중 오픈소스 데이터베이스 클러스터 제품군 비교표.
8. 8
- Internal Use Only -
MySQL Enterprise Monitor MySQL 네트워크 모니터링 및 어드바이저 서비스는 여러분의 MySQL 서버를 지속적으로 모니터 하여 잠재적인 문제가 시스템에 영향을 주기 전에 여러분에게 경고를 해 줍니다 특징
MySQL 서버의 상태를 자세히 보여 줌
여러 대의 MySQL 서버를 마치 하나의 그룹처럼 관리함
MySQL을 설치한 개발자의 어드바이저 룰을 65까지 구동가능
문제 영역을 구분해 줌으로써 보다 빨리 문제를 해결
전문가의 지원으로 MySQL의 보안, 성능 리플리케이션 문제 빠르게 개선
자체 개발 스크립트를 작성, 디버깅, 그리고 관리시간 감소효과
특정 MySQL 환경에 맞게 커스텀 룰을 구축
정기적으로 새로운 룰을 받으실 수가 있습니다.
9. 9
- Internal Use Only -
MySQL Enterprise Monitor architecture
Database server
Monitor agent
수집
결과
MySQL Monitor
Database server
Monitor agent
수집
결과
Database server
Monitor agent
수집
결과
수집 결과
수집 결과
수집 결과
10. 10
- Internal Use Only -
MySQL Enterprise Monitor 장점 및 단점 장점
MySQL Adviser 제공
MySQL query analyzer 제공 단점
Monitoring 제품만 따로 구입 불가
Galera Cluster 미지원
11. 11
- Internal Use Only -
Cacti 소개 오픈 소스에 대한 프런트 엔드 응용 프로그램으로 디자인 된 오픈 소스, 웹 기반 네트워크 모니터링 및 그래프 도구입니다 특징
무제한 그래프 항목
자동 패딩 지원 그래프
그래프 데이터 조작
유연한 데이터 소스
데이터 표준이 아닌 시간 범위에서 수집
사용자 정의 데이터 수집 스크립트
SNMP 지원 내장
그래프 템플릿
데이터 소스 템플릿
호스트 템플릿
그래프 데이터의 트리, 목록 및 미리보기
사용자 기반 관리 및 보안
12. 12
- Internal Use Only -
Cacti 소개 사용자 임의로 구성 가능한 View 목록과 그래프 구성
15. 15
- Internal Use Only -
모니터링 서버
snmp
Cacti 활용
원격지의 서버들도 한 곳에서 관리/모니터링 가능
16. 16
- Internal Use Only -
Nagios 시스템 및 네트워크 모니터링 프로그램, 지정한 호스트와 서비스를 관찰하고 장애 발생/복구되었을 때 경보를 발령. 특징
네트워크 서비스 모니터링(SMTP, POP3, HTTP, NNTP, PING, 등)
호스트 자원 모니터링(프로세서 부하, 디스크 사용량, 등)
자신들의 서비스 체크할 플러그인을 쉽게 개발할 수 있도록한 간단한 플러그인 디자인
병렬화된 서비스 체크
다운된 호스트와 통신되지 않는 호스트의 탐지와 구분을 가능하게 하는 트리구조의 네트워크 호스트 구조정의 기능
서비스 또는 호스트의 문제가 발생하거나 해결되었을 때 통보(이메일, SMS, 사용자정의 방법)
서비스 또는 호스트 이벤트의 사전 문제 해결시 실행될 이벤트 핸들러 정의기능
자동 로그 파일 순환
모니터링 호스트 이중화 지원
현재 네트워크 상태, 통보와 문제발생 이력, 로그파일등을 보기 위한 선택적 웹 인터페이스
18. 18
- Internal Use Only -
MySQLReport mysqlreport는 MySQL 서버의 STATUS 값들을 관리자가 보기 편한 형식으로 리포팅 해주는 perl 스크립트
1.download
2.install perl DBI/DBD::mysql
wget "http://hackmysql.com/scripts/mysqlreport"
prompt> perl -MDBI -e 'print "$DBI::VERSIONn"' prompt> perl -e "use DBI"
아래의 명령어를 이용하여 설치 확인 :
결과 :
cpan> install DBI
prompt> sudo cpan install DBI
설치 명령어 :
19. 19
- Internal Use Only -
MySQLReport
2.install perl DBD::mysql
prompt> perl -MDBD::mysql -e'print "$DBD::mysql::VERSIONn"'
prompt> perl -e "use DBD::mysql"
아래의 명령어를 이용하여 설치 확인 :
결과 :
cpan> install DBD::mysql prompt> sudo cpan install DBD::mysql
설치 명령어 :
mysql_config 를 찾지못한다고 오류가나면 $PATH를 추가하고 다시 한다.
DB 테스트하는 과정에서 오류가 난다면
•$HOME/.cpan/ 디렉토리의 설치문서를 본다.
•$ vi /root/.cpan/build/DBD-mysql-4.008/INSTALL.html
20. 20
- Internal Use Only -
MySQLReport mysqlreport는 MySQL 서버의 STATUS 값들을 관리자가 보기 편한 형식으로 리포팅 해주는 perl 스크립트
__ Key _______________________________________________ Buffer used 54.59M of 384.00M %Used: 14.22 Current 95.05M %Usage: 24.75 Write ratio 0.723 Read ratio 0.000 __ Questions _________________________________________ Total 407.16M 94.8/s Com_ 386.15M 89.9/s %Total: 94.84 DMS 37.63M 8.8/s 9.24 -Unknown 37.61M 8.8/s 9.24 COM_QUIT 21.00M 4.9/s 5.16 QC Hits 107 0.0/s 0.00 Slow 6.89k 0.0/s 0.00 %DMS: 0.02 DMS 37.63M 8.8/s 9.24 SELECT 36.57M 8.5/s 8.98 97.18 INSERT 1.06M 0.2/s 0.26 2.81 UPDATE 3.50k 0.0/s 0.00 0.01 DELETE 27 0.0/s 0.00 0.00 REPLACE 0 0/s 0.00 0.00 Com_ 386.15M 89.9/s 94.84 stmt_prepar 171.28M 39.9/s 42.07 stmt_close 171.27M 39.9/s 42.06 stmt_execut 37.61M 8.8/s 9.24
__ SELECT and Sort _____________________________________ Scan 28.49M 6.6/s %SELECT: 77.90 Range 9 0.0/s 0.00 Full join 0 0/s 0.00 Range check 0 0/s 0.00 Full rng join 0 0/s 0.00 Sort scan 17 0.0/s Sort range 0 0/s Sort mrg pass 10 0.0/s __ Query Cache _________________________________________ Memory usage 8.58k of 32.00M %Used: 0.03 Block Fragmnt 100.00% Hits 107 0.0/s Inserts 5.62k 0.0/s Insrt:Prune 5.62k:1 0.0/s Hit:Insert 0.02:1 __ Table Locks _________________________________________ Waited 20.69k 0.0/s %Total: 0.01 Immediate 175.76M 40.9/s __ Tables _____________________________________________ Open 171 of 512 %Cache: 33.40 Opened 654 0.0/s
21. 21
- Internal Use Only -
MySQL WorkBench MySQL의 워크 벤치는 데이터베이스 설계자, 개발자, DBA를위한 통합 비주얼 도구입니다. MySQL의 워크 벤치는 데이터 모델링, SQL 개발 및 서버 구성, 사용자 관리, 백업 및 훨씬 더 포괄적 인 관리 도구를 제공합니다. MySQL의 워크 벤치 윈도우, 리눅스 및 Mac OS X에서 사용할 수 있습니다
26. 26
- Internal Use Only -
Query Profiling MySQL 5.1 버전 이후 내장 기능
현재 세션 과정 동안 실행 문에 대한 리소스 사용을 나타냄
프로파일링 과정
> set profiling=1;
프로파일링을 설정해준다.
> Select * from store;
> Show profiles;
분석할 쿼리
분석 시작
Query ID
27. 27
- Internal Use Only -
Query Profiling
> show profile for query 1
쿼리별 상세내역
프로파일링 과정
Query ID
해당 쿼리의 실행 내역
29. 29
- Internal Use Only -
Explain 활용법 MySQL이 SELECT 명령문을 실행하는 방법에 대한 정보를 얻기 위한 수단
MySQL은 쿼리 실행 플랜(query execution plan) 정보를 옵티마이저 (optimizer)에서 가져 와서 출력 한다. 즉, MySQL은 테이블들이 어떤 순서로 조인(join)하는지에 대한 정보를 포함해서, SELECT를 처리하는 방법에 대해서 알려 준다.
> Explain select * from store
id
•SELECT 번호, 쿼리내의 SELECT 의 구분번호
Select type
•SIMPLE: 단순 SELECT (UNION 이나 서브쿼리를 사용하지 않음)
•PRIMARY: 가장 외곽의 SELECT
•UNION: UNION 에서의 두번째 혹은 나중에 따라오는 SELECT
•DEPENDENT UNION: UNION 에서의 두번째 혹은 나중에 따라오는 SELECT, 외곽쿼리에 의존적
•UNION RESULT: UNION 의 결과물
•SUBQUERY: 서브쿼리의 첫번째 SELECT
•DEPENDENT SUBQUERY: 서브쿼리의 첫번째 SELECT, 외곽쿼리에 의존적
•DERIVED: SELECT 로 추출된 테이블 (FROM 절 내부의 서브쿼리)
30. 30
- Internal Use Only -
Explain 활용법
> Explain select * from store
type
System
•테이블에 단 하나의 행만 존재(시스템 테이블). const join 의 특수한 경우
const
•많아야 하나의 매치되는 행만 존재할 때
•PRIMARY KEY 나 UNIQUE index 를 상수와 비교할 때
•각 컬럼값은 나머지 연산에서 상수로 간주, 처음 한번만 읽어들이면 되므로 매우 빠름
eq_ref
•조인수행을 위해 각 테이블에서 하나씩의 행만이 읽히는 경우
•조인연산에 PRIMARY KEY 나 UNIQUE index 인덱스가 사용되는 경우
•인덱스된 컬럼이 = 연산에 사용되는 경우
ref
•이 전 테이블과의 조인에 사용될 매치되는 인덱스의 모든행이 이 테이블에서 읽혀질 때
•leftmost prefix 키만을 사용하거나 사용된 키가 PRIMARY KEY 나 UNIQUE 가 아닐때
•(즉 키값으로 단일행을 추출할수 없을때)
•사용된 키가 적은수의 행과 매치되면 이것은 적절한 조인 타입
•ref 는 인덱스된 컬럼과 = 연산에서 사용됨
ref_or_null
•ref 와 같지만 NULL 값을 포함하는 행에대한 검색이 수반될 때
•서브쿼리 처리에서 대개 사용됨
•index_merge
•인 덱스 병합 최적화가 적용되는 조인 타입
•이 경우, key 컬럼은 사용된 인덱스의 리스트를 나타내며
•key_len 컬럼은 사용된 인덱스중 가장 긴 key 명을 나타냄
31. 31
- Internal Use Only -
Explain 활용법
> Explain select * from store
index_merge
•인 덱스 병합 최적화가 적용되는 조인 타입
•이 경우, key 컬럼은 사용된 인덱스의 리스트를 나타내며
•key_len 컬럼은 사용된 인덱스중 가장 긴 key 명을 나타냄
unique_subquery
•몇몇 IN 서브쿼리 처리에서 ref 타입대신 사용됨
•unique_subquery 는 성능향상을 위해 서브쿼리를 단순 index 검색 함수로 대체함
index_subquery
•unique_subquery 와 마찬가지로 IN 서브쿼리를 대체
•단, 서브쿼리에서 non-unique 인덱스가 사용될때 동작 함
range
•인 덱스를 사용하여 주어진 범위 내의 행들만 추출
•key 컬럼: 사용된 인덱스
•key_len: 사용된 가장 긴 key 부분
•ref 컬럼: 이 타입의 조인에서 NULL
•키 컬럼이 상수와 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN 또는 IN 연산에 사용될때 적용됨
index
•인덱스가 스캔된다는걸 제외하면 ALL 과 같음
•일반적으로 인덱스 파일이 데이타파일보다 작기 때문에 ALL 보다는 빠름
•MySQL 은 쿼리에서 단일 인덱스의 일부분인 컬럼을 사용할때 이 조인타입을 적용함
ALL
•이전 테이블과의 조인을 위해 풀스캔
•(조인에 쓰인) 첫번째 테이블이 고정이 아니라면 비효율적
•대부분의 경우에 아주 느린 성능
32. 32
- Internal Use Only -
Explain 활용법
> Explain select * from store
possible_keys
•MySQL 이 해당 테이블의 검색에 사용할수 있는 인덱스들
•possible_keys 에 나타난 인덱스들이 결과에 나타난 테이블 순서에서 실제 사용할 수 없을수도 있음
> Explain select * from store
key
•MySQL 이 실제 사용한 key(index)
33. 33
- Internal Use Only -
Explain 활용법
> Explain select * from store
key_len
•MySQL 이 사용한 인덱스의 길이, key 컬럼값이 NULL 이면 이값도 NULL
•key_len 값으로 MySQL 이 실제 복수컬럼 키중 얼마나 많은 부분을 사용할 것인지 알 수 있음
> Explain select * from store
ref
•행을 추출하는데 키와 함께 사용된 컬럼이나 상수값
34. 34
- Internal Use Only -
Explain 활용법
> Explain select * from store
rows
•쿼리 수행에서 MySQL 이 예상하는 검색해야 할 행수
> Explain select * from store
extra
•MySQL 이 쿼리를 해석한 추가적인 정보를 나타냄 Distinct : MySQL 이 매치되는 첫행을 찾는 즉시 검색을 중단한다는 의미 Not exists : MySQL 이 LEFT JOIN 을 수행함에 매치되는 한 행을 찾으면 더이상 매치되는 행을 검색x range checked for each record (index map: #) : MySQL 이 사용할 좋은 인덱스가 없음 의미 Using filesort : MySQL 이 정렬을 위해 추가적인 과정을 필요로 함 Using index : 컬럼정보가 실제 테이블이 아닌 인덱스트리에서 추출, 쿼리에서 단일 인덱스된 컬럼들만을 사용하는 경우 Using temporary : MySQL 이 결과의 재사용을 위해 임시테이블을 사용, 쿼리 내에 GROUP BY 와 ORDER BY 절이 각기 다른 컬럼을 사용할 때 발생 Using where : WHERE 절이 다음 조인에 사용될 행이나 클라이언트에게 돌려질 행을 제한하는 경우 테이블의 모든 행을 검사할 의도가 아니면 ALL 이나 index 라면 쿼리사용이 잘못된 것임 Using sort_union(…) , Using union(…) , Using intersect(…) Using index for group-by : Using index 와 접근방식이 같으며, 추가적인 디스크 접근 없이 GROUP BY 나 DICTINCT 쿼리에 사용된 모든 컬럼에 대한 인덱스를 찾았음을 의미
35. Error log 및 slow query 활용법
Certified Partner by
36. 36
- Internal Use Only -
Error log 활용법
2013-09-11 03:07:51 51331 [Warning] 'user' entry 'root@eusamsdb01' ignored in --skip-name-resolve mode. 2013-09-11 03:07:51 51331 [Warning] 'proxies_priv' entry '@ root@eusamsdb01' ignored in --skip-name-resolve mode. 2013-09-11 03:11:02 51331 [ERROR] Event Scheduler: [scop_m@10.8.20.103][scop_fm.EFM_ICDT_EVNT_STAT_EVNT] Lock wait timeout exceeded; try restarting transaction 2013-09-11 03:11:02 51331 [Note] Event Scheduler: [scop_m@10.8.20.103].[scop_fm.EFM_ICDT_EVNT_STAT_EVNT] event execution failed. 2013-09-11 04:11:02 51331 [ERROR] Event Scheduler: [scop_m@10.8.20.103][scop_fm.EFM_ICDT_EVNT_STAT_EVNT] Lock wait timeout exceeded; try restarting transaction 2013-09-11 04:11:02 51331 [Note] Event Scheduler: [scop_m@10.8.20.103].[scop_fm.EFM_ICDT_EVNT_STAT_EVNT] event execution failed. 2013-09-11 05:11:02 51331 [ERROR] Event Scheduler: [scop_m@10.8.20.103][scop_fm.EFM_ICDT_EVNT_STAT_EVNT] Lock wait timeout exceeded; try restarting transaction 2013-09-11 05:11:02 51331 [Note] Event Scheduler: [scop_m@10.8.20.103].[scop_fm.EFM_ICDT_EVNT_STAT_EVNT] event execution failed. 2013-09-11 06:11:02 51331 [ERROR] Event Scheduler: [scop_m@10.8.20.103][scop_fm.EFM_ICDT_EVNT_STAT_EVNT] Lock wait timeout exceeded; try restarting transaction 2013-09-11 06:11:02 51331 [Note] Event Scheduler: [scop_m@10.8.20.103].[scop_fm.EFM_ICDT_EVNT_STAT_EVNT] event execution failed. 07:09:52 UTC - mysqld got signal 11 ; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. key_buffer_size=16777216 read_buffer_size=8388608 max_used_connections=234 max_threads=500 thread_count=189 connection_count=183 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 6167145 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. Thread pointer: 0xcf984700 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong...
Error log example
Error 상황일 때 시스템 정보
37. 37
- Internal Use Only -
Error log 활용법
stack_bottom = 2b45c45f8def thread_stack 0x40000
/app/mysql/bin/mysqld(my_print_stacktrace+0x35)[0x925a65]
/app/mysql/bin/mysqld(handle_fatal_signal+0x3e8)[0x69b1b8]
/lib64/libpthread.so.0[0x3db560f500]
/app/mysql/bin/mysqld(_ZNK12Field_string4typeEv+0x19)[0x809679]
/app/mysql/bin/mysqld(_Z10field_convP5FieldS0_+0x74)[0x810894]
/app/mysql/bin/mysqld(_ZN10Item_field13save_in_fieldEP5Fieldb+0x44)[0x5c7464]
/app/mysql/bin/mysqld(_Z12sp_eval_exprP3THDP5FieldPP4Item+0x88)[0x69baf8]
/app/mysql/bin/mysqld(_ZN11sp_rcontext12set_variableEP3THDP5FieldPP4Item+0x1a)[0x6a60ca]
/app/mysql/bin/mysqld(_ZN9sp_cursor24Select_fetch_into_spvars9send_dataER4ListI4ItemE+0x60)[0x6a6150]
/app/mysql/bin/mysqld(_ZN19Materialized_cursor5fetchEm+0x4d)[0x6e8fbd]
/app/mysql/bin/mysqld(_ZN9sp_cursor5fetchEP3THDP4ListI11sp_variableE+0xd0)[0x6a6b70]
/app/mysql/bin/mysqld(_ZN15sp_instr_cfetch7executeEP3THDPj+0x34)[0x85c184]
/app/mysql/bin/mysqld(_ZN7sp_head7executeEP3THDb+0x4bd)[0x6a0f4d]
/app/mysql/bin/mysqld(_ZN7sp_head17execute_procedureEP3THDP4ListI4ItemE+0x683)[0x6a1a93]
/app/mysql/bin/mysqld(_Z21mysql_execute_commandP3THD+0x44b5)[0x71a045]
/app/mysql/bin/mysqld(_ZN13sp_instr_stmt9exec_coreEP3THDPj+0x60)[0x85c2c0]
/app/mysql/bin/mysqld(_ZN12sp_lex_instr23reset_lex_and_exec_coreEP3THDPjb+0x234)[0x85c874]
/app/mysql/bin/mysqld(_ZN12sp_lex_instr29validate_lex_and_execute_coreEP3THDPjb+0x99)[0x85e0c9]
/app/mysql/bin/mysqld(_ZN13sp_instr_stmt7executeEP3THDPj+0x182)[0x85e3f2]
/app/mysql/bin/mysqld(_ZN7sp_head7executeEP3THDb+0x4bd)[0x6a0f4d]
/app/mysql/bin/mysqld(_ZN7sp_head17execute_procedureEP3THDP4ListI4ItemE+0x683)[0x6a1a93]
/app/mysql/bin/mysqld(_Z21mysql_execute_commandP3THD+0x44b5)[0x71a045]
/app/mysql/bin/mysqld(_ZN13sp_instr_stmt9exec_coreEP3THDPj+0x60)[0x85c2c0]
/app/mysql/bin/mysqld(_ZN12sp_lex_instr23reset_lex_and_exec_coreEP3THDPjb+0x234)[0x85c874]
/app/mysql/bin/mysqld(_ZN12sp_lex_instr29validate_lex_and_execute_coreEP3THDPjb+0x99)[0x85e0c9]
/app/mysql/bin/mysqld(_ZN13sp_instr_stmt7executeEP3THDPj+0x182)[0x85e3f2]
/app/mysql/bin/mysqld(_ZN7sp_head7executeEP3THDb+0x4bd)[0x6a0f4d]
/app/mysql/bin/mysqld(_ZN7sp_head17execute_procedureEP3THDP4ListI4ItemE+0x683)[0x6a1a93]
/app/mysql/bin/mysqld(_ZN14Event_job_data7executeEP3THDb+0x5cc)[0x7c254c]
/app/mysql/bin/mysqld(_ZN19Event_worker_thread3runEP3THDP28Event_queue_element_for_exec+0xe1)[0x8ac111]
/app/mysql/bin/mysqld(event_worker_thread+0x54)[0x8ac1d4]
/app/mysql/bin/mysqld(pfs_spawn_thread+0x13b)[0xae995b]
/lib64/libpthread.so.0[0x3db5607851]
/lib64/libc.so.6(clone+0x6d)[0x3db52e767d]
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (d15f6010): CALL scop_pm.PPM_HDLR_05_DATA(DATE_FORMAT(DATE_SUB(_wrk_dt, INTERVAL 5 MINUTE), '%Y%m%d%H%i%s'),_evnt_id,'2')
Connection ID (thread ID): 10322207
Status: NOT_KILLED
에러 발생 원인 query
39. 39
- Internal Use Only -
Core file 소개
core file
•MySQL군 데이터베이스에서 공통적으로 사용 가능
•Application level에서 OS를 통해 기록
•메모리에 적재되어 처리되던 내용을 기록
•일부 시스템에서는 설정이 필요 core file은 데이터베이스가 비정상 종료 시 남는 dying message
Memory
Failover flow
40. 40
- Internal Use Only -
Core file 설정 방법
설정 순서 Core file 을 작성하기 위해서 OS와 DB의 옵션설정이 필요
1. OS core file size 설정
2. OS 커널 파라메터 설정
3. MySQL core-file 옵션 설정 및 core-file-size 옵션 설정
4. MySQL 재 기동
41. 41
- Internal Use Only -
Core file 설정 방법
1. OS core file size 설정
OS의 core file size 확인
core file size 가 설정이 안되어 있다면
특정 사이즈 또는 unlimited 로 설정
현재 core file size 가 0
OS core file size 옵션값 확인 prompt> ulimit -a
42. 42
- Internal Use Only -
Core file 설정 방법
1. OS core file size 설정
OS core file size 옵션 설정 prompt> ulimit -c 2000000 또는 prompt > ulimit –c unlimit
prompt> sudo /sbin/sysctl -w kernel.core_pattern="core“
prompt> sudo /sbin/sysctl -w fs.suid_dumpable=1
2. OS 커널 파라메터 설정
설정값 확인
43. 43
- Internal Use Only -
Core file 설정 방법
3. MySQL core-file 옵션 설정 및 core-file-size 옵션 설정
MySQL cnf 파일에서 옵션 설정
core-file 옵션 설정
core-file-size 옵션 설정
4. 설정이 완료되었으면 MySQL 을 재 시작
44. 44
- Internal Use Only -
3
2
1
Core file 장애상황 테스트
core-file dump 작성을 위한 MySQL 장애상황 테스트
강제적 장애상황 유발
MySQL error log 확인
core-file 확인
45. 45
- Internal Use Only -
Core file 장애상황 테스트
MySQL error log file 살펴보기
Error signal
core-file 작성
MySQL 재 시작 MySQL error log file 에 core-file 작성 기록이 남아있음
46. 46
- Internal Use Only -
MySQL Upgrade mysql_upgrade는 mysql 에서 기본제공되는 유틸리티
1.mysqld daemon start
2.update
3.check database
4.mysqld restart
upgrade 순서
prompt> mysql_upgrade --help
47. 47
- Internal Use Only -
MySQL Upgrade
2. upgrade
prompt> mysql_upgrade -u user -p password --datadir=/user data directory...
48. 48
- Internal Use Only -
MySQL Upgrade
3. Check database
prompt> mysql_check --check-upgrade --all-database --auto-repair
50. 50
- Internal Use Only -
gdb 를 이용한 dump 파일 분석
gdb를 이용하여 core-file 을 분석
gdb 에 실행파일과 core-file 을 입력
51. 51
- Internal Use Only -
gdb 를 이용한 dump 파일 분석
gdb를 이용하여 core-file 을 분석
bt 명령어를 이용하여 crash 가 발생된 지점으로 이동
signal 발생 확인
52. 52
- Internal Use Only -
gdb 를 이용한 dump 파일 분석
gdb를 이용하여 core-file 을 분석
backtrace full 명령어를 이용하여
crash 가 발생된 지점을 한번에 확인할 수 있다
53. 53
- Internal Use Only -
첨부
테스트 결과
테스트 결과를 보시면 OS 및 MySQL 에서 설정한 core file size 가 정상적으로 적용이 안됨
OS 및 MySQL core file size 를 변경해 가며 테스트 해 보았으나 역시나 적용이 안됨
innodb_buffer_pool_size 1G 지정 후 코어파일 작성 테스트 결과 코어파일 사이즈 2.4G
innodb_buffer_pool_size 8G 지정 후 코어파일 작성 테스트 결과 코어파일 사이즈 10G
결과적으로 core file size 옵션값들의 제한이 현재로써는 무의미
MySQL이 사용하는 메모리 량에 따라서 사이즈가 결정
core file 을 작성을 위해선 서버의 물리적인 메모리 만큼의 여유 DISK 공간이 필요
54. 54
- Internal Use Only -
OPEN
SHARE
CONTRIBUTE
ADOPT
REUSE