2012-08-03 24 views
1

我使用Ubuntu 12.04 LTS在EC2 m1.medium实例(3.75 Gb内存,2个EC2计算单元,410 Gb实例存储,性能适中)上运行基于Django的站点。在我的EC2实例的MySQL设置如下(从/etc/mysql/my.cnf):如何使用Django/Apache/mod_wsgi/MySQL最大化EC2的性能?

的key_buffer = 16M
max_allowed_pa​​cket个= 16M
thread_stack = 192K
thread_cache_size的= 8
query_cache_limit = 1M
query_cache_size变量= 16M

从/etc/apache2/sites-available/mysite.com的mod_wsgi的设置:

WSGIDaemonProcess mysite.com用户=我组=我处理= 7个 线程= 20最大请求= 1000000

鉴于我的配置是什么进程/线程/请求的最大数,我可以组?我尝试了一些值,但他们导致MySQL崩溃。可以将MySQL key_buffer设置为0.75Gb(EC2实例的3.75Gb RAM的20%)吗?提前致谢!

回答

1

你的MySQL变量的一切似乎非常低。首先最重要的是:你使用的是什么存储引擎? 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 | 
+---------------+ 

这会告诉你你的索引有多大。如果您有足够的内存,您应该将此值粗略设置为key_buffer_size。但不要增加这个高于你的免费RAM的50-60%。

如果您使用InnoDB的尝试设置innodb_buffer_pool你的数据集的大小与指标:

> 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%其他应用程序的内存使用情况。

只有通过这些更改之一,您才能获得显着的性能提升。

可以增加thread_cache_size的以及30-50或更多,如果你看到由Threads_created状态变量快速增长。

当然还有很多进一步的优化,但这会使您获得最大性能的80-90%。

0

您是否对您的所有网站有任何实时监控,以便您了解它的实际情况?观看我的PyCon谈话,您希望意识到的一件事是,这一切都取决于您的具体应用程序,我们对此一无所知。

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