Skip to content
컴퓨터잡담
2010.04.13 19:01

mysql threads_created 뭐냥?

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

mysql threads_created  뭐냥?


http://eureka7.com.ne.kr/MySQL_4_1_API/show-status.html




SHOW STATUS 은 , 서버의 스테이터스 정보를 제공합니다 (mysqladmin extended-status 와 같이 ). 출력은 이하와 같이 됩니다 (형식과 수치는 경우에 따라서 다릅니다 ).

+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| Aborted_clients          | 0          |
| Aborted_connects         | 0          |
| Bytes_received           | 155372598  |
| Bytes_sent               | 1176560426 |
| Connections              | 30023      |
| Created_tmp_disk_tables  | 0          |
| Created_tmp_tables       | 8340       |
| Created_tmp_files        | 60         |
| Delayed_insert_threads   | 0          |
| Delayed_writes           | 0          |
| Delayed_errors           | 0          |
| Flush_commands           | 1          |
| Handler_delete           | 462604     |
| Handler_read_first       | 105881     |
| Handler_read_key         | 27820558   |
| Handler_read_next        | 390681754  |
| Handler_read_prev        | 6022500    |
| Handler_read_rnd         | 30546748   |
| Handler_read_rnd_next    | 246216530  |
| Handler_update           | 16945404   |
| Handler_write            | 60356676   |
| Key_blocks_used          | 14955      |
| Key_read_requests        | 96854827   |
| Key_reads                | 162040     |
| Key_write_requests       | 7589728    |
| Key_writes               | 3813196    |
| Max_used_connections     | 0          |
| Not_flushed_key_blocks   | 0          |
| Not_flushed_delayed_rows | 0          |
| Open_tables              | 1          |
| Open_files               | 2          |
| Open_streams             | 0          |
| Opened_tables            | 44600      |
| Questions                | 2026873    |
| Select_full_join         | 0          |
| Select_full_range_join   | 0          |
| Select_range             | 99646      |
| Select_range_check       | 0          |
| Select_scan              | 30802      |
| Slave_running            | OFF        |
| Slave_open_temp_tables   | 0          |
| Slow_launch_threads      | 0          |
| Slow_queries             | 0          |
| Sort_merge_passes        | 30         |
| Sort_range               | 500        |
| Sort_rows                | 30296250   |
| Sort_scan                | 4650       |
| Table_locks_immediate    | 1920382    |
| Table_locks_waited       | 0          |
| Threads_cached           | 0          |
| Threads_created          | 30022      |
| Threads_connected        | 1          |
| Threads_running          | 1          |
| Uptime                   | 80380      |
+--------------------------+------------+

상기의 스테이터스 변수에는 각각 이하와 같은 의미가 있습니다.

