back to top
3 C
New York
토요일, 12월 28, 2024

Buy now

[워드프레스 최적화] 워드프레스 성능 개선을 위한 데이타베이스(MariaDB) 최적화 방법

오늘은 워드프레스 운영을 위해 Vultr 가상서버호스팅(VPS)에 서버 설치 후 최적화하는 방안에 대해서 살펴보고 있습니다.
서버 최적화는 웹서버 최적화, DB 최적화 그리고 PHP 최적화등으로 나누어질 수 있는데요. 오늘은 이 중 DB 최적화에 대해 살펴 보겠습니다.

여기 워드프레스를 설치한 서버에는 MariaDB가 기본으로 설치되어 있으므로 MariaDB 최적화 방안 중심으로 살펴 보겠습니다.
사실 그동안 DB 부분은 접근할 엄두가 나지 않았고, 최적화가 크게 필요 없다는 생각을 했는데, 자료를 보다보니 여기에서의 최적화가 절대적으로 필요하다고 하고, 여기까지 최적화하지 않으면 두고 두고 후회할 것 같아 없는 시간을 내서 시도해 보았습니다.

1. my.cnf 위치

MariaDB를 설치했기 때문에 InnoDB 최적화에 대한 내용이니 참고하시는게 좋겠습니다.

다 아시는 것처럼 MariaDB를최적화하기 위해서는 my.cnf에서 설정을 변경해 주는데요.
이 파일은 /etc/my.cnf 또는 /etc/mysql/my.cnf에 위치하고 있습니다.

2. 최적 메모리에 대한 생각

MariaDB 최적화를 위해서 자료를 조사하다보니 메모이이야기 많이 나옵니다. 메모리는 많으면 많을수록 좋다는게 일반적인 상식이고, 이 DB와 관련해서도 마찬가지입니다.

DB가 작업하는 공간이 속도가 빠른 메모리에서 모두 진행하는게 속도를 올릴 수 있는 지름길이기 때문이죠.

그러면 도대체 어느 정도 메모리를 가지고 있어야 할까요?

일반적으로 메모리의 크기는 최소 데이타베이스 크기 정도는 확보해야 한다고 합니다. 데이타베이스 크기와 RAM의 크기가 비숫하면 별다른 세팅을 하지 않고도 어느 정도 성능을 낼 수 있다고 합니다. 만약 6GB의 데이타베이스가 있다면 메모리도 최소 6GB가 있어야 하고 이보다도 20%~30%정도 더 메모리가 있다면 최상이라는 것이죠.

그러나 일반적으로 비용의 문제이기 때문에 충분한 메모리를 가지지 못하는 경우가 생기죠. 이렇게 서버에 충분한 메모리가 없는 경우 제대로 된 MySQL/MarianDB가 작동하지 않을 수 있습니다. 그렇기에 최적화가 필요합니다.

3. MariaDB 필수 최적화 항목들

my.cnf에는 많은 설정 변수들이 있는데요. 이러한 설정들을 최적화해서 적은 메모리로 가능하는한 최고의 성능을 낼 수 있는 옵션이 무엇이 있는지 살펴 보겠습니다.

이는 가능하면 디스크 대신 빠른 메모리 영역에서 작업을 처리할 수 있도록 설정을 유도함으로써 CPU 성능과 조화를 이루어 전체 성능을 높일 수 있습니다.

3.1. innodb_buffer_pool_size

이 설정은 데이카베이스가 얼마만큼의 메모리를 가져다 쓸 것이냐를 지정하는 것으로 가장 중요한 설정 중의 하나입니다.

설치 시 기본으로 세팅되어 있는 값은 128k인데요. 많은 문헌에서 시스템 메모리의 65%~75% 권장하고 있습니다.

  • 일반적으로 5~6GB (8GB RAM)
  • 20~25GB (32GB RAM)
  • 100~120GB(128GB RAM)

