【发布时间】: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”的结果,其中查询导致整个数据库变慢:
此屏幕截图显示了阻止其余查询执行的一个或其他查询。它还显示了相当低的平均负载,当执行密集命令时,我们经常看到平均负载上升到 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