【问题标题】:MySQL/Magento Performance issues on Amazon EC2Amazon EC2 上的 MySQL/Magento 性能问题
【发布时间】:2012-05-23 10:09:39
【问题描述】:

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

我们在 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 行。

【问题讨论】:

    标签: mysql magento amazon-ec2


    【解决方案1】:

    可能有几个根本原因:

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

    使用this official tool检查您最慢的查询:

    mysqldumpslow
    

    【讨论】:

    • 您好 Adrien,这些查询是 Magento 软件平台内的标准查询,因此我们能够更改的内容很少。这并不是说它们是“优化的”,因为众所周知该软件存在许多错误。
    • 对不起,我忘了补充,我们已经在使用 pt-query-digest 工具,它可以让我们总结 mysql 慢查询日志并确定最慢的查询。但很少提供有关如何解决这些问题的建议。
    【解决方案2】:

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

    【讨论】:

    • 你也在运行 Magento 吗?
    • 太好了,感谢您的信息。我要去看看 Amazon RDS。
    • 在适合您的流量级别的正确 EC2/RDS 配置(实例大小)中,Magento 在 RDS 上的表现相当不错。我之前遇到过性能问题,但那是由于使用相同 RDS 实例的其他站点的拥塞造成的。将其隔离到自己的实例中解决了性能问题。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2018-10-20
      • 2011-08-20
      相关资源
      最近更新 更多