PostgreSQL 数据库检测到 ShareLock 死锁的处理方法_shedlock postgresql o ...

打印 上一主题 下一主题

主题 331|帖子 331|积分 993

PostgreSQL 是一个免费数据库,对于处理分析型+生意业务型混合型体系来说确实很不错,特别是版本的升级到11.2后性能提升很多,很多运行机制跟Oracle越来越接近,确实很强大,但是开源体系确实存在一些不快意地方,需要长时间项目问题集锦积累才能逐步的领悟。
而作为从非功能测试转型做技术运维,在运维过程中会从非功能方面(高可用性、高可靠性、可扩展性等)和性能测试优化方面思量确实可以制止很多生产不须要的故障问题,但是对于开源的技术在版本迭代过程中总会有些不快意的技术故障照旧需要我们自己持续性学习、挖掘、积累、提升,才能确保技术能持续满足业务运营发展和市场需求。
如下问题是我们17年上线的体系,经2年的运行,很多业务表达到千万级,导致需要读写分离、分表等来优化,但是问题照旧偶然出现,分析技术还不到位,例如如下:
问题缘故原由:

目宿世产环境使用postgres9.5版本,主从设置,但是因为行业业务的特别性,有些回访表等都是三四百万级别的,而且日常更新频繁度非常高,日常使用频繁比较高的表,一天insert、update都是接近十万,delete三四万以上,导致在对该表的统计信息禁绝确,而pg默认 autovacuum默认参数导致部分表因本身存量数据大,更新比例小,导致这些日常被用到的大表反而没办法被重新统计分析,最终导致磁盘IO 高,CPU 高问题,而因为在调整过程中调整不当也导致如下,在对表进行批量update 时,而PG就进行 autovacuum_analyze,效果导致出现 ShareLock错误,详细错误如下:
错误内容:

  1. 2019-04-14 15:15:47,707 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 2-
  2. 2019-04-14 15:15:47,707 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - org.apache.shiro.web.servlet.ShiroHttpSession@
  3. 461f4ab1
  4. 2019-04-14 15:16:15,952 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 2-
  5. 2019-04-14 15:16:15,952 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - org.apache.shiro.web.servlet.ShiroHttpSession@
  6. 285d498f
  7. 2019-04-14 15:16:18,138 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 1-61322fb9-7ca7-482b-99ee-913074957a94
  8. 2019-04-14 15:16:24,227 ERROR [500.jsp] -
  9. Error updating database. Cause: org.postgresql.util.PSQLException: 错误: 检测到死锁
复制代码
详细:进程6533等候在事务 36964707上的ShareLock; 由进程10733阻塞.
进程10733等候在事务 36964708上的ShareLock; 由进程6533阻塞.
建议:详细信息请查看服务器日志.
在位置:当更新关系"visit_crd"的元组(11314, 33)时
  1. The error may involve defaultParameterMap
  2. The error occurred while setting parameters
  3. SQL: UPDATE visit_crd SET visit_plan_id = ?, customer_number = ?, call_id = ?, time_start = ?, time_end = ?,
  4. duration = ?, type = ?, route = ?, cpn = ?, cdpn = ?, recording = ?, trunk_number = ?, update_by = ?, updat
  5. e_date = ?, remarks = ?, affiliation = ?, update_ind = ?, execute_ind = ? WHERE id = ?
  6. Cause: org.postgresql.util.PSQLException: 错误: 检测到死锁
复制代码
详细:进程6533等候在事务 36964707上的ShareLock; 由进程10733阻塞.
进程10733等候在事务 36964708上的ShareLock; 由进程6533阻塞.
建议:详细信息请查看服务器日志.
在位置:当更新关系"visit_crd"的元组(11314, 33)时
; SQL []; 错误: 检测到死锁
详细:进程6533等候在事务 36964707上的ShareLock; 由进程10733阻塞.
进程10733等候在事务 36964708上的ShareLock; 由进程6533阻塞.
建议:详细信息请查看服务器日志.
在位置:当更新关系"visit_crd"的元组(11314, 33)时; nested exception is org.postgresql.util.PSQLException: 错误: 检测到死锁
详细:进程6533等候在事务 36964707上的ShareLock; 由进程10733阻塞.
进程10733等候在事务 36964708上的ShareLock; 由进程6533阻塞.
建议:详细信息请查看服务器日志.
在位置:当更新关系"visit_crd"的元组(11314, 33)时
org.springframework.dao.DeadlockLoserDataAccessException:
问题分析:
PG 默认 autovacuum
1、autovacuum_vacuum_threshold:默认50
2、autovacuum_vacuum_scale_factor默认值为20%。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表