Amazon EC2上的MySQL/Magento性能问题

Amazon EC2上的MySQL/Magento性能问题,mysql,magento,amazon-ec2,Mysql,Magento,Amazon Ec2,我们在Amazon EC2上运行两台web服务器,分别托管一个Magento电子商务站点和一个MySQL数据库服务器 我们在MySQL服务器上遇到了严重的性能问题、死锁、“超过锁定等待超时”错误等,并且很难解决这些问题 我们最近将db服务器升级到了m1.xlarge实例(从m1.large),但我们仍然会遇到这些问题 我们一直将这些问题归因于EC2服务器上常见的坏磁盘IO,但最近我发现即使在磁盘IO正常的情况下也存在死锁等问题 “sar”命令表明,在峰值时间或执行数据库密集型操作(如通过Mage

我们在Amazon EC2上运行两台web服务器,分别托管一个Magento电子商务站点和一个MySQL数据库服务器

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

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

我们一直将这些问题归因于EC2服务器上常见的坏磁盘IO,但最近我发现即使在磁盘IO正常的情况下也存在死锁等问题

“sar”命令表明,在峰值时间或执行数据库密集型操作(如通过MagentoAPI创建发票)时,我们的磁盘IO性能非常差。我们经常看到iowait上升到20%以上

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

此屏幕截图显示了一个或另一个阻止其余查询执行的查询。它还显示了相当低的平均负载,当执行密集型命令时,我们经常看到平均负载上升到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\u flat\u quote表
的更新和插入速度非常慢,但其他许多表也是如此


sales\u flat\u quote
不是特别大,但表中只有大约10万行。

可能有几个根本原因:

  • 一些较慢的查询可能会锁定表,从而使其他查询排队
  • 您的查询可能未优化
  • 您的查询在某些表上可能需要更多索引
使用以下命令检查最慢的查询:


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

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

您好,Adrien,这些查询是Magento软件平台内的标准查询,因此我们能够更改的很少。这并不是说它们是“优化的”,因为软件有很多bug。很抱歉,我忘了添加,我们已经在使用pt查询摘要工具,它允许我们总结mysql慢速查询日志并确定最慢的查询。但是对于如何解决这些问题,我们提供的建议很少。您是否也在运行Magento?太好了,谢谢您提供的信息。我将看看Amazon RDS。在适合您流量级别的正确EC2/RDS配置(实例大小)中,Magento在RDS上的表现相当不错。我以前遇到过性能问题,但这是由于使用同一RDS实例的其他站点的拥塞造成的。将其隔离到自己的实例解决了性能问题。
mysqldumpslow