변수의미
Aborted_clients접속을 닫기 전에 클라이언트가 종료해 버렸기 때문에 중단된 접속수. See 항A.2.10. 「통신 에러/Aborted connection」.
Aborted_connectsMySQL 서버에의 접속 시행 실패 회수. See 항A.2.10. 「통신 에러/Aborted connection」.
Bytes_received모든 클라이언트로부터 수신한 아르바이트수.
Bytes_sent모든 클라이언트에 송신된 아르바이트수.
Com_xxx각 xxx 커멘드의 실행 회수.
ConnectionsMySQL 서버에의 접속 시행 회수.
Created_tmp_disk_tables스테이트먼트 실행중에 , 디스크상에 작성된 암묵적 텐포라리테이불의 수.
Created_tmp_tables스테이트먼트 실행중에 , 메모리상에 작성된 암묵적 텐포라리테이불의 수.
Created_tmp_filesmysqld 하지만 작성한 임시 파일의 수.
Delayed_insert_threadsINSERT DELAYED 핸들러 thread의 수.
Delayed_writesINSERT DELAYED 그리고 기입해진 레코드의 수.
Delayed_errors에러 발생(중복 키의 가능성이 높다 )에 의해 ,INSERT DELAYED 그리고 기입해진 레코드의 수.
Flush_commandsFLUSH 커멘드의 실행 회수.
Handler_commit내부 COMMIT 커멘드수.
Handler_delete테이블에서 레코드가 삭제된 회수.
Handler_read_first최초의 엔트리가 인덱스로부터 읽어내진 회수. 이 값이 큰 경우 , 서버가 몇번이나 풀 인덱스 스캔을 실행하고 있다고 생각된다. 예를 들면 ,SELECT col1 FROM foo 을 실행했을 때에 col1 가 인덱스가 되어 있으면(자) 그렇게 된다.
Handler_read_key키에 근거하는 레코드 독해 요구의 회수. 이 값이 큰 경우 , 쿠에리 및 테이블이 적절히 인덱스화 되고 있다고 생각된다.
Handler_read_next키 순서에서의 다음의 레코드의 독해 요구의 회수. 범위 지정을 해 인덱스 컬럼에 대해서 쿠에리를 실행하면(자) , 이것이 인크리먼트(increment) 된다. 인덱스 스캔을 실행해도 인크리먼트(increment) 된다.
Handler_read_prev키 순서에서의 전의 레코드의 독해 요구의 회수. 이것은 주로 ,ORDER BY ... DESC 를 최적화하는데 사용된다.
Handler_read_rnd고정 위치에 근거하는 레코드 독해 요구의 회수. 결과의 소트를 필요로 하는 쿠에리를 많이 실행하면(자) , 이 값이 커진다.
Handler_read_rnd_next데이터 파일에서의 다음의 레코드의 독해 요구의 회수. 테이블 스캔이 많이 실행되면(자) , 이 값이 커진다. 이 경우 , 일반적으로 , 테이블이 적절히 인덱스화되어 있지 않은지 , 쿠에리가 인덱스를 유효하게 이용하고 있지 않는가를 의미한다.
Handler_rollback내부 ROLLBACK 커멘드수.
Handler_update테이블내의 레코드의 갱신 요구 회수.
Handler_write테이블에의 레코드의 삽입 요구 회수.
Key_blocks_used키 캐쉬의 사용 블록수.
Key_read_requests캐쉬로부터의 키 블록 독해 요구 회수.
Key_reads디스크로부터의 키 블록의 물리적 독해 회수.
Key_write_requests캐쉬에의 키 블록의 기입 요구 회수.
Key_writes디스크에의 키 블록의 물리적 기입 회수.
Max_used_connections동시 사용 가능한 최대 접속수.
Not_flushed_key_blocks변경되었지만 , 디스크에의 플래시는 아직되어 있지 않은 키 캐쉬의 키 블록.
Not_flushed_delayed_rowsINSERT DELAY 큐로 기입을 기다리고 있는 레코드의 수.
Open_tables열려 있는 테이블의 수.
Open_files열려 있는 파일의 수.
Open_streams열려 있는 시냇물의 수(주로 로그용으로 사용).
Opened_tables열린 테이블의 수.
Rpl_statusfail-safe인 replication의 스테이터스( 아직 사용되어 있지 않다 ).
Select_full_join키를 사용하지 않는 결합의 수(이 값이 0 나오지 않는 경우 , 테이블의 인덱스를 체크할 필요가 있다 ).
Select_full_range_join참조 테이블로 범위 지정의 검색을 사용한 결합의 수.
Select_range최초의 테이블의 범위 지정된 부분만을 사용한 결합의 수(통상 , 이 값이 커도 문제는 되지 않는다 ).
Select_scan최초의 테이블로 풀 스캔을 실시한 결합의 수.
Select_range_check각 레코드의 다음에 키 사용을 체크하는 , 키를 사용하지 않는 결합의 수(이 값이 0 나오지 않는 경우 , 테이블의 인덱스를 체크할 필요가 있다 ).
Questions서버에 송신된 쿠에리의 수.
Slave_open_temp_tables슬레이브 thread에 의해 현재 열리고 있는 텐포라리테이불의 수.
Slave_running마스터에 접속되고 있는 슬레이브의 경우는 ON.
Slow_launch_threads생성에 slow_launch_time 보다 시간이 걸린 thread의 수.
Slow_querieslong_query_time 초부터 시간이 걸린 쿠에리의 수. See 항4.10.5. 「슬로우 쿠에리 로그」.
Sort_merge_passes소트 알고리즘으로 필요했던 머지 패스의 회수. 이 값이 크면 ,sort_buffer 의 값을 크게 하는 것을 고려해야 한다.
Sort_range범위 지정으로 행해진 소트의 회수.
Sort_rows소트 된 레코드의 수.
Sort_scan테이블의 스캔에 의해 실행된 소트의 회수.
ssl_xxxSSL 에 의해 사용되는 변수( 아직 도입되어 있지 않다 ).
Table_locks_immediate테이블 락이 곧바로 실행된 회수. 3.23.33 그리고 도입.
Table_locks_waited테이블 락이 곧바로는 실행되지 않고 , 대기가 필요했던 회수. 이 값이 큰 경우 , 퍼포먼스상의 문제가 있다. 우선 쿠에리를 최적화해 , 다음에 테이블을 분할할까 replication를 사용해야 한다. 3.23.33 그리고 도입.
Threads_cachedthread 캐쉬내의 thread수.
Threads_connected현재 열려 있는 접속의 수.
Threads_created접속을 처리하기 위해서 작성된 thread의 수.
Threads_runningsleeve 상태로 되어 있지 않은 thread의 수.
Uptime서버의 가동초수.

