1

我正在使用 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_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 user=me group=me processes=7 threads=20 maximum-requests=1000000

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

4

2 回答 2

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 。但不要将其增加到高于可用 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 |
+--------------+

您可以将其设置为高达 80% 的可用 RAM,当然要考虑其他应用程序的内存使用情况。

只有通过其中一项更改,您才能获得显着的性能提升。

如果您看到threads_created状态变量快速增加,您也可以将thread_cache_size增加30-50 或更多。

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

于 2012-08-03T08:14:39.260 回答
0

您是否在您的所有站点上进行了实时监控,以便您知道它真正在做什么?观看我的 PyCon 演讲,您希望会意识到这一切都取决于您的特定应用程序,而我们对此一无所知。

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

于 2012-08-03T05:41:32.577 回答