PostgreSQL 数据库检测到 ShareLock 死锁的处理方法
PostgreSQL 是一个免费数据库,对于处理分析型+交易型混合型系统来说确实很不错,特别是版本的升级到11.2后性能提升很多,很多运行机制跟Oracle越来越接近,确实很强大,但是开源系统确实存在一些不如意地方,需要长时间项目问题集锦积累才能慢慢的领悟。
而作为从非功能测试转型做技术运维,在运维过程中会从非功能方面(高可用性、高可靠性、可扩展性等)和性能测试优化方面考虑确实可以避免很多生产不必要的故障问题,但是对于开源的技术在版本迭代过程中总会有些不如意的技术故障还是需要我们自己持续性学习、挖掘、积累、提升,才能确保技术能持续满足业务运营发展和市场需求。
如下问题是我们17年上线的系统,经2年的运行,很多业务表达到千万级,导致需要读写分离、分表等来优化,但是问题还是偶尔出现,说明技术还不到位,例如如下:
问题原因:
目前生产环境使用postgres9.5版本,主从配置,但是因为行业业务的特殊性,有些回访表等都是三四百万级别的,而且日常更新频繁度非常高,日常使用频繁比较高的表,一天insert、update都是接近十万,delete三四万以上,导致在对该表的统计信息不准确,而pg默认 autovacuum默认参数导致部分表因本身存量数据大,更新比例小,导致这些日常被用到的大表反而没办法被重新统计分析,最终导致磁盘IO 高,CPU 高问题,而因为在调整过程中调整不当也导致如下,在对表进行批量update 时,而PG就进行 autovacuum_analyze,结果导致出现 ShareLock错误,具体错误如下:
错误内容:
2019-04-14 15:15:47,707 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 2-
2019-04-14 15:15:47,707 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - org.apache.shiro.web.servlet.ShiroHttpSession@
461f4ab1
2019-04-14 15:16:15,952 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 2-
2019-04-14 15:16:15,952 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - org.apache.shiro.web.servlet.ShiroHttpSession@
285d498f
2019-04-14 15:16:18,138 ERROR [thinkgem.jeesite.common.repeat_form_validator.Token] - 1-61322fb9-7ca7-482b-99ee-913074957a94
2019-04-14 15:16:24,227 ERROR [500.jsp] -
Error updating database. Cause: org.postgresql.util.PSQLException: 错误: 检测到死锁
详细:进程6533等待在事务 36964707上的ShareLock; 由进程10733阻塞.
进程10733等待在事务 36964708上的ShareLock; 由进程6533阻塞.
建议:详细信息请查看服务器日志.
在位置:当更新关系"visit_crd"的元组(11314, 33)时
The error may involve defaultParameterMap
The error occurred while setting parameters
SQL: UPDATE visit_crd SET visit_plan_id = ?, customer_number = ?, call_id = ?, time_start = ?, time_end = ?,duration = ?, type = ?, route = ?, cpn = ?, cdpn = ?, recording = ?, trunk_number = ?, update_by = ?, updat
e_date = ?, remarks = ?, affiliation = ?, update_ind = ?, execute_ind = ? WHERE id = ?
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%。
3、autovacuum_analyze_threshold:默认50。
4、autovacuum_analyze_scale_factor默认10%
第一次优化:
autovacuum_vacuum_scale_factor = 0.001autovacuum_analyze_scale_factor = 0.001
结果导致如上错误信息:
第二次优化:
autovacuum_vacuum_scale_factor = 0.03autovacuum_analyze_scale_factor = 0.03
问题得到解决
参考连接 :
PostgreSQL 数据库检测到 ShareLock 死锁的处理方法 :https://mp.weixin.qq.com/s/iGnRKIavnG0Q9TiGXVl1rg
PostgreSQL 数据库检测到 ShareLock 死锁的处理方法相关推荐
- linux登录pg数据库命令,PostgreSQL数据库pg_dump命令行不输入密码的方法
对于PostgreSQL数据库的备份按照官方手册的方法之一就是采用"SQL Dump"的方式(另一种方式是直接备份文件系统中的文件,可参考官方手册). 基本用法如下: pg_dum ...
- pg库sharelock_PG数据库错误: 检测到ShareLock死锁处理
PostgreSQL 是一个免费数据库,对于处理分析型+交易型混合型系统来说确实很不错,特别是版本的升级到11.2后性能提升很多,很多运行机制跟oracle越来越接近,确实很强大,但是开源系统确实存在 ...
- 详解PostgreSQL数据库中的两阶段锁
点击上方"蓝字" 关注我们,享更多干货! 数据库中的对象是共享的,假如不同的用户同时修改某个对象,就会出现数据错乱,从而破坏数据库的数据一致性,违反事务的隔离性原则. 为了满足隔离 ...
- PostgreSQL流复制之二:pgpool-II实现PostgreSQL数据库集群(转发+整理)
转发来源: PostgreSQL的集群技术比较:https://iwin.iteye.com/blog/2108807 参考:https://blog.csdn.net/yaoqiancuo3276/ ...
- linux查找postgre进程,postgresql数据库某一个进程占用大量CPU,问题排查详解
postgresql某一个进程占用大量 CPU,问题排查,目前服务器cpu为4核,内存8G 1.查下是不是我们的业务SQL SELECT procpid, START, now() - START A ...
- 使用PostgREST的RestAPI操作PostgreSQL数据库教程
使用PostgREST的RestAPI操作PostgreSQL数据库教程 表和视图 公开的架构中的所有视图和表均可被查询的活动数据库角色访问,并且可供活动数据库角色访问.它们暴露在一级深度路线中.例如 ...
- 使用PostgREST构建PostgreSQL数据库的REST风格API
使用PostgREST构建PostgreSQL数据库的REST风格API 欢迎使用PostgREST!在本教程中,我们将使事情开始运行,以便您可以创建第一个简单的API. PostgREST是一个独立 ...
- 将PostgreSQL数据库扩展到每个月12亿条记录的经验教训
这不是我第一次使用大型数据集.我为最大的英国公共Wi-Fi供应商设计的认证和产品管理数据库也有巨大的容量.我们每天跟踪数百万设备的身份认证.然而,该项目有资金,允许我们选择任何硬件.任何支持服务以及聘 ...
- Debezium系列之:使用Debezium接入PostgreSQL数据库数据到Kafka集群的详细技术文档
Debezium系列之:使用Debezium接入PostgreSQL数据库数据到Kafka集群的详细技术文档 一.概述 二.连接器的工作原理 1.安全 2.快照 3.Ad hoc snapshots ...
最新文章
- R语言可视化包ggplot2绘制饼图(pie chart)实战
- git flow版本
- DisplayContent、StackBox、TaskStack笔记
- html登录界面设计代码_.NET 5 开发WPF - 美食应用登录UI设计
- java中join的使用
- Question | 网站被黑客扫描撞库该怎么应对防范?
- debian下安装repo
- 新疆缺少计算机网络技术吗,新疆阿克苏职业技术学院的计算机网络技术专业好不?...
- HandlerInterceptor拦截器的使用
- 明年新iphone使用增强版5nm芯片_苹果A15芯片或将采用台积电5nm+工艺!性能提升极强...
- lol全队消息怎么发_LOL女神公开新男友?亲密合照网友酸了,随后粉丝反应太真实...
- C#LeetCode刷题之#118-杨辉三角(Pascal‘s Triangle)
- 大数据学习笔记20:MR案例——按电影热度值排序
- React Advanced 备忘
- Caffe傻瓜系列(7):solver优化方法
- 5个免费的PPT模板下载网站
- 从头学习爬虫(十六)进阶篇----第三方接口
- Eclipse Xtend - 疯狂的Java10
- 火火火---12幅算法生成火的图像
- matplotlib-10 title添加标题
热门文章
- 一等奖60万,首届“唱圆”杯AI翻译大赛报名中
- acrobat xi pro 简体中文语言支持包_恐龙模拟新作《Paleo Pines》Steam明年发售 支持简中...
- mysql触发器 多数据_mysql的触发器同数据库多表的数据操作_MySQL
- 用curl访问HTTPS站点并登录
- 青书学堂计算机科学与技术,青书学堂考试 答案2019佳木斯信息计算机.doc
- 在对比中理解 Node
- input单选框多选框时可用的事件
- 深入理解Flex布局以及计算
- gitlab 项目分支管理的一种策略
- 如何分析解读systemstat dump产生的trc文件