我有一个由 3 个 percona db 服务器组成的集群,这个表:
CREATE TABLE `metric` (
`metricid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`host` varchar(50) NOT NULL,
`userid` int(10) unsigned DEFAULT NULL,
`name` varchar(255) NOT NULL,
`sampleid` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`metricid`),
UNIQUE KEY `unique-metric` (`userid`,`host`,`name`,`sampleid`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000000000 DEFAULT CHARSET=utf8
每台服务器(ID 为 1、2、3)每秒运行一次此查询:
insert into metric set metricid = $serverId$now, host = $now, name = $serverId
(例如insert into metric set metricid = 31396887217, host = 1396887217, name = 3
)
并且很快我在第 1 行遇到“错误 1213 (40001):尝试获取锁定时发现死锁;尝试重新启动事务” - 鉴于我提供的 id 不重叠,因为每个服务器都使用不同前缀的 id ,为什么会发生死锁?