gpt4 book ai didi

mysql - 缓慢的 MySQL InnoDB 插入和更新

转载 作者:行者123 更新时间:2023-11-29 01:04:33 24 4
gpt4 key购买 nike

我正在使用 magento 并且网站运行速度很慢。服务器上的负载非常非常轻。我已验证 cpu、磁盘 i/o 和内存很轻 - 始终低于 30% 可用。 APC 缓存已启用——我正在使用新的遗物来监视服务器,问题很明显是插入/更新。

我已经隔离了所有插入和更新语句的缓慢。选择很快。无论是从我的应用程序还是命令行 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 的 dv 盒。我安装的 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 ;

最佳答案

首先:(process_id='8') - '8'char/varchar,不是 int,所以mysql先转换值。

在我的系统上,我有很长时间(超过一秒)来更新 users.last_active_time。

原因是我有几个查询需要执行很长时间。当我加入他们的用户表时。这导致要读取的表被阻塞。 SELECT 死锁。

我将查询从:JOIN 重写为:子查询,问题消失了。

关于mysql - 缓慢的 MySQL InnoDB 插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com