Vultr에서 사용하는 5$ 플랜은 기껏 1GB 시스템 메모리를 가지고 있으므로 750MB를 할당하였습니다.

innodb_buffer_pool_size= 750M

3.2. innodb_log_file_size

innodb_log_file_size는 데이타베이스 충돌 발생 시 다시 실행하거나 이전으로 되돌릴 때 사용하는 메모리이빈다.

이 사이즈는 기본으로 48M이 할당되어 있는데요. 일반적으로 앞서 설정한 innodb_buffer_pool_size의 25% ~ 50% 정도 할당하는 게 좋다고 합니다. 다만 너무 클 필요는 없다는 지적이 있네요.

innodb_buffer_pool_size= 185MB

3.3. innodb_flush_log_at_trx_commit

이는 데이타베이스가 작동을 어떤 방식으로 기록하느냐를 설정하는 것이죠.

설정값은 1, 2, 0의 세가지가 있는데 기본은 1로 설정되어 있습니다.

1로 설정되면 트랜잭션을 수행할때마다 버퍼가 로그 파일에 기록되고 로그 파일은 다시 디스크로 플러시 됩니다.

2로 설정되면 데이타베이스가 각 트랜잭션을 완료 시 로그 파일에 기록되고 로그 파일은 1초마다 디스크로 플러시 됩니다.

0으로 설정되면 각 트랜젝션 시 아무런 기록을 하지 않고 로그 버퍼는 로그 파일에 기록되어 1초마다 디스크로 플러시 됩니다.

가장 성능이 좋은 것은 0을 선택하는 것이고, 1을 선택하면 가장 높은 신뢰성을 보여 준다고 합니다.

정전 등에 대비가 잘 되어 있다면 성능을 중요시해 0을 선택할 수도 있는데요. 저는 성능 지상주의이므로 0을 선택했습니다.

3.4. query_cache_size

query_cache_size는 SQL 실행 결과를 미리 특정 공간에 저장해 놓고, 다음 번 같은 문장으로 호출 시 빠르게 해당 결과를 보여주는 것인데요.

query_cache_size가 너무 크다면 갑자기 엄청난 쓰기 작업이 발생하면 서버는 바로 쿼리 작업을 하는 대신 cache를 찾아 작동하는데 집중해 오히려 속도가 느려집니다.
query_cache 때문에 발생하는 병목 현상은 자주 나타나는 현상으로 아주 악명이 높다고 알려졌는데요. query_cache_size는 너무 크지 않게 설정하는 게 좋으며 최고 512M이면 충분하다는 의견입니다.

또 어떤 가이드는 차라리 query_cache_size를 0으로 놓는 것을 고려하라고 충고하고 있습니다.

3.5. Disable MySQL DNS Lookups

DNS lookups 호스트 네임과 IP를 매번 확인후 작동하므로 느려질 수 있다고 합니다. 따라서 skip-name-resolve 명령어를 추가해서 이를 방지합니다.

skip-name-resolve

3.6. innodb_io_capacity

SSD와 같은 성능 좋은 Disk를 사용하고 있다면 이를 크게 올려주는 게 성능에 좋다고 합니다.
Vultr는 모두 SSD로 운영되므로 nnodb_io_capacity를 105000 이상으로 설정했습니다.

innodb_io_capacity = 15000

3.7. tmpdir

데이타베이스 서버에서 작동하는 많은 수의 쿼리를 디스크에서 메모리로 MySQL 임시 디렉통리를 변경하면 획기적으로 속도를 개선 가능합니다.

로드가 느린 쿼리가 포함된 일반적으로 최적화되지 않은 워드프레스 데이타베이스인 경우 이 설정은 큰 성능 개선이 가능하다고 하는데요.
이를 위해서 는 tmpdir을 램디스크인 tmpfs 디렉토리로 설정하면 성능을 개선할 수 있습니다.

램디스크인 tmpfs 위치가 어디인지를 확인하려면 df -h 명령어를 사용합니다.
일반적으로 linux의 fstab 파일에는 tmpfs가 /dev/shm가 기본으로 지정되어 있습니다.

