Polylang 데이타베이스 최적화

Polylang의 Language Detection 설정을 켜놓았더니 홈페이지가 많이 느려집니다. 어쩔 수 없이 이것 저것 찾아보니, 데이타베이스 최적화가 가장 먼저해야할 일이고, CDN을 사용한다던지, 빠른 호스팅을 알아본다든지 하는 어쩌면 뻔한 해결책만 찾을 수 있었습니다.

그 중에 가장 현실성 있는 것은 데이타베이스 최적화인 것 같아, 이 글에서 정리해봅니다.

절대 따라하지 마세요.

아래 내용은 그냥 아이디어를 생각해본 것입니다. 데이타 베이스를 잘 못 만지면 좋지 않은 결과를 낳을 수 있으므로 절대 따라하지 마시기 바랍니다.

Polylang 데이타 베이스 이해하기

폴리랭은 포스트, 페이지, 텍사노미에 대한 언어 정보를 저장하기 위해 워드프레스 데이타베이스를 이용합니다. 정보를 알맞은 언어로 전달하기 위해 데이타 베이스에 쿼리를 보냅니다. 그 쿼리를 잘 이해하면, 최적화의 핵심을 찾아낼 수 있습니다.

인덱싱

데이타베이스 인덱싱은 쿼리 퍼포먼스를 극적으로 향상시켜줍니다. 인덱싱을 통해, 보다 빨리 해당 정보가 있는 행을 찾을 수 있습니다.

인덱싱할 중요한 컬럼

폴리랭은 postmeta, terms, termmeta, 그리고 term_relationships 테이블을 많이 사용합니다. 다국어 사이트가 확장되면 이런 테이블과 관련한 쿼리도 늘어납니다. postmeta 테이블에서는 meta_key, meta_value 컬럼, terms 테이블에서는 term_id가 언어 정보를 제공하는 키 컬럼들입니다.

인덱싱 설정

먼저 인덱싱 설정에 앞서 데이타베이스를 백업합니다. phpMyAdmin 등을 통해 데이타 베이스에 접근합니다. phpMyAdmin, Sequel Pro, 또는 a command-line interface를 사용하면 됩니다. 그 후, 다음과 같은 SQL을 실행합니다.

ALTER TABLE wp_postmeta ADD INDEX meta_key_idx (meta_key);
ALTER TABLE wp_postmeta ADD INDEX meta_value_idx (meta_value(50));
//ALTER TABLE wp_terms ADD INDEX term_id_idx (term_id);<프라이머리키
ALTER TABLE wp_termmeta ADD INDEX term_id_meta_idx (term_id, meta_key);

인덱싱 설정 해제 방법 또는 중복인덱싱 해결하기

인덱싱이 마음에 들지 않는 다면 다시 되돌리기 위해서 다음과 같이 하면됩니다.

ALTER TABLE wp_postmeta DROP INDEX meta_key_idx;
ALTER TABLE wp_postmeta DROP INDEX meta_value_idx;
//ALTER TABLE wp_terms DROP INDEX term_id_idx;<프라이머리키
ALTER TABLE wp_termmeta DROP INDEX term_id_meta_idx;

예를 들어 meta_key는 프라이머리 키이므로 인덱싱할 필요가 없습니다. 그런데, 실수로 인덱싱했다면 다음과 같이 되돌릴 수도 있습니다. 위 ALTER나 아래 DROP문이나 같은 효과가 있습니다.

DROP INDEX meta_key_idx ON wp_postmeta;

데이타베이스 쿼리 모니터링

쿼리 관찰

  • 쿼리 모니터 플러그인을 사용해 Polylang과 관련하여 느리게 작동하는 쿼리들을 파악합니다.
  • 실행 시간이 길거나 자주 실행되는 쿼리들을 추려냅니다.

쿼리 최적화

  • 쿼리를 최적화합니다. 쿼리 최적화를 위해서는 Polylang 플러그인의 코드를 바꿔어주어야합니다. 초보자들은 건너 뛰시기 바랍니다.
  • 쿼리문이 인덱싱된 컬럼을 사용하고 전체 테이블 스캔은 가능하면 피해야합니다.

데이타베이스 캐싱

보통 Redis Object Cache 와 W 3 Total Cache 플러그인으로 데이타베이스 캐싱를 하지만, 호스팅 업체에서 Redis를 지원하지 않아서 저는 건너뜁니다. 참고로 Redis 활용을 원하는 분들을 위해 간단하게 적어보자면…

서버에 Redis 를 설치하고 Redis Object Cache 플러그인을 워드프레스에 설치한 후, wp-config.php 에 다음과 같은 정의를 추가해줍니다.

define('WP_CACHE_KEY_SALT', 'your-site-name:');
define('WP_REDIS_HOST', '127.0.0.1');

그런 다음, 워드프레스 데쉬보드에서 Redis Cache를 활성화해주면됩니다.

Redis 설치 확인

자신의 서버에 Redis 가 설치되어있는지를 알기 위해서는 shh에서 다음과 같이 실행해봅니다.

redis-cli ping

그러면, 다음과 같은 대답이 돌아와야 설치된겁니다.

PONG

레디스 설정과 작동 상황을 알아보기 위해서는

ps aux | grep redis

Leave a Comment