EC2实例上的Mysql:第一次查询后结果缓慢

时间:2012-04-17 12:34:29

标签: mysql performance caching buffer my.cnf

我正在尝试在具有613MB内存的Amazon EC2微型实例上配置mysql。这个实例只用于运行mysql,所以我想尽可能多地使用内存。我们在另一台主机上运行了另一个相同数据库的实例,因此我可以轻松地比较结果。

对原始数据库执行平庸查询的时间不到3秒。在我对EC2进行更改之前,它需要46秒,但现在,在更改设置后,相同的查询仅需要4秒。但是,再次执行相同的查询,似乎需要永远。

这是我在MySql my.cnf中使用的设置:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

innodb_buffer_pool_size = 128M
query_cache_size = 128M
query_cache_limit = 8M
key_buffer_size = 128M

table_open_cache = 2048
table_definition_cache = 2048
read_buffer_size = 64M
join_buffer_size = 64M
sort_buffer_size = 64M
myisam_sort_buffer_size = 64M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

我不认为myisam param应该被包括在内,因为它应该全部使用innodb,但我只是在需要时给它一些额外的内存。

如果它在首次运行时速度较慢,那么就更合乎逻辑了,之后会更快,但这似乎是不合逻辑的。

任何想法都会非常受欢迎。

2 个答案:

答案 0 :(得分:1)

EC2 micro的表现一般都很糟糕。您可以以相同的价格购买Linode / Rackspace。

答案 1 :(得分:0)

当有额外的周期可用时,亚马逊微实例“可能会在短暂的爆发中机会性地增加CPU容量。”

这意味着您已经分配了X个计算单位,但是当其他Micro实例未使用它们的分配时它可以跳转到X + N,并且您的实例将自动清除它。

这可能是您看到性能波动的原因。