엄밀히 말하면 MySQL 관점에서 MySQL 인스턴스의 데이터 / 인덱싱 캐싱을 개선하는 방법에 대한 제안이 있습니다.
MySQL에는 두 가지 주요 스토리지 엔진이 있습니다.
캐싱 메커니즘은 다릅니다. 선택한 스토리지 엔진에 맞게 조정할 수있는 작업이 있습니다.
MyISAM
MyISAM은 인덱스 페이지 만 캐시합니다. 데이터를 캐시하지 않습니다. MyISAM 테이블의 I / O를 향상시키기 위해 두 가지 작업을 수행 할 수 있습니다.
MyISAM 개선 # 1
VARCHAR 열이있는 MyISAM 테이블은 초기 디자인을 건드리지 않고 내부적으로 CHAR로 변환 할 수 있습니다. mydb.mytable이라는 테이블이 있고 I / O를 향상 시키려면 다음을 수행하십시오.
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
이렇게하면 테이블 크기가 60 % -100 % 증가하지만 다른 것을 변경하지 않고 I / O에서 20-30 % 성능이 향상됩니다 . 나는 전에 DBA StackExchange에서 이것을 썼다.
MyISAM 개선 # 2
key_buffer_size 크기로 MyISAM 키 캐시를 늘려야합니다 . 이 쿼리를 실행하십시오 :
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
현재 데이터 세트를 기반으로 이상적인 key_buffer_size가 표시됩니다.
InnoDB
InnoDB는 데이터와 인덱스를 모두 캐시합니다. 모든 데이터를 InnoDB로 변환하고 현재 모든 InnoDB 데이터베이스에서 WordPress를 실행중인 경우 InnoDB 버퍼 풀 ( innodb_buffer_pool_size 크기로 조정 )의 크기를 조정해야합니다 . 이 쿼리를 실행하십시오 :
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
현재 데이터 세트를 기반으로 이상적인 key_buffer_size가 표시됩니다.
프로젝션
데이터 세트가 20 배나 증가 할 것으로 예상하는 경우이 쿼리에서 권장하는 것을 20으로 여러 번 늘리십시오. MyISAM 데이터 세트가 15MB이고 3MB가 인덱스의 합이라고 가정하십시오. 20 배 많은 데이터가있을 것으로 예상되는 경우 /etc/my.cnf에서 key_buffer_size를 60MB로 설정하십시오.
[mysqld]
key_buffer_size=60M
그런 다음 MySQL을 다시 시작하십시오. InnoDB 버퍼 풀에도 동일하게 적용됩니다.
모든 데이터가 InnoDB 인 경우 StackOverflow에 게시 한 InnoDB 인프라 의 전체 정리 를 수행해야합니다 .