메뉴 건너뛰기

조회 수 8022 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. 동시 접속자수 설정

  1) 관련 값

    - max_used_connections : 동시 접속자 최대 건수 (읽기전용)

    - connections : 연결 시도된 총 수치

    - max_connections : 동시 접속자 수(최적화 시켜야 할 값)

    - max_connect_error : 지정된 이상의 연결장애가 발생하면 접속 호스트를 블락시킴.

    - max_user_connections = 0 (기본값(no limit) : 하나의 유저당 할당된 컨넥션 수)

  

  2) 최적화 방법

    - max_used_connections 값을 모니터링 해서 동시에 사용한 최대 사용자수를 확인한다.

  

  3) 최적화 결과

    - max_connections =

    - max_connect_error =

  

  4) 참고

    max_connect_error - DB 연결 에러가 지정한 값 이상으로 발생할 경우 접속하는 해당

    호스트(웹서버와 같은 PC에 있는 경우에는 웹서버를 가리킴)을 블락시켜버린다. 이 경우에는

    MYSQL 서버에서 mysqladmin flush-hosts 를 해줘야 하는데 실제 실행키져보면 블락이 바로

    해제되지 않는다. 이 값은 보통 max_connections 값과 동일하게 설정하거나 크게 설정한다.


2. 최대 open 테이블 수 설정

  1) 설명: 모든 쓰레드에서 오픈할 수 있는 DB테이블 총 개수

  2) 관련 값

    -max_connections

    -open_tables : 현재 오픈된 테이블 수(읽기전용)

    -open_files : 현재 오픈된 파일 수 (읽기전용)

    -opened_tables : 지금까지 오픈된 페이블 수 (읽기전용)

    -table_cache = 350 (기본값)

    -open_files_limit = 0 (기본값: max_connections * 5 혹은 max_connections + table_cache*2)

  3) 최적화 방법

    -table_cache -

      방법1: opened_tables 을 모니터링해서 이 값이 크면 table_cache값을 증가시킬 필요가 있다.

      방법2: open_table 값을 체크함으로서 테이블캐쉬값을 증가시키는것이 필요한 지 체크할 수 있다.

      보통 이 값을 max_connections 의 1.5배 정도 크기로 설정하는 것이 좋다고 한다.

  3) 최적화 결과

    - table_cache =


3. timeout 시간 설정

  1) 설명: 각종 실행 초과 값을 지정한다.

  2) 관련 값

    - max_execution_time = 2400 (php.ini파일 , php스크립트 최대 실행시간)

    - mysql.connect_timeout = 10 (php.ini파일 , db연결 타임아웃 시간)

    - connect_timeout = 5 (초과하면 db접속에러가 남, 에러발생은 aborted_connections 에 기록됨)

    - wait_timeout : 1800 (쿼리실행 타임아웃 값. mysql 접속해제시 접속 링크가 컨넥션 풀에

      계속 남아있도록 하는 것을 방지하기 위해서 설정하는 값이다. 하지만 실제로는 접속해제가 되지

      않고 계속 메모리에 남아있는다. 참고로 이 값은 php.ini에서 mysql.allow_persistent 값이 true로

      설정되어 있는 경우에만 유효하면 에러발생은 aborted_clients 에 기록된다. 실제로 해제되지 않기

      때문에 의미가 없다.)


  3) 최적화 방법

    - 웹서버와 DB서버가 같이 PC에 있는 경우에는 영구적인 접속이 비영구적인 접속에 비해 어떠한

      기능적인 향상을 주지 못할 수 있으며, 접속자 수가 많지 않은 되도 불구하고

      " Too many connections " 오류를 발생할 수 있기 때문에

      php에서 영구적인 접속을 꺼두는 것이 좋다.

  4) 최적화 결과

    - connect_timeout = 5

    - mysql.allow_persistent = off (php.ini 파일)


4. 인덱스 모니터링

  1) 설명: 인덱스를 제대로 사용하고 있는지 확인할 수 있다.

  2) 관련 값

    - handler_read_first : 인덱스로부터 읽혀진 처음 엔트리 수, 이 값이 높으면 서버는 많은 full index

      scans를 하고 있다는 것을 의미한다. 예를 들어 select col1 from foo 는 col1은 인덱스되었다는

      것을 추정한다.

    - handler_read_rnd : 이 값이 크면 모든 테이블을 스캔하는 많은 쿼리가 있다거나 key를 적절히

      사용하지 않는 조이들이 있을지 모른다.

  