# df -h

Filesystem      Size  Used Avail Use% Mounted on
udev            469M     0  469M   0% /dev
tmpfs            99M   11M   89M  11% /run
/dev/vda1        25G   16G  7.8G  67% /
tmpfs           495M     0  495M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           495M     0  495M   0% /sys/fs/cgroup
tmpfs            99M     0   99M   0% /run/user/0

[워드프레스 최적화] 워드프레스 성능 개선을 위한 데이타베이스(MariaDB) 최적화 방법 5

우리는 TMPDIR을 램디스크에 위치시키도록 만들고자 합니다. 이를 위해서는 기존에 만들어진 램디스크인 tmpfs 디렉토리를 활용하는 방법과 새롭게 램디스크를 만드는 방법이 있습니다.

아래 글을 참조해 보시죠.

[워드프레스 최적화] 데이타베이스를 램디스크에서 작동시켜 속도 개선 방법

여기에선 새롭게 램디스크를 만드는 방법에 대해서 간략 살펴보겠습니다.

먼저 /dev/shm 아래에 /dev/shm/mysql 디렉토리를 만듭니다.

mkdir -p /dev/shm/mysql

이 디렉토리의 owner와 group을 mysql로 변경

chown mysql:mysql /dev/shm/mysql

my.cnf에서 tmpdir을 지정

tmpdir=/dev/shm/mysql

MySql id 찾기

이 램디스크가 리부팅해도 계속 존재하려면 fstab에 등록을 해야하죠. 그러기 위해서 먼저 MySql id를 찾습니다.

아래 명령를 사용하면 uid 및 gid 값을 알 수 있습니다.

id mysql
uid=114(mysql) gid=116(mysql) groups=116(mysql)

fstab 파일 편집

편집기를 통해서 fstab 파일을 편집 상태로 만들어 램디스크를 등록합니다.
여기에서 여기서는 위에서 검색했던 uid와 gid 정보를 활용합니다.
nano /etc/fstab
tmpfs /dev/shm/mysql tmpfs rw,gid=116,uid=114,size=768M,nr_inodes=50k,mode=0700 0 0

램디스크 마운트

이렇게 만들어진 램디스크를 마운트 합니다.
그 전에 nginx를 재부팅합니다.

service nginx restart
mount -a

4. 시스템 적용하기

위와 같이 데이타베이스 최적화 옵션을 반영했다면 마지막으로 MySQL 등을 다시 시작합니다. 그러면 위 설정들이 반영되게 됩니다.

service mysql restart
service php7.2-fpm restart
service nginx restart

그러면 제대로 반영되고 있는지 확인해 볼까요?

먼저 MariaDB로 접속합니다. 패스워드를 치고 들어갑니다.

@happist:~# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g. 이하 생략
~

다음으로는  SHOW VARIABLES LIKE 'tmpdir'; 명령으로 tempdir을 출역토록 합니다.

~~~javascript
MariaDB [(none)]> SHOW VARIABLES LIKE 'tmpdir';
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| tmpdir        | /dev/shm/mysql |
+---------------+----------------+
1 row in set (0.02 sec)

음 , 정상적으로 tmpdir은 설정한대로 /dev/shm/mysql에 위치하고 있음을 알 수 있습니다.

10$ 제휴 프로모션으로 Vultr 가입하기

[워드프레스 최적화] 워드프레스 성능 개선을 위한 데이타베이스(MariaDB) 최적화 방법 6

5. 관련 포스팅

사이트 운영을 위한 안내 – 웹서버 세팅에서 워드프레스 설치까지(우분투 17.10, NGINX 1.13.6, Marian DB 10.2, PHP7.2)

Vultr 가상서버호스팅(VPS) 서버 성능은 어느 정도일까? 기대 이상의 성능을 보여주다.

spot_img

Latest articles

Related articles

spot_img