보충 코멘트

  • Opened_tables 치가 큰 경우 ,table_cache 변수가 너무 작다고 생각된다.

  • Key_reads 값이 큰 경우 ,key_buffer_size 변수가 너무 작다고 생각된다. 캐쉬 미스 레이트는 ,Key_reads/Key_read_requests 그리고 계산된다.

  • Handler_read_rnd 값이 큰 경우 ,MySQL 가 테이블 전체를 스캔 할 필요가 있는 쿠에리가 너무 많은지 , 키를 적절히 사용하지 않는 결합이 있다고 생각된다.

  • Threads_created 값이 큰 경우 ,thread_cache_size 변수를 크게 하는 것을 고려해야 한다. 캐쉬 히트 레이트는 ,Threads_created/Connections 그리고 계산된다.

  • Created_tmp_disk_tables 값이 큰 경우 ,tmp_table_size 변수를 크게 해 , 디스크 베이스는 아니고 메모리베이스로 텐포라리테이불을 취득할 수 있도록(듯이) 한다.





    [thread_cache_size]


    많이 헷갈리는 이 부분에 대해서 설명합니다.


    먼저 이 값은 bytes 단위 등의 크기가 아닙니다.

    정수 단위의 '수'를 의미합니다.

    (mysql에서 단위를 헷갈리게 하는 부분임)


    mysql 클라이언트가 mysql 서버에 접속할때(Connections)

    thread를 생성하는데 cache에 thread가 있으면 생성하지

    않고 그 thread 를 사용합니다.


    클라이언트에서 접속이 끊어지면(disconnects) MySQL 서버는

    이전의 클라이언트 thread 수가 thread_cache_size 값보다

    작으면 현재 thread를 cache 에 올려놓습니다.


    cache에 올려놓은 thread는 Threads_cached로 확인할 수

    있습니다.(이 정보가 빠져있군요)


    cache에 있는 thread 재사용수 설정 ==> thread_cache_size

    입니다. 즉 얼만 만큼의 thread 수를 cache에 올려놓을

    것인지 결정하는 항목입니다.


    여기에서 cache에 있는 thread를 사용하지 않고

    새로운 thread가 생성되면 Threads_created 값이 1씩

    증가하고, cache에 있는 thread를 사용할 경우는

    Threads_created 값은 증가하지 않습니다.


    기준은 Questions가 아니고 Connections 입니다.


    즉 Connections 값과 Threads_created 값, 그리고

    현재 MySQL 서버가 얼마정도로 바쁜지를 파악하여

    이 thread_cache_size 값을 조절해 줘야 합니다.


    기본값은 thread_cache_size = 0 입니다.


    이 의미는 Connections 이 이루어질때 cache에 있는

    thread를 사용하지 말고 새로운 thread를 생성하여 사용

    하라는 의미입니다.


    즉 매우 바쁜 MySQL 서버가 아니면 0 또는 2 값 정도면

    충분합니다.


    그러나 MySQL 서버가 상당히 바쁘고(STATUS == busy 이상)

    이 값이 작으면 Connections이 이루어질때마다 새로운

    thread가 생성된다는 단점(?)이 있습니다.


    MySQL 영문 매뉴얼에서는 Threads_created 값이 크면(big)

    thread_cache_size 값을 올려주라고 권고하지만

    얼마만큼이 그 기준인지에 대해서는 따로 언급이 없습니다.


    다만 (Threads_created / Connections)값을 계산해 보라는

    정도입니다.



    그렇다면 성능면측에서 생각해보면,

    서버가 상당히 바쁘면 새로운 thread 를 생성하여 사용하는

    것 보다는 기존의 cache 에 있는 thread를 재사용하는

    것이 더 유리합니다.


    그러나 성능 좋은 thread 실행(implementation) 시스템에서는

    그리 크게 낫은 성능은 없습니다.


    어째튼 서버가 매우 바쁜 정도라면 이 값을 어느 정도까지

    올려주는 것이 좋습니다.


    본 프로그램에서는 (Threads_created / Connections)값이

    0.01 즉 1% 이상이면 thread_cache_size 값을 올려주라고

    comments하고 있습니다.


    보통 none interactive 모드에서,

    하나의 커넥션이 맺어지고 exit 까지는 대략 1초 미만이 대부분입니다.

    길게 1초라고 가정하고,


    얼마자 자주 커넥션이 들어오는지(초당 커넥션)를 계산하면,


      커넥션 관련 통계

      (

          cps = Connecions / Uptime    ; // 초당 커넥션 수

          spc = Uptime / Connections   ; // 커넥션 주기(초)

          cpq = Question / Connections ; // 커넥션당 요청 쿼리 수

      )


    cps 값으로 알 수 있습니다.


    평균적인 계산이기 때문에 이 cps 값이 필요로 하는 thread_cache_size

    값이 됩니다. 이 cps 값도 한계가 있죠.. max_connections 이 제한점이기

    때문에..


    따라서,


      ccps  : ceil(Connecions / Uptime); // 올림

      최소 : (1 초 * ccps) + 0

      권장 : (2 초 * ccps) + 1

      최대 : (3 초 * ccps) + 2

      극대 : (4 초 * ccps) + 3


    이 정도로 계산하면 됩니다.


    단, 계산된 thread_cache_size 도 한계가 있습니다.

    당연히 max_connections 보다 작아야 하고, 1 절에서 구한 LTP 에 의해서

    (LPT * cps) 보다 작아야 합니다.

    또한 back_log 보다 작아야 합니다.



    [thread_cache_size 값을 설정하는 방법]


    1. MySQL 4.0.3 이상이면


    mysql> SET GLOBAL thread_cache_size = 8;


    2. MySQL 4.0.3 이하이면


    shell> mysqladmin [OPTIONS] shutdown

    shell> safe_mysqld -O thread_cache_size=8 &


    또는 /root/.my.cnf

    [mysqld]

    ...

    set-variable    = thread_cache_size=8

    ...


    이렇게 추가하고


    shell> safe_mysqld &


    3. 시스템 재부팅시 자동으로 설정해 줄 경우


    /etc/rd.c/rc.local 파일 이용시


    safe_mysqld -O thread_cache_size=8 &


    권장 방법


    safe_mysqld --defaults-file=/root/.my.cnf &


    *주의)

    rc.local 파일에 `safe_mysqld &` 이와 같이 입력하면

    /root/.my.cnf 내용을 참조하지 못하는 경우가 있으므로

    --defaults-file=/root/.my.cnf 옵션을 추가해 주는 것이

    좋습니다.





