집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 메모리 매개변수 최적화
1. 키 버퍼
A. 매개변수 key_buffer_size는 myisam 엔진의 테이블에만 영향을 미칩니다.
B. 인덱스 읽기 속도를 결정합니다.
C. 이 매개변수가 적절하게 설정되었는지 평가하려면 '%key_read%'와 같은 상태를 표시하는 두 가지 상태 값을 확인할 수 있습니다.
D. Key_read_requests는 총 요청 수를 나타냅니다. , key_reads는 디스크 읽기 수를 나타냅니다.
E. key_reads / key_read_requests는 가능한 한 낮아야 하며, 최소 1:100, 1:1000이 더 좋습니다.
F. key_buffer_size를 추정하는 것은 각 테이블의 값을 데이터베이스에 넣는 것입니다. 인덱스가 차지하는 전체 공간을 살펴보겠습니다.
2. 쿼리 캐시
A. 쿼리 캐시는 주로 이 버퍼에 SELECT 문과 쿼리 결과를 저장합니다.
B. db 상태 확인: '%qcache%'
C. 매개변수 query_cache_type은 일정 기간 이후의 서버 상태 값을 지정합니다.
현재 캐시된 항목 수를 나타내는 캐시 12737의 Qcache 쿼리
Qcache 삽입 20649006
Qcache 조회수 79060095 반복 쿼리 비율이 상당히 높은 것 같습니다
Qcache lowmem PRunes 617913 캐시가 너무 부족한 경우가 너무 많습니다
Qcache가 캐시되지 않음 189896
Qcache 여유 메모리 18573912 현재 남은 캐시 공간
Qcache free block 5328 이 숫자는 약간 큰 것 같고 조각이 많습니다
Qcache 총 블록 30953
F. 결과에 따르면 쿼리 캐시 값을 더 크게 설정해야 합니다.
G. Qcache_free_blocks. 값이 매우 크면 버퍼에 조각이 많다는 뜻입니다.
H. Qcache_lowmem_prunes 값이 매우 크다는 뜻입니다. 이는 버퍼링이 부족한 경우가 많습니다. 동시에, Qcache_hits 값이 매우 크다면 쿼리 버퍼가 매우 자주 사용된다는 의미입니다. 이때, Qcache_hits 값이 작다면 쿼리가 반복된다는 의미입니다. 이 경우 쿼리 버퍼를 사용하면 효율성에 영향을 미칩니다. 그러면 쿼리 버퍼링을 사용하지 않는 것이 좋습니다. 또한 SELECT 문에 SQL_NO_CACHE를 추가하면 쿼리 버퍼가 사용되지 않음을 명확하게 나타낼 수 있습니다.
3. 테이블 캐시
A. table_cache는 테이블 캐시의 크기를 지정합니다.
B. 테이블에 다른 테이블 캐시가 있는 경우 버퍼, 공간, 테이블 내용에 더 빠르게 액세스할 수 있도록 테이블을 열어 배치합니다.
C. 피크 시간의 Open_tables 및 Opened_tables 상태 값을 확인하여 확인할 수 있습니다. table_cache 값을 늘려야 하는지 여부. open_tables가 table_cache와 동일하고 open_tables가 지속적으로 증가하는 경우 table_cache의 값을 늘려야 합니다.
D. table_cache는 무작정 큰 값으로 설정할 수 없습니다. 너무 높게 설정하면 파일 설명자가 부족하여 성능이 불안정해지거나 연결이 실패할 수 있습니다.
4. Innodb 버퍼
A. innodb_buffer_pool_size - 이는 Innodb 테이블에 매우 중요합니다. Innodb 테이블은 MyISAM 테이블보다 버퍼링에 더 민감합니다. MyISAM은 기본 key_buffer_size 설정에서 잘 실행될 수 있지만 Innodb는 기본 innodb_buffer_pool_size 설정에서 달팽이 속도로 실행됩니다.
B. Innodb는 데이터와 인덱스를 모두 캐시하므로 MySQL 데이터베이스 메모리를 운영체제에 너무 많이 맡길 필요가 없으므로 Innodb만 사용해야 하는 경우에는 70-까지 설정하면 됩니다. 사용 가능한 메모리의 80%.
C. 데이터 볼륨이 크지 않고 크게 증가하지 않는 경우 innodb_buffer_pool_size를 너무 크게 설정할 필요는 없습니다.
D. innodb_log_file_size는 쓰기 로드가 특히 큰 데이터 세트의 경우 중요합니다. 값이 클수록 성능은 좋아지지만 복구 시간이 길어질 수 있으니 주의하세요. 저는 서버 크기에 따라 보통 64~512MB로 설정합니다. innodb_log_buffer_size의 기본 설정은 적당한 쓰기 로드 및 짧은 트랜잭션에서 허용 가능한 서버 성능을 제공합니다.
E. Innodb가 MyISAM보다 1000배 느리기 때문에 innodb_flush_logs_at_trx_commit인가요? 아마도 이 매개변수를 수정하는 것을 잊은 것 같습니다. 기본값은 1입니다. 이는 커밋된 모든 업데이트 트랜잭션(또는 트랜잭션 외부의 모든 명령문)이 디스크에 플러시된다는 의미입니다. 이는 특히 배터리 지원 캐시가 없는 경우 리소스를 많이 사용합니다. 많은 응용 프로그램, 특히 MyISAM에서 변환된 응용 프로그램은 해당 값을 2로 설정하면 문제가 없습니다. 즉, 로그가 디스크에 플러시되지 않고 운영 체제 캐시에만 플러시된다는 의미입니다. 로그는 여전히 매초마다 디스크에 플러시되므로 일반적으로 초당 1~2회의 업데이트 비용이 손실되지 않습니다. 0으로 설정하면 속도가 훨씬 빨라지지만 상대적으로 안전하지도 않습니다. MySQL 서버가 충돌하면 일부 트랜잭션이 손실됩니다. 2로 설정하면 운영 체제 캐시로 플러시되는 트랜잭션 부분이 손실됩니다.
위 내용은 Mysql 메모리 매개변수 최적화 내용입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!