커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 데이터베이스(database) > MySQL 도움말
검색 : 사이트 WHOIS 웹서버 종류


  대용량 싸이트에서의 MySQL (글쓴이 모름) 작성일 : 2003/11/16 15:31
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 6647
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      가져온 곳 : http://unix.co.kr/stories.php?story=03/05/06/2804980
    출처 : http://phps.net/

    글쓴이가 꿔니님인지도 정확하지 않습니다. 옮겨지고 또 옮겨지는 과정을 통해
    출처와 글쓴이가 불분명해졌습니다. 꿔니님께 메일보내 확인해봐야겠습니다.



    ----------------------------------------------------------------
    글쓴이 : 꿔니(fuga@ggwuni.com)
    제  목 : [팁] 대용량 싸이트에서의 MySQL
    ----------------------------------------------------------------

    평균 이용자는 잘 모르겠구....
    하루 페이지 뷰가 600만 페이지 뷰 입니다...
    서버는 달랑 4대...
    웹 서버 3대와 db 서버 1대...
    우선 웹서버의 튜닝은 여기선 집어치우죠...
    일단.....
    처음에 너무 황당했고.. 어쩔줄 몰랐습니다..

    그놈의 mysql 연결 에러 때문에...
    사용자가 너무 많아짐에 따라서
    mysql 접속 또한 폭발적으로 증가했기 때문에...
    더 이상 연결을 시키질 못하더군요...

    그래서... 날밤 까면서... 이것 저것 찾아보고 물어보면서... ㅠ.ㅠ...
    결국은 현재의 db 서버를 완전히 통째로 엎어버렸습니다...
    RedHat 7.0 을 사용하고 있었는데....
    운영체제는 FreeBSD 4.2 로 바꿨습니다...
    또한 Mysql 설치시... 당근 소스 컴파일을 했지요...
    이번엔 확실히 하기 위해서 아예... pgcc 를 이용해서
    정적 컴파일 했습니다...

    그래서..... 그다음... 전 이렇게 Mysql 을 설정했습니다...
    이 부분이 핵심이겠지요...

    서버는...

    Intel P-III 600Mhz Dual
    Ram : 1GB
    I/O : 스카시
    NetWork : 100M Shared
    입니다...
    우선...

    /etc/my.cnf

    라는 파일을 만드세요.. vi /etc/my.cnf
    이 파일은 mysql 데몬이 실행될때 가장 먼저 찾는 파일입니다..
    일반적으로 여러분들의 서버에는 이 파일이 당연히 없을겁니다..
    그럼 mysql 은 디폴트 옵션으로 데몬을 시작합니다...

    지금 부터 위 파일을 작성하겠습니다..

    #=======================================================

    # /etc/my.cnf

    [client]
    port = 3306
    socket = /tmp/mysql.sock

    [mysqld]
    port = 3306
    socket = /tmp/mysql.sock
    skip-locking
    set-variable = key_buffer=384M
    set-variable = max_allowed_packet=1M
    set-variable = table_cache=512
    set-variable = sort_buffer=4M
    set-variable = record_buffer=4M
    set-variable = thread_cache=8
    set-variable = thread_concurrency=4 # CPU 갯수의 2배를 적으세요
    set-variable = myisam_sort_buffer_size=64M
    set-variable = max_connections=400
    log-update

    [mysqldump]
    quick
    set-variable = max_allowed_packet=16M

    [mysql]
    no-auto-rehash

    [isamchk]
    set-variable = key_buffer=256M
    set-variable = sort_buffer=256M
    set-variable = read-buffer=2M
    set-variable = write-buffer=2M

    [myisamchk]
    set-variable = key_buffer=256M
    set-variable = sort_buffer=256M
    set-variable = read-buffer=2M
    set-variable = write-buffer=2M

    이렇게 작성하시고 저장하세요...
    참고로... 메모리가 최소한 1G 이상은 된다는
    가정하에 적는 옵션입니다...
    그 다음에...
    여러분들의 /etc/rc.d/rc.local 파일에
    다음과 같이 적어주세요...
    bin/sh -c 'cd /mysql패스 ; ./bin/safe_mysqld &'
    ~~~~~~~~~~
    (예.. /usr/local/mysql )

    참고로 전 위와 같이 하지 않았습니다...
    전 FreeBSD 이기 때문에...
    위의 것은 레드햇 계열일때의 적용되는 것입니다...
    그럼.. 이제 셧다운 시키고 다시 safe_mysqld 를 할때에도
    자동으로 /etc/my.cnf 파일을 읽어드릴 것입니다..

    그 다음...

    이건 뭐.. 어쩔 수 없는 것인데...
    현재 저희 웹 프로그램의 모든 php 프로그램에서...
    select 나.. 기타 등등.... 약간 복잡한것은 모두
    UDF 로 바꾸었습니다...
    일일히 UDF 로 바꾼다는것은 굉장히 고통스럽고 어려운 작업이었으나..
    성능은 거의 환상적이더군요...

    어쨌든.... 이렇게 해서...

    현재 600만 페이지 뷰가 일어날때...(db 접속 부분이 아주 많습니다,,)
    아무런 문제가 없습니다...
    새벽 4시 정도에 순간적으로 다시 디비를 리로드 시키고 있습니다..
    어쨌든..... 지금까지 아무런 문제없이 정말 잘 돌아가고 있습니다..

    현재 DB 서버에는

    5개의 database 가 있으며
    그중의 4개는 60개 정도의 테이블이 있으며
    나머지 1개는 400개의 테이블이 있습니다....
    모든 데이타 베이스의 총 레코드 수는....
    현재 약 1200만개 정도가 있습니다...
    서버는 현재 미국에 있습니다..

    한가지 놀라운것은 UDF 의 사용으로 정말 놀랍도록 좋아진
    성능 입니다.... 다행히 가까운곳에 C 언어를 아주 잘 하는 사람이
    있어서 많은 도움을 받았지요...

    휴~~~ 한가지 절실히 느낀것은.....

    PHP 로 웹 프로그램을 했는데.... 결국은 C 언어가 아니었으면...
    더이상의 서비스는 불가능 했을 것이라는 점 입니다...
    물론 이밖에... 큰 단일 파일의 처리와... db 파일 하나가 4G..ㅠ.ㅠ...
    기타 중요한 문제들이 많이 있습니다...
    이것은... 우리 엔지니어가 해결한 문제이기 때문에...
    전 무식해서 잘 모르겠네요.... 한번 물어볼께요.....

    다음에는 myisam 사용과 다른 팁들을 올리도록 하겠습니다...
    그럼.... 약간의 도움이 되었기를 빌며..

    꿔니(fuga@ggwuni.com)
      커피닉스 카페 최근 글
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Mobile 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Web Front 개발자를 모십니다.
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~