我有一个 MySQL 5.5.23 数据库,它执行大约 3k qps,其中 5% 是写入。最近,我遇到了随机写入冻结的大问题。一切都进行得很顺利,然后突然间任何写入都停止在“更新”或“正在更新”状态。他们在这种状态下停留大约一两分钟,然后终于完成。问题是连接数量如此之多,当它们像这样随机冻结时,连接保持打开状态,然后我不可避免地会遇到太多连接错误。
在 INSERT 和 UPDATE 查询期间,它发生在所有表上。
有没有人见过这个?有什么可以做的吗?
我将 Amazon RDS 与他们提供的最大实例一起使用。我非常乐意提供你们需要的任何信息,请告诉我那是什么。
更新:我要插入的主表是:
CREATE TABLE `mytable` (
`hash` varchar(5) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
`name` varchar(256) DEFAULT NULL,
`ip` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`deletehash` char(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
`datetime` datetime NOT NULL,
`api_key` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs DEFAULT NULL,
`account_id` int(10) unsigned DEFAULT NULL,
`type` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`width` int(10) unsigned NOT NULL DEFAULT '0',
`height` int(10) unsigned NOT NULL DEFAULT '0',
`size` int(10) unsigned NOT NULL DEFAULT '0',
`animated` tinyint(1) NOT NULL DEFAULT '0',
`views` int(10) unsigned NOT NULL DEFAULT '0',
`lastviewed` datetime NOT NULL,
PRIMARY KEY (`hash`),
UNIQUE KEY `deletehash` (`deletehash`),
KEY `datetime` (`datetime`),
KEY `account_id` (`account_id`),
KEY `ip` (`ip`),
KEY `api_key` (`api_key`),
KEY `views` (`views`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
样本插入:
insert into mytable (hash, name, ip, deletehashe, datetime, api_key, account_id, type, width, height, size, animated, views, lastviewed) values('abcde', 'file name', '127.0.0.1', 'abcdefghijklmn', '2012-05-31 00:00:00', NULL, NULL, 'mime/type', 0, 0, 0, 0, 0, '0000-00-00 00:00:00');
示例更新:
update mytable set views = views+1, lastviewed = NOW() where hash = 'abcde';