관리 메뉴

HAMA 블로그

무들 성능 이슈 - MySQL 본문

무들 (moodle)

무들 성능 이슈 - MySQL

[하마] 이승현 (wowlsh93@gmail.com) 2015. 12. 17. 17:16


어떻게 무들 서버 성능을 향상 시키나? - MySQL


무들은 데이타 기반 어플리케이션입니다. 그래서 데이타베이스가 빠를수록, 무들 서비스 자체도 빨라지죠.  이번 포스트에서는 무들 데이타베이스 MySQL 에 촛점을 맞춰서 성능을 올리기위한 간단한 방법들을 살펴보도록 하겠습니다.  

먼저 데이타베이스를 파인튜닝한다는것은 매우 큰 토픽이라난걸 알아두시구요. 그 주제만을 다룬 책만해도 여러권이 있을 정도입니다. 따라서 이 포스트에서는 단지 가장 증대될만한 몇 부분에 촛점을 맞춰서 설명합니다.


왜 문제가 되나?

이전 포스트 (아파치 서버) 에서 설명한것 처럼 , 무들은 사용자가 요청하면 반응해서 동적으로 컨텐츠를 보여주는 형식입니다. 각각의 페이지가 생성되는 동안 , 무들은 데이터를 데이타베이스에서 읽어서 그 페이지에 써줍니다. 디스크상에 저장된 데이타들을 읽고/쓰는것은 매우 느린 행동들 입니다. 따라서 

스토리지가 빠를수록 무들은 빨라질겁니다. 나의 테스트서버는 매우 저렴한 가상 사설 서버이며, 디스크 I/O 는 매우 느립니다. 당신이 데이타베이스를 빠르게 만들 "비밀" 은 RAM 의 활용을 가능한 많이 하는것입니다. RAM은 디스크에 비해 비교도 안될만큼 빠르니깐요. 

무들 데이타베이스 사이즈 계산 

첫번째로 해야할것은 얼마나 많은 공간을 무들 데이터베이스가 사용하는지 체크하는것이다.

mysql - u root -p

mysql 콘솔로 들어가서  아래와 같이 입력하면 

SELECT table_schema "DB", sum(data_length + index_length)/1024/1024 "DB size in MB" FROM information_schema.TABLES GROUP BY table_schema;

아래와 비슷하게 출력될것입니다.

+--------------------+---------------+
| DB                 | DB size in MB |
+--------------------+---------------+
| information_schema |    0.00878906 |
| moodle             |  251.82812500 |
| mysql              |    0.65609837 |
| performance_schema |    0.00000000 |
| phpmyadmin         |    0.02246094 |
+--------------------+---------------+
5 rows in set (1.26 sec)

이 예에서 무들 데이타베이스는 250MB 의 공간을 가지고있습니다. (이것을 체크해두세요 나중에 필요)


innodb_buffer_pool_size 를 계산해보자

이  옵션은 당신의 무들 성능에 가장 큰 임팩트를 주기 쉬운데, 간단히 말해서 얼마나 많이 RAM 에 
데이터를 저장되게 할것인가 라는 겁니다. (스토리지가 아니라요~)

  • 당신의 데이타베이스는 점점 커지기때문에 여분의 공간도 점점더 늘어나야하는데 , 한달에 한번정도는 확인을해서 innodb_buffer_pool_size 를 조절해야합니다. 
  • 너무 많이 설정해서 낭비하면 안되며, 적절하게 10% 정도 추가하면 좋습니다.

예를들면 :

  • 252MB + (10% of 252MB) = 277MB
  • 277MB + (10% of 277MB) = 305MB

이 예에서 나는 innodb_buffer_pool_size 를  305MB 로 세팅하였습니다.


  innodb_buffer_pool_size 항목값에서 MySQL의 임시 기억 공간인 버퍼 풀 메모리 크기를 지정한다. 이 값으로 전체 메모리의 50~80%를 권하기도 하지만, 메모리가 넉넉하지 않은 환경이라면 이 값을 20% 이하로 줄여야 할 때도 있다. 버퍼 풀 메모리가 너무 크면 하드디스크를 가상 메모리로 쓰는 작업(스와핑)이 일어나 매우 느려지는 원인이 될 수 있기 때문이다.

참고 : http://pat.im/1033

 ‘my.cnf’ 파일 설정하기

'my.cnf' 파일에 설정을 해보겠습니다.  (여긴 리눅스로 설명되있슴) 

윈도우에 MoodleWindowsInstaller-latest-29 로 설치한 무들에는 moodle\server\mysql\bin 폴더에 my.ini 가 있습니다.

sudo nano /etc/mysql/my.cnf

  • innodb_buffer_pool_size  로 검색해서 찾아봅니다. ( 리눅스던 윈도우던) 
innodb_buffer_pool_size = xxxM
  • 위에 xxxM 에 원하는 용량을 넣어보세요, 저는  305MB 로 하겠습니다.
  • 저장한후에 나와서 MySQL 서버를 재 시작하세요.
sudo service mysql restart<span style="text-align: justify;"> </span>

MySQL InnoDB Configuration file

Click to zoom in


보너스 -  진단툴 사용하기 


tuning-primer.sh 이나  mysqltuner.pl  같은 툴은 MySQL 서버를 더 나은 성능을 보장하는 옵티마이즈 할수 있게 도와줍니다. 이런툴은 MySQL 서버이 어떻게 사용되는지 당신에게 알려주며 그것을 토대로 설정등을 바꾸게 유도합니다. 


1. Tuning-primer.sh

  • 다음 코드를 SSH 윈도우에 복사/붙히기하시고 모든 라인에서 엔터를 누르세요.
wget http://www.day32.com/MySQL/tuning-primer.sh
cd /root/
chmod +x tuning-primer.sh
./tuning-primer.sh
  • 다음과 같은 결과를 얻을수 있을겁니다.

tuning-primer.sh results example

Click the image to zoom in

  • 붉은색의 부분을 볼 필요가 있으며, 어드바이스를  해줄겁니다.


2. Mysqltuner.pl

  • 다음 코드를 SSH 윈도우에 복사/붙히기하시고 모든 라인에서 엔터를 누르세요.
wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl
cd /root/
chmod +x mysqltuner.pl
./mysqltuner.pl
  • 다음과 같은 결과를 얻을수 있을겁니다.

Mysqltuner.pl for Moodle

Click the image to zoom in

  •  [!!] 표시되는부분을 유심히 보셔야하며 , ‘Recommendations’ 섹션도 참고하세요.




무들 아파치 성능 이슈

http://www.iteachwithmoodle.com/2014/01/20/optimizing-a-moodle-server-step-1-fine-tune-apache/


무들 MySQL 성능 이슈

http://www.iteachwithmoodle.com/2014/01/21/how-to-optimize-a-moodle-server-part-2-mysql/


Comments