5. 인덱스 버퍼 설정

  1) 설명: 인덱스블럭에 사용되어지는 버퍼사이즈

  2) 관련 값

    - key_buffer_size = 8,388,600 M

    - key_blocks_used = 2947 (읽기전용)

    - key_read_requests = 173351 (읽기전용)

    - key_reads = 2226 (읽기전용)

    - key_wirte_requests =1027 (읽기전용)

    - key_writes =772 (읽기전용)

  3) 최적화 방법

    - key_reads/key_read_requests 율이 보통 0.01보다 작아야 한다.

      update ,delete 를 대부분 사용한다면 key_write/key_write_requests 가 1에 가까워지는게

      일반적이고 동시에 update을 많이 하거나 delay_key_write 를 사용한다면 이 비율은 작아진다.

      key_blocks_used * 1024 면 충분하다.

  4) 최적화 결과

    - key_buffer_size > 3.017728 M (key_blocks_used * 1024) 설정하면 된다.

      현재 설정된 값을 그대로 사용한다.


6. SQL 정렬 버퍼 설정

  1) 설명: 더 빠른 order by group by 수행을 위해서 이 값들을 증가시켜라

  2) 관련 값

    - max_connections = 200

    - sort_buffer = 2.097144 M

    - record_buffer = 131.072 K (연속적인 데이타 스캔)

    - record_rnd_buffer = 131.072 K (정렬된 순서로 데이터 스캔)

    - handler_read_key : 키가 존재하는 ros를 일는 요청수, 이 값이 높으면 테이블이 적절히 인덱스

      되었다는 되었다는 것을 말해준다.

    - max_sort_length = 1024 ( BLOB,TEXT 테이타를 정렬할 때 사용됨)

    - sort_rows : 정렬된 레코드 수

    - sort_scan : 테이블 스캔에 의해 행해진 정렬 수

  3) 최적화 방법

    - good_sort_buffer_size = (sort_buffer + record_buffer ) * max_connections 라고 정의한다.

      이 값이 실메모리크기보다 크지 않도록 한다.

  4) 최적화 결과

    - 현재 good_sort_buffer_size 값이 445.343200 M 이므로 실메모리값(2G)보다 크지 않으므로 현재

      설정된 값을 그대로 사용하면 된다.

  

7. SQL 쿼리 모니터링

  1) 설명: 서버에 보내는 SQL쿼리에 문제는 없는지 확인할 수 있다.

  2) 관련 값

    - Questions : 서버에 보낸 쿼리수

    - query_buffer_size = 0 (no limit : 쿼리버퍼의 초기할당, 대부분의 쿼리가 길다면 이 값을 증가시킨다.)

    - long_query_time = 10 (일정 시간 이상 실행되는 쿼리 기준 시간)

    - log_long_queries : long_query_time 이상 실행된 쿼리를 로그에 남김

    - slow_queries : long_query_time 보다 더 많은 시간이 걸리는 쿼리수. 이 값은 0이면 좋다.

    - table_locks_immediate : 즉시 획득된 테이블 lock 시간

    - table_locks_waited : 즉시 획득되지 않고 기다림이 필요한 테이블 lock 시간

      이 것이 높아지면 성능에 문제가 있으므로 먼저 쿼리를 최적화 시키고 , 테이블을 분산시키거나

      복제를 사용해야 한다.

  

8. 테이블 JOIN

  1) 관련 값

    - select_full_join : 키없이 조인된 수(0이 되어야 한다.)

    - join_buffer_size = 131072 ( 인덱스를 사용하지 않는 full조인에 사용되는 버퍼사이즈)

    - max_join_size = 4.294967295G ( where절이 없고 오래걸리는 조인과 많은 레코드를 반환하는

      유저가 있으면 적절히 설정)

  

9. 테이블 생성

  1) 관련 값

    - tmp_table_size = 33.554432 M ( 메모리안에 임시테이블이 이 사이즈를 초과하면 자동적으로

      임시테이블을 디스크에 저장한다.)

    - created_tmp_tables : 메모리에 생성된 임시테이블 생성수

    - created_tmp_disk_tables :디스크에 존재하는 임시테이블 수

    - created_tmp_files : 임시파일 생성수

  2) 최적화 방법

    - created_tmp_disk_tables 값이 크면 tmp_table_size 값을 증가시켜야 한다.

  3) 최적화 결과

    - tmp_table_size = 100M


