2013-03-02 2 views
1

2GB mem VPS에서 mysql을 최적화하기 위해 mysqltuner를 사용했고, 다음 권장 사항을 처리하는 방법을 이해하지 못했습니다. 특히 최대 메모리 사용량이 매우 높습니다., deal 이걸로? 누군가가 설명하도록 도울 수 있습니까? 감사.mysqltuner는 "MySQL의 최대 메모리 사용량이 위험 할 정도로 높습니다"는 것을 의미합니까?

-------- Performance Metrics ------------------------------------------------- 
[--] Up for: 3h 17m 7s (49K q [4.190 qps], 1K conn, TX: 70M, RX: 7M) 
[--] Reads/Writes: 60%/40% 
[--] Total buffers: 314.0M global + 6.4M per thread (300 max threads) 
[!!] Maximum possible memory usage: 2.2G (119% of installed RAM) 
[OK] Slow queries: 1% (785/49K) 
[OK] Highest usage of available connections: 85% (256/300) 
[!!] Cannot calculate MyISAM index size - re-run script as root user 
[OK] Query cache efficiency: 92.4% (38K cached/41K selects) 
[OK] Query cache prunes per day: 0 
[OK] Sorts requiring temporary tables: 0% (0 temp sorts/633 sorts) 
[!!] Temporary tables created on disk: 45% (315 on disk/699 total) 
[OK] Thread cache hit rate: 74% (359 created/1K connections) 
[OK] Table cache hit rate: 95% (141 open/148 opened) 
[OK] Open file limit used: 12% (189/1K) 
[OK] Table locks acquired immediately: 99% (6K immediate/6K locks) 

-------- Recommendations ----------------------------------------------------- 
General recommendations: 
    Add skip-innodb to MySQL configuration to disable InnoDB 
    MySQL started within last 24 hours - recommendations may be inaccurate 
    Reduce your overall MySQL memory footprint for system stability 
    When making adjustments, make tmp_table_size/max_heap_table_size equal 
    Reduce your SELECT DISTINCT queries without LIMIT clauses 
Variables to adjust: 
    *** MySQL's maximum memory usage is dangerously high *** 
    *** Add RAM before increasing MySQL buffer variables *** 
    tmp_table_size (> 32M) 
    max_heap_table_size (> 32M) 

답변

2

"[!!] Maximum possible memory usage: 2.2G (119% of installed RAM)는"

이것은 기본적으로 당신이 정말 2.2g을> 세대가보다 더 많은 메모리를 사용할 수있는 그것을 말하고, MySQL로 거짓말을 의미합니다. 이것은 몇 주 또는 몇 달 동안 작동 할 수도 있지만 나쁜 생각입니다. MySQL이 사용하라는 메모리가 없다면, MySQL은 최악의 시간에 무작위로 충돌합니다.

"skip-innodb"를 /etc/my.cnf 파일에 추가하면 메모리를 절약 할 수 있습니다. InnoDB를 사용하지 않는다고 가정합니다. 이것은 접하는 것이지만 MyISAM에서 InnoDB로 데이터를 변환하는 것이 좋습니다. MyISAM은 오래된 기술입니다. InnoDB는보다 현대적인 엔진입니다.

my.cnf에서 메모리를 절약하기 위해 원하는 것을 찾으십시오. 일반적으로 사용되지 않는 연결을 가장 먼저 보았습니다. 연결의 15 %는 사용되지 않지만 "24 시간 내에 시작됨"경고를 듣습니다. 일반적으로 my.cnf에서 연결을 사용하지 않는 (사용하지 않는) 경우 많은 메모리를 절약 할 수 있습니다. 귀하의 응용 프로그램이 무엇인지 모르겠지만 256 연결은 나에게 소리 높습니다. 그래서 귀하의 응용 프로그램이 실제로 많은 연결을 필요로하는지 확인하겠습니다. 어쩌면 당신은 당신의 서버에 256 명의 PHP 아이들을 가지고 있으며 12 명의 아이들을 줄일 수 있습니다. 더 많은 아이들! = 더 빠른 응답. 12 명의 PHP 하위 클래스가 있다면 13 개의 데이터베이스 연결 만 있으면됩니다.

119 %는 분명히 너무 높지만 96 %도 너무 높다고 생각합니다. (그래서 내가 가장 좋은 % 사용을 찾고 있습니다.) 분명히 운영 체제도 약간의 메모리가 필요합니다. 운영 체제에서 사용하지 않는 메모리 양은 얼마입니까? 알고 싶습니다. 이미 질문을받지 않았다면 여기에 별도의 질문으로 물어볼 것입니다. (이 경우 링크를 여기에 게시하십시오.) 또는 mysqltuner의 권장 사항을 청취 할 수 있습니다.

그냥 여기 테스트 :

"[!!] Maximum possible memory usage: 3.4G (88% of installed RAM)"

낮은 my.cnf의 설정을 다시. 아직

"[!!] Maximum possible memory usage: 3.3G (86% of installed RAM)"

이 너무 높습니다?

는 "[OK] Maximum possible memory usage: 3.2G (83% of installed RAM)"

0

는 에누리 mysqltuner에서 조언을 가져 가라. 가능한 최대 메모리 사용량에 대한 예상치가 잘못되었습니다. 그리고 수 없습니다 정확한 견적을하십시오.

설명은 http://www.percona.com/blog/2009/02/12/how-much-memory-can-mysql-use-in-the-worst-case/을 참조하십시오.

각 연결마다 약간의 메모리를 사용하지만 실제로 얼마나 다양합니까? 300 개의 연결이 항상 사용되는 것은 아니며, 필요할 때도 항상 쿼리를 실행하지는 않으며 쿼리가 항상 최대 크기까지 모든 가능한 버퍼를 사용하지는 않습니다.

Mysqltuner는 절대로 일어나지 않을 이론적 인 최대 메모리 사용량에 대해 경고합니다.

또 다른 방법은 : 나는 수백 개의 MySQL 구성을 분석했으며, 은 모두 개가 이론적으로 서버의 실제 RAM보다 많은 메모리를 할당 할 수있었습니다.