我正在使用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%)吗?提前谢谢!
答案 0 :(得分: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 |
+---------------+
这将显示您的索引有多大。如果有足够的RAM,则应将此值大致设置为 key_buffer_size 。但是,不要将此值提高到可用内存的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%,当然要考虑其他应用程序的内存使用情况。
只有通过其中一项更改,您才能获得显着的性能提升。
如果您看到 threads_created 状态变量快速增加,您可以将 thread_cache_size 增加到30-50左右。
当然还有很多进一步的优化,但这可以让你达到可能的最高性能的80-90%。
答案 1 :(得分:0)
您是否在所有网站都进行了实时监控,以便了解它的真实情况?观看我的PyCon演讲,你会发现有一件事情,这一切都取决于你的具体应用,我们对此一无所知。