2

我们在 Amazon EC2 上运行 2 个托管 Magento 电子商务站点和 1 个 MySQL 数据库服务器的 Web 服务器。

我们在 MySQL 服务器上遇到了主要的性能问题、死锁、“超过锁定等待超时”错误等,并且很难解决这些问题。

我们最近将 db 服务器升级到了 m1.xlarge 实例(来自 m1.large),但我们仍然会继续遇到这些问题。

我们一直将这些问题归因于我们经常在 EC2 服务器上看到的坏磁盘 IO,但最近我看到了死锁等问题,即使磁盘 IO 很好。

“sar”命令显示我们在高峰时间或当我们执行数据库密集型操作(如通过 Magento API 创建发票)时磁盘 IO 性能非常差。我们经常看到 iowait 高达 20% 以上。

下面是一个屏幕截图的链接,显示了我们最近遇到的一个问题中“mtop”的结果,其中查询导致整个数据库变慢:

http://i.imgur.com/AARlc.png

此屏幕截图显示了阻止其余查询执行的一个或其他查询。它还显示了相当低的平均负载,当执行密集命令时,我们经常看到平均负载上升到 3.0。

以下是my.cnf设置:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
innodb_file_per_table=1
key_buffer=512M
max_allowed_packet=64M
table_cache=512
innodb_thread_concurrency=5
innodb_buffer_pool_size=4976M
innodb_additional_mem_pool_size=8M
innodb_log_file_size=128M
innodb_log_buffer_size=8M
thread_cache_size=150
sort_buffer_size=4M
read_buffer_size=4M
read_rnd_buffer_size=2M
myisam_sort_buffer_size=64M
tmp_table_size=256M
query_cache_type=1
query_cache_size=128M
max_connections=400
wait_timeout=28800
innodb_lock_wait_timeout=120
max_heap_table_size=256M
long_query_time=3
log-slow-queries=...mysql-slow.log

[mysqld_safe]
log-error=...mysqld.log
pid-file=...mysqld.pid

我们已经pt-query-digest广泛使用该功能来分析我们的 MySQL 慢查询日志。

基本上我们看到sales_flat_quote table更新和插入的速度非常慢,但许多其他表也是如此。

sales_flat_quote虽然不是特别大,但表中只有大约 100k 行。

4

3 回答 3

1

可能有几个根本原因:

  • 您的一些慢查询可能会锁定表,从而使其他查询排队
  • 您的查询可能未优化
  • 您的查询可能需要一些表上的更多索引

使用这个官方工具检查你最慢的查询:

mysqldumpslow
于 2012-05-23T10:19:48.487 回答
1

我们在我们的 mysql EC2 服务器上观察到了类似的问题,但是,我们很快将我们的数据库迁移到了 RDS 实例。从那以后,问题很少。有人可能会争辩说 RDS 成本高昂,而 EC2 成本不高,但是,您还可以节省花在管理数据库/日常备份等上的时间。

于 2012-05-23T10:24:51.630 回答
0

我建议将您的数据库迁移到 RDS 实例。

于 2013-12-13T16:07:52.617 回答