my.cnf 설정파일

리눅스/MySQL|2015. 1. 16. 11:02
반응형

=================================================================

 

             my.cnf

 

=================================================================

-- 용도별 카피

 

my-small.cnf                    :            64M

my-medium.cnf                :            128-256M

my-large.cnf                    :            512M

my-huge.cnf                    :            1~2G

 

 

 

[mysqld]

 

             key_buffer         

 

                           - 인덱스를 위한 버퍼 공간                         

                           - 키버퍼의 크기는 공유된 쓰레드의 크기이며 중복된 키를 자주 사용할 경우 속도증진

                           - show status  Key_blocks_used 를 체크

                                        Key_blocks_used * 1024  2~3  ... (메모리충분할 경우)

                                        Key_blocks_used * 1024 (보통)                 

                                       

                                       ex) 아래와 같은 상태가 될때가 key_buffer 가 적당..

                                                     Key_reads / Key_read_request < 0.01

                                                     key_write / Key_write_requests = 1

 

 

             max_connections

 

                           - show status  max_used_connections 를 체크 (최대값보다 10% 크게 설정)

                          

             table_cache

 

                           - MySQL 서버가 한번에 열수 있는 테이블의 개수설정

                           - show status  Opened_tables 값이 클 경우 table_cache 를 늘림

                           - max_connections 값이 100 일 경우 100 * n (조인해서 열수 있는 최대테이블개수)

                                        ex) 테이블 20 , max_connections 100 이라면

                                                     table_cache = 512

 

 

             sort_buffer / record_buffer

 

                           - max_used_connections 의 값에 따라 증가

                           - 한번에 많은 쓰레드가 동시에 붙을 경우는 증가

                           - max_used_connections 가 높은 경우

                                        sort_buffer=6M

                                        record_buffer=2M

                                        (sort_buffer + record_buffer < 8M)

                           - 메모리가 4G 정도 된다면 sort_buffer 값을 32M 정도를 잡는 것이 좋다.

                           - order by , group by 절을 빠르게 하기 위해서 sort_buffer 값을 증가시킬수 있다.

                           - 많은 연속적인 테이블 스캔이 이루어진다면 record_buffer 값을 증가

 

            

             thread_cache / thread_concurrency

                          

                           - cpu 개수 * 2

            

 

 

             -- 퀴리캐시 설정 방법

            

             set-variable = query_cache_limit=1M

             set-variable = query_cache_size=2M

             set-variable = query_cache_type=1

            

             -> 쿼리캐시 사용 안할려면 query_cache_size  = 0  으로 설정.

             -> query_cache_type

                           1)          0           :            off 쿼리캐시 기능을 사용하지 않음

                           2)          1            :            on , SELECT SQL_NO_CACHE 를 제외하고 쿼리캐시사용

                           3)          2            :            DEMAND, SELECT SQL_CACHE 사용시만 쿼리캐시사용        

 

             -> 쿼리캐시 변수보기

                           show variables like 'query%';

 

                                        +-------------------+----------+

                                        | Variable_name     | Value    |

                                        +-------------------+----------+

                                        | query_cache_limit | 1048576  |

                                        | query_cache_size  | 33554432 |

                                        | query_cache_type  | ON       |

                                        +-------------------+----------+

 

             -> 쿼리캐시 상태보기

                           show status like 'qcache%';

 

                                        +-------------------------+----------+

                                        | Variable_name           | Value    |

                                        +-------------------------+----------+

                                        | Qcache_queries_in_cache | 12780    |  : 캐시에 등록된 쿼리수

                                        | Qcache_inserts          | 2084642  |    : 캐시에 추가된 쿼리수

                                        | Qcache_hits             | 173194   |     : 캐시에 있는 쿼리를 사용한 수

                                        | Qcache_lowmem_prunes    | 361897   |           

                                        | Qcache_not_cached       | 23724    |  : 쿼리를 캐시에 저장하지 않은 수

                                        | Qcache_free_memory      | 20055720 | : 캐시가 남은 공간

                                        | Qcache_free_blocks      | 6237     |   : 쿼리캐시에서 남은 메모리 블록

                                        | Qcache_total_blocks     | 32000    |    : 쿼리캐시가 사용하는 총 블록 수

                                        +-------------------------+----------+

             -> FLUSH

                           FLUSH QUERY CACHE 쿼리 캐시를 재정렬하므로 메모리를 유용하게 사용하도록 해준다.

                          (단 쿼리캐시를 비우지는 않는다)

            

                           FLUSH TABLES 쿼리 캐시 버퍼를 비운다.

                         ( Qcache_queries_in_cache = 0 , Qcache_table_blocks = 1

            

                           FLUSH QUERY CACHE 는 모든 쿼리 캐시를 삭제

            

 

 

             -- 로그설정

            

             log-isam=파일경로

             log-slow-queries=파일경로

             long_query_time=5

 

 

 

 EX ) MySQL 메모리 사용량

 

                           innodb_buffer_pool_size

             +            key_buffer

             +            max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size)

             +            max_connections * 2MB

 

 

 

 

 

=================================================================

 

              튜닝참조

 

=================================================================

 

1. Opened_tables가 크면 table_cache variable의 값이 너무 작은것일지도 모른다

 

2. key_reads가 크면 key_cach의 값이 너무 작은것일지도 모른다

 

3. cache hit rate key_reads/key_read_requests이다

 

4. Handler_read_rnd가 크면 MySQL의 모든 테이블을 스캔하는 많은 쿼리가 있다거나 key를 적절히 사용하지 않는 조인들이 있을지 모른다

 

5. Threads_created가 크면 thread_cache_size값을 증가시키기를 바랄수도 있다

 

6. Created_tmp_disk_tables이 크면 디스크대신 임시테이블메모리를 얻기위해 tmp_table_size값을 증가시키기를 원할 수있다

 

7. 기본적으로 support-files밑에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 를 기본으로 my.cnf 로 바꾸어 사용하면서 조정한다.

 

             - memory (>=256M)이고 많은 테이블이 있으며, 적당한 클라이언트수에서 최고 성능을 유지하기 위해

             shell> safe_mysqld -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M &

             이러한 옵션으로 서버를 실행하는데, my-cnf에서 이를 수정하여 사용하면 될 것이다.

 

             - 128M메모리에 테이블이 적지만, 정렬이 많을 때

             shell> mysqld_safe -O key_buffer=16M -O sort_buffer=1M

 

             - 메모리는 적지만 많은 연결이 있을 때

             shell> mysqld_safe -O key_buffer=512k -O sort_buffer=100k -O record_buffer=100k &

             또는

             shell> mysqld_safe -O key_buffer=512k -O sort_buffer=16k -O table_cache=32 -O record_buffer=8k -O net_buffer=1K &

 

 

8. group by order by작업이 가지고 있는 메모리보다 훨씬 클 경우, 정렬 후 row 읽는 것을 빠르게 하기위해 record_buffer값을 증가시켜라

 

[출처] my.cnf 설정파일|작성자 Agin


반응형

댓글()