
mysqltuner를 사용하여 mysql db를 튜닝하려고 합니다. Mysqltuner에서는 Join_buffer_size와 query_cache_size를 늘리라고 조언하고 있습니다. 그러나 동시에 최대 메모리 사용량이 높다는 경고가 표시됩니다. 이는 설치된 RAM(2GB)의 200% 이상입니다. 물론 내가 겪고 있는 문제는 mysqltuner가 말하는 대로 하면 메모리 사용량이 훨씬 더 높아진다는 것입니다. 그럼 여기서 무엇을 해야 할까요? 문제는 mysql이 아니라 이 서버에서 실행되고 mysql이 엄청난 양의 캐싱을 수행하도록 요구하는 앱에 있는 것입니까? mysql 관리자 전문가라면 여기에서 어떻게 진행하시겠습니까? 현재 [mysqld] 설정과 함께 아래 mysqltuner 보고서를 참조하세요.
MySqlTuner 보고서:
MySQLTuner 1.2.0 - 주요 Hayden 버그 보고서, 기능 요청 및 다운로드는 다음 위치에서 가능합니다.http://mysqltuner.com/ 추가 옵션 및 출력 필터링을 보려면 '--help'를 사용하여 실행하세요.
-------- 일반 통계 --------------------------- ----------
[--] MySQLTuner 스크립트에 대한 버전 확인을 건너뛰었습니다.
[확인] 현재 지원되는 MySQL 버전 5.5.30-log를 실행 중입니다.
[확인] 64비트 아키텍처에서 작동 중입니다.-------- 스토리지 엔진 통계 -------------------------- ----
[--] 상태: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] MyISAM 테이블의 데이터: 310M(테이블: 264)
[--] InnoDB 테이블의 데이터: 8M(테이블: 365)
[--] PERFORMANCE_SCHEMA 테이블의 데이터: 0B (테이블: 17) [!!] 총 조각난 테이블: 376-------- 보안 권장사항 --------------------------- ---
[확인] 모든 데이터베이스 사용자에게 비밀번호가 할당되어 있습니다.-------- 성능 지표 --------------------------- ---------
[--] 최대: 20시간 20분 10초(2M q [35.305 qps], 25K 연결, TX: 88B, RX: 2B)
[--] 읽기/쓰기: 22% / 78 %
[--] 총 버퍼: 전역 480.0M + 스레드당 33.5M(최대 스레드 110개)
[!!] 가능한 최대 메모리 사용량: 4.1G(설치된 RAM의 203%)
[확인] 느린 쿼리: 0%(0/ 2M)
[OK] 사용 가능한 연결의 최고 사용량: 7%(8/110)
[OK] 키 버퍼 크기/총 MyISAM 인덱스: 150.0M/129.5M
[OK] 키 버퍼 적중률: 100.0%(15M 캐시/7K 읽기 )
[OK] 쿼리 캐시 효율성: 74.3%(캐시 762K / 선택 1M)
[!!] 일일 쿼리 캐시 정리: 4341
[OK] 임시 테이블이 필요한 정렬: 0% (임시 정렬 3개 / 정렬 11K)
[!!] 인덱스 없이 수행된 조인: 3901
[OK] 디스크에 생성된 임시 테이블: 0%(디스크에 2K / 총 547K)
[OK] 스레드 캐시 적중률: 99%(8개 생성 / 25K 연결)
[OK] 테이블 캐시 적중률: 46%(688개 열기/1K 열림)
[OK] 사용된 파일 열기 제한: 17%(593/3K)
[OK] 즉시 획득된 테이블 잠금: 99%(1M 즉시/1M 잠금)
[OK] InnoDB 데이터 크기/버퍼 풀 : 8.9M/256.0M-------- 권장 사항 ---------------------------- ------------
일반 권장 사항:
성능 향상을 위해 OPTIMIZE TABLE을 실행하여 테이블 조각 모음을 실행
합니다. MySQL이 지난 24시간 이내에 시작되었습니다. 권장 사항이 정확하지 않을 수 있습니다.
시스템 안정성을 위해 전체 MySQL 메모리 사용 공간을 줄입니다.
조인 쿼리를 항상 인덱스
변수를 활용하여 조정:
* MySQL의 최대 메모리 사용량은 위험할 정도로 높습니다.
MySQL 버퍼 변수를 늘리기 전에 RAM을 추가하세요. *
query_cache_size(> 32M)
Join_buffer_size(> 32.0M 또는 항상 조인과 함께 인덱스 사용)
my.cnf의 현재 mysqld 설정:
[mysqld]
local-infile=0
datadir=/var/lib/mysql
user=mysql
Symbolic-links=0
포트 = 3306
소켓 = /var/lib/mysql/mysql.sock
Skip-external-locking
key_buffer_size = 150M
max_allowed_packet = 160M
max_connections = 110
wait_timeout = 60
query-cache-type = 1
query-cache-size = 32M
query_cache_limit = 2M
thread_cache_size = 16
tmp_table_size = 32M
max_heap_table_size = 32M
Join_buffer_size = 32M
table_open_cache = 128
table_cache = 1600
sort_buffer_size = 5 12K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 2M
innodb_log_buffer_size = 8M
답변1
여기에 다소 이상한 데이터베이스가 있습니다. 읽기보다 쓰기를 훨씬 더 많이 수행하고 있습니다.
Innodb와 잘 실행되도록 DBMS를 조정하는 것이 정말 중요합니다.또는MyISAM과 잘 작동하도록 조정했지만 두 테이블 유형이 혼합되어 있는 것 같습니다. 두 가지 모두에 최적인 DBMS를 가질 수는 없습니다. 단일 엔진으로 데이터 마이그레이션을 시작해야 합니다. 데이터베이스의 쓰기 작업이 많은 특성을 고려하면 Innodb를 권장합니다.
총 버퍼: 전역 480.0M + 스레드당 33.5M(최대 스레드 110개)
현재 스왑이 발생할 위험은 주로 연결당 메모리 사용량에 따라 결정됩니다. 하지만 이는 단지위험방금. 또한 110개의 동시 연결이 필요한지 여부도 설정해야 하며 가급적이면 이를 약간 줄이는 것이 좋습니다. 일반적으로 sort_buffer_size는 연결당 메모리를 사용하는 주요 원인이지만 사용자의 메모리는 기본값의 4분의 1입니다.
innodb에서 통합하는 경우 innodb 버퍼 풀 크기를 늘려야 할 수도 있습니다.
다양한 값을 가지고 놀 수 있습니다여기.