로그인 후 댓글쓰기가 가능합니다.

?

List of Articles
번호 분류 제목 날짜 조회 수
2286 종교와철학 "박근혜 '애' 낳는 그림 그린 홍씨, 누군가 자신의 어머니를 저런식으로 그렸다면? file 2012.11.19 5917
2285 AutoHotKey #ifwinactive & #ifwinexist 윈도우창 마다 핫키의 용도를 다르게 사용하는 방법 2011.02.14 15818
2284 만들기 <!--f644fe64217d47f8abef1fe9b7150c48--> secret 2010.10.29 3869
2283 Excel 'C:Documents.xlsx' 을(를) 찾을 수 없습니다. 라는 오류 메시지가 나오는 경우 대처방법 2015.01.28 4301
2282 유용한상식 '작업의 정석' 과외받는 남자들 12 2013.03.04 7038
2281 WindowsTip (nPDF) 프린터 인쇄 내용을 PDF 파일로 변환하기 2015.01.24 2066
2280 재미재미 (쇼킹한 음료광고)Thailand funny slimming greentea commercial 1 2 2012.08.25 5103
2279 일상 (펌)개성공단에서 4월 13일 나온 근무자입니다 2013.04.17 20056
2278 유용한상식 (해외송금)SWIFT 국민은행 송금 및 은행별 SWIFT CODE LIST 2014.02.03 16946
2277 재미재미 * 바람피운 남편을 어떻게...* 2010.12.19 5018
Board Pagination Prev 1 2 3 4 5 ... 229 Next
/ 229

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소