10. 쓰레드 관련 모니터링

  1) 관련 값

    - thread_cache_size = 0 (컨넥션이 이루어질 때 캐쉬에 있는 쓰레드를 사용하지 말고 새루운

      쓰레드를 생성하여 사용하도록 강제)

    - thread_stack = 65536

    - threads_cached : 쓰레드 캐쉬에 있는 쓰레드 수

    - threads_connected : 현재 오픈된 연결수

    - threads_created : 연결을 다루기 위해 생성된 쓰레드 수

    - threads_running : sleeping하지 않는 쓰레드 수

    - slow_launch_time : 쓰레드 생성시간이 이 값보다 길면 slow_launch_threads 수치는 증가

    - slow_launch_threads

    - delayed_insert_threads : 사용중인 insert_handler thread 가 지연되고 있는 수

    - delayed_writes : insert delayed 로 쓰여진 rows 수

    - delayed_errors : 에러로 쓰여진 rows수

    - handler_delete : 테이블로부서 지워진 rows수

  2) 최적화 방법

    - thread_created 값이 크면 thread_cache_size 값을 증가시켜야 한다.

    - 매우 바쁜 MYSQL 서버가 아니면 0 또는 2값 정도면 충분하다.

    - thread_created / connections 율이 1% 정도면 이 값을 증가시킬 필요가 있다.

  3) 최적화 결과

    - thread_cache_size = 2


11. 보안관련 설정

  1) 관련된 값

    - safe_show_database = OFF(유저에게 권한이 없는 데이터베이스에 대해 보여줄지 말지에 대한 설정 )

    - skip_show_database = OFF(process_priv권한이 없는 유저에게 show databases 를 못하게 한다. )

  

12. MYSQL데몬 구동 방법

    net stop mysql

    mysqld-nt --default-character-set=euc_kr -O back_log=50 -O max_connections=200 -O

    max_connect_err=300 -O table_cache=350 -O tmp_table_size=100M -O wait_timeout=30 -O

    interactive_timeout=1800 -O thread_cache_size=2 &

  

13. 기타

    MYSQLADMIN 툴을 이용해서 서비스 모니터링하는 방법 소개

    -MYSQL 서버가 살아있는지 확인하는 방법

      mysqladmin -u root -p ping

    - MYSQL 쓰레드 목록보기

      mysqladmin -u root -p proc stat(=processlist)

    - MYSQL 서버환경설정 확인

      mysqladmin -u root -p variables(※mysql>show valiables)

      mysqladmin -u root -p extended-status(※mysql>show stauts)

    - (팁) 배치파일로 연속해서 확인하는 방법은 다음과 같다.

      checking.bat이라는 파일을 만들어서 다음과 같이 작성한다.

1
2
3
4
:loop
mysqladmin -u root -p proc stat(=processlist)
pause
go loop


Lim min taek(c_min2000@yahoo.co.kr)

2005-10-08


List of Articles
번호 제목 날짜 조회 수
» MySQL 최적화 방법 설명 2014.02.27 8022
125 MySql 문자열 합치기 2014.02.27 6254
124 컬럼내 특정 문자를 다른문자로 변경하고자 할때 2014.02.27 6012
123 MySQL Replication 설정(Master-Slave, Maste 2014.02.27 6782
122 Mysql 기본 명령어 2014.02.27 5693
121 MySQL/MariaDB 백업 & 복원 - mysqldump 2015.08.07 7384
120 다양한 단위의 시간차 구하기 2015.12.19 8360
119 월의 마지막 일수를 반환하는 함수입니다 2015.12.19 5996
118 DB의 모든 테이블을 삭제하는 쿼리 2016.08.29 6767
117 각각의 게시판에서 제일 최근글하나씩을 모아 정렬 2016.08.30 5812
116 컬럼에 포함된 특정문자열을 검색해서 그 문자로 또 다른 테이블검색하기 2016.08.30 6606
115 MySQL 서버 데몬이 죽었을때 다시 실행하는 방법 2016.08.30 5842
114 MySql 에서 외래키(FK) 설정하는 방법과 Toad 에서 확인하기 file 2016.08.30 7143
113 MySql 윈도우에서 DB dump 백업과 복구하기 file 2016.08.30 8475
112 MySQL 에서 NULL 값 처리 file 2016.08.30 6423
111 MySql 의 Trigger(트리거) 로 정보 업데이트 file 2016.08.30 10153
110 MySQL INSERT 성능 향상 2016.12.22 11523
109 mysql 날짜 관련 date_add, date_format 2016.12.23 5500
108 DISTINCT와 ALL 2016.12.23 5498
107 InnoDB, MyISAM 2016.12.23 5536
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved