sun's longitude:147 23 32 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
 
/board/read.php:소스보기   
 
알파문서
자주 잊어먹거나, 메모해 둘 필요성이 있는 팁이나 문서, 기타 등등
[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
24 번 글: [mysql] thread_cache_size
글쓴이: 산이 [홈페이지] 글쓴날: 2003년 08월 06일 13:55:33 수(오후) 조회: 18038
[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 옵션을 추가해 주는 것이
좋습니다.

 
이전글 : [mysql] upgrading from 3.23.x to 4.0.x
다음글 : [Oracle 8.1.7] .bash_profile  
 from 61.254.75.40
JS(Redhands)Board 0.4 +@

|글쓰기| |답장쓰기| |수정| |삭제|
|이전글| |다음글| |목록보기|
인쇄용 

apache lighttpd linuxchannel.net 
Copyright (c) 1997-2018, linuxchannel.net

Page loading: 0.01(server) + (network) + (browser) seconds