MySQL Error number: MY-012674; Symbol: ER_IB_MSG_849; SQLSTATE: HY000 报错 故障修复 远程处理

文档解释 Error number: MY-012674; Symbol: ER_IB_MSG_849; SQLSTAT…

文档解释

Error number: MY-012674; Symbol: ER_IB_MSG_849; SQLSTATE: HY000

Message: %s

错误说明

MySQL错误ER_IB_MSG_849 代号为MY-012674,SQLSTATE为HY000。这个错误主要是由于在InnoDB表的锁定阶段出现问题,被InnoDB引擎发现而导致的。在SELECT语句上使用FOR UPDATE这个MySQL语句,需要创建表锁,如果出现上述的错误,表示在获取锁的时候出现了问题,由于系统不能满足SELECT FOR UPDATE获取锁的请求,被抛出此异常。

常见案例

常见的案例是,由于数据库服务器出现繁忙,导致数据库忙碌,而且查询请求在尝试锁定表时失败,最后会抛出ER_IB_MSG_849错误。此外,还可能是因为用于持有表锁的活动事务中存在死锁,从而导致ER_IB_MSG_849错误发生。例如:

请求1: BEGIN;SELECT * FROM tbl FOR UPDATE

请求2: BEGIN;SELECT * FROM tbl FOR UPDATE

因为数据库繁忙,请求2先执行,查询tbl后获得表锁,这时如果请求1再次想要获得表锁tbl就会失败,最终会抛出 ER_IB_MSG_849 错误。

解决方法

1. 调整等待超时时间。当发生ER_IB_MSG_849错误时,可以提高系统的等待超时时间,以便执行SELECT FOR UPDATE等待获取表锁更长的时间,解决堵塞的问题。在系统配置中,将参数innodb_lock_wait_timeout的值更改为比默认值更大的值。

2. 显式释放锁定。关于ER_IB_MSG_849错误,原因是SELECT FOR UPDATE的请求未能获得表锁,系统被堵住。所以,如果需要避免这种情况,可以主动释放已经获得的表锁,能够有效地提高数据库服务器的效率。

3. 移除死锁。如果活动事务中存在死锁,会影响系统的整体性能,在发生ER_IB_MSG_849错误时,可以考虑移除可能出现的死锁,解决此类性能问题。

香港美国云服务器首选港服(Server.HK),2H2G首月10元开通。
港服(Server.HK)(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

为您推荐

港服(Server.HK)MongoDB教程:MongoDB 索引

MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件...

港服(Server.HK)PostgreSQL教程PostgreSQL 别名

PostgreSQL 别名 我们可以用 SQL 重命名一张表或者一个字段的名称,这个名称就叫着该表或该字段的别名。 创建...

港服(Server.HK)Memcached教程:Memcached stats 命令

Memcached stats 命令 Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号...

港服(Server.HK)Redis教程:Redis 数据类型

Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集...

港服(Server.HK)Redis教程:Redis GEO

Redis GEO Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 ...
返回顶部