我在Mysql中计算页面视图统计信息,有时会得到deat lock。
如何解决这个问题?也许我需要删除其中一个键?
但阅读表现会怎样?还是不影响?
表:
CREATE TABLE `pt_stat` (
`stat_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`post_id` int(11) unsigned NOT NULL,
`stat_name` varchar(50) NOT NULL,
`stat_value` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`stat_id`),
KEY `post_id` (`post_id`),
KEY `stat_name` (`stat_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
错误:"尝试锁定时发现死锁;尝试重新启动交易"。
UPDATE pt_stat SET stat_value = stat_value + 1 WHERE post_id = "21500" AND stat_name = 'day_20170111';
答案 0 :(得分:1)
在处理死锁时,首先要做的是查看是否有复杂的事务处于死锁状态。这是正常情况。我假设根据您的问题,更新语句在其自己的事务中,因此从逻辑数据库的角度来看,写入之间没有复杂的相互依赖性。
由于同一查询中的线程内的写入依赖性,某些多线程数据库(包括MySQL)可能会有单个语句死锁。在这里,MySQL并不孤单。已知MS SQL Server在某些情况下和工作负载中存在类似问题。问题(正如您所掌握的)是更新索引的线程可以对另一个更新索引的线程进行死锁(请记住,InnoDB表是包含行数据的叶节点的索引)。
在这些情况下,您可以做三件事: