2012-08-03 2 views
1

저는 Ubuntu 12.04 LTS를 사용하여 EC2 m1.medium 인스턴스 (3.75 Gb 메모리, 2 EC2 Compute Unit, 410 Gb 인스턴스 스토리지, 보통 성능)에서 Django 기반 사이트를 실행하고 있습니다. 내 EC2 인스턴스의 MySQL의 설정은 (/etc/mysql/my.cnf에서) 다음과 같습니다Django/Apache/mod_wsgi/MySQL을 사용하여 EC2에서 성능을 극대화하려면 어떻게해야합니까?

key_buffer = 16M
의 max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
는 query_cache_limit = 1M /etc/apache2/sites-available/mysite.com에서
query_cache_type을은 = 16M

mod_wsgi에 설정 :

WSGIDaemonProcess mysite.com 사용자가 = 나 그룹이 = 나 = 7 개 스레드 = 20 최대-요청을 처리 = 내 구성을 감안할 때

1000000, 프로세스/스레드/최대 요청 수는 내가 무엇을 할 수 있습니다 세트? 몇 가지 값을 시도했지만 MySQL 충돌로 이어졌습니다. MySQL key_buffer를 0.75Gb (EC2 인스턴스의 3.75Gb RAM의 20 %)로 설정하면 괜찮습니까? 미리 감사드립니다!

답변

1

모두는 매우 낮은 것으로 보인다. 우선 가장 중요한 것은 : 어떤 스토리지 엔진을 사용하고 있습니까? Key_buffer_size는 MyISAM 스토리지 엔진에만 적용됩니다.

당신이 다음을의 MyISAM을 사용하는 경우 :

> select sum(index_length)/1024/1024 as index_size_MB from information_schema.Tables where Table_schema = 'knagy' and Engine = 'MyISAM'; 
+---------------+ 
| index_size_MB | 
+---------------+ 
| 0.16992188 | 
+---------------+ 

이것은 당신의 인덱스가 얼마나 큰을 보여줍니다. 충분한 RAM이있는 경우 대략이 값을 key_buffer_size으로 설정해야합니다. 그러나 무료 RAM의 50-60 % 이상을 높이 지 마십시오.

> select sum(index_length + data_length)/1024/1024 as innodb_MB from information_schema.Tables where Table_schema = 'knagy' and Engine = 'InnoDB'; 
+--------------+ 
| innodb_MB | 
+--------------+ 
| 403.04687500 | 
+--------------+ 

고려해야 물론 무료 RAM의 80 %로 설정할 수 있습니다 당신이 이노을 사용하는 경우

인덱스와 데이터 집합의 크기에 innodb_buffer_pool 을 설정하려고 그 다른 응용 프로그램의 메모리 사용량.

이러한 변경 사항 중 하나만 발생하면 성능이 크게 향상됩니다. 당신이 상태 변수가 빠르게 증가 Threads_created 값을 참조하는 경우

당신은 thread_cache_size뿐만 아니라 30 ~ 50 주위에 이상을 증가시킬 수있다.

물론 추가 최적화가 많이 있지만 이는 최대 성능의 80-90 %를 향상시킬 것입니다.

0

사이트 전체에서 실시간 모니터링을 수행하고있어 실제로 수행중인 작업을 알고 있습니까? 내 PyCon 토크를 지켜보고, 당신이 바라는 한가지는 당신의 특정 애플리케이션에 달려 있다는 것이며, 우리는 그것에 대해 아무것도 모른다는 것이다. MySQL의 변수

http://lanyrd.com/2012/pycon/spcdg/

관련 문제