我正在使用magento并且在网站上有很多缓慢。服务器上的负载非常轻。我已经验证了cpu,磁盘i / o和内存不足30%的可用时间。 APC缓存已启用 - 我正在使用新的遗物来监控服务器,问题非常清楚地插入/更新。
我已经将所有插入和更新语句的速度降低了。 SELECT很快。无论是从我的应用程序还是命令行mysql运行,非常简单的表插入/更新需要2-3秒。
示例:
UPDATE `index_process` SET `status` = 'working', `started_at` = '2012-02-10 19:08:31' WHERE (process_id='8');
此表有9行,主键和1个索引。
所有插入/更新都会出现缓慢。我运行了mysqltuner,一切看起来都不错。另外,将innodb_flush_log_at_trx_commit更改为2。
此服务器上的活动非常轻 - 它是一个带1 GB RAM的DVD盒。我有magento安装,运行速度提高100倍,同样的设置负载为5倍。
我开始记录所有查询超过2秒,似乎是所有插入和全文搜索。
有人有建议吗?
这是表结构:
CREATE TABLE IF NOT EXISTS `index_process` (
`process_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`indexer_code` varchar(32) NOT NULL,
`status` enum('pending','working','require_reindex') NOT NULL DEFAULT 'pending',
`started_at` datetime DEFAULT NULL,
`ended_at` datetime DEFAULT NULL,
`mode` enum('real_time','manual') NOT NULL DEFAULT 'real_time',
PRIMARY KEY (`process_id`),
UNIQUE KEY `IDX_CODE` (`indexer_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
答案 0 :(得分:0)
首先:(process_id='8')
- '8'
是char/varchar
,而不是int
,所以mysql首先转换值。
在我的系统上,我有很长时间(超过一秒钟)来更新users.last_active_time。
原因是我有一些长时间要执行的查询。当我为users表加入它们时。这导致阻止读表。 SELECT死亡锁定。
我重写了查询:JOIN到:子查询和porblem消失了。