我正在使用Ubuntu 12.04 LTS在EC2 m1.medium实例(3.75 Gb内存,2 EC2计算单元,410 Gb实例存储,性能适中)上运行Django驱动的站点 . 我的EC2实例上的MySQL设置如下(来自/etc/mysql/my.cnf):
key_buffer = 16M max_allowed_packet = 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 user = me group = me processes = 7 threads = 20 maximum-requests = 1000000
根据我的配置,我可以设置的最大进程数/线程数/请求数是多少?我尝试了一些值,但它们导致MySQL崩溃 . 可以将MySQL key_buffer设置为0.75Gb(EC2实例上3.75Gb RAM的20%)吗?提前致谢!
2 回答
你所有的MySQL变量看起来都很低 . 首先,最重要的是:你使用的是哪种存储引擎? Key_buffer_size仅对 MyISAM 存储引擎有效 .
如果您正在使用 MyISAM ,请执行以下操作:
这将显示您的索引有多大 . 如果有足够的RAM,则应将此值大致设置为 key_buffer_size . 但是不要将此值提高到可用RAM的50-60%以上 .
如果您正在使用 InnoDB ,请尝试使用索引将 innodb_buffer_pool 设置为数据集的大小:
您可以将其设置为可用RAM的80%,当然要考虑其他应用程序的内存使用情况 .
只有通过其中一项更改,您才能获得显着的性能提升 .
如果您看到 threads_created 状态变量快速增加,您可以将 thread_cache_size 增加到大约30-50或更多 .
当然还有很多进一步的优化,但这将使你获得可能的最大性能的80-90%左右 .
您是否在所有站点都进行了实时监控,以便了解它的确实在做什么?观看我的PyCon演讲,你会发现有一件事情,这一切都取决于你的具体应用,我们对此一无所知 .
http://lanyrd.com/2012/pycon/spcdg/