2013-01-11 1 views
-1

리눅스의 MySQL 서버를 최적화하여 행 수가 많은 (최대 1 억) 테이블을 빠르게 쿼리하는 방법.많은 행에 대한 MySQL의 linux 서버 및 my.cnf 최적화

서버는 개발에만 사용되므로 보안, 가용성 또는 복구는 문제가되지 않습니다.

  • 링크 (~ 20 달러)
  • 낮은 CPU 사용률 (~ 19 %)을 계산
  • 높은 IO (iotop MySQL의

    ALTER TABLE link ADD UNIQUE KEY url_index(url(255)) 
    
    • 시간> 6 시간 : 여기

      은 예입니다 대부분 600 KB/s를 읽음 & 일부 스파이크를 사용하여 99 % IO로 쓰고 500KB/s 쓰기, 2-3MB/s)
    ,451,515,

    링크 테이블 :

    CREATE TABLE `links` (
        `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
        `url` varchar(2000) NOT NULL, 
        `domain` varchar(255) DEFAULT NULL 
        PRIMARY KEY (`id`) 
    ) ENGINE=MyISAM AUTO_INCREMENT=27765646 DEFAULT CHARSET=utf8; 
    

    나는 전용 리눅스 서버를 (우분투 12.10)

    • 6기가바이트 RAM
    • 1 TB의 HDD (비 SSD)

    my.cnf (http://pastebin.com/vx6BNqrE)

    무엇을 최적화 할 수 있습니까? (쿼리/테이블 디자인 및 my.cnf 또는 기타 서버 구성) 및 RAM 이외의 하드웨어 측면에서 업그레이드해야하는 것은 무엇입니까? (불행히도 RAM 슬롯은 3 개만 사용할 수 있으므로 업그레이드 할 수 없습니다).

    updatead

  • 답변

    1

    오히려 장난 당신에게 몇 가지 더 거래 시간을 줄 수있는 마이크로 최적화를하는 것보다, 당신은 스케일링을 시작해야합니다.

    먼저 SSD를 받으십시오. 더 많은 공간이 필요하면 RAID를 RAID 화하십시오. 당신이 정말로 성능에 관심이 있다면 SSD는 엄청납니다. 특히 IO를 살펴 보는 것이 좋습니다.

    두 번째로, 한 서버는 지금까지만 갈 수 있습니다. 당신은 부하의 일부를 벗을 노예를 설치하기 시작해야합니다, 그들은 또한 멋진 장애 조치 역할을합니다.

    MySQL은 주문형 스키마 변경을 위해 실제로 만들어지지 않았으므로 alter 테이블은 대답하기가 어렵습니다. 나는 실제로 서버를 잠그지 않고 잠금을 방지하고 alter table을 실행 한 다음 다시 동기화하여 다른 서버와 함께 suite를 추적합니다. 당신은 정말로 하나의 스키마를 고르고 그것으로 붙들어 야합니다.

    행운을 빈다.

    +0

    감사합니다. 클러스터 설정에 대한 초보자 용 튜토리얼을 알고 계십니까? –

    +0

    그냥 혼동하지 마라. 이것은 클러스터가 아니다 - 그것은 완전히 다른 것이다. 여기에 좋은 가이드가 있습니다 : http://www.howtoforge.com/mysql_master_master_replication – Jonathan

    +0

    불행히도 이것은 제가 습득 한 것과 같은 고 가용성, 빠른 읽기를 제공 할 것임을 이해하지만 그것은 내가 더 잘 이해하지 못하는 것으로 이해합니다. "서버는 개발에만 사용되므로 보안, 가용성 또는 복구는 문제가되지 않습니다." –