网站首页 > 技术文章 正文
最近审批了一个pg数据库ddl表结构变更的工单
变更SQL如下所示:
ALTER TABLE t_table_bind_info ALTER COLUMN third_user_id TYPE varchar(128);
原先长度小于128,本次变更为扩容varchar长度。
审批没多久后发现有CPU等告警,立即查看各监控指标和错误日志、慢日志等信息。
发现监控多项指标异常
1,DDL执行结束后立即出现错误日志 ERROR: cached plan must not change result type
2,30秒之后出现业务慢日志 ERROR: canceling statement due to statement timeout 信息。
我收到CPU告警信息后立即去手动analyze收集刚刚ddl的表统计信息,之后CPU,慢查询等立即恢复正常,业务影响消失。
其实这是两个问题,第一个关于ERROR: cached plan must not change result type报错,原因如下:
PostgreSQL的优化器和Oracle等库一样都是比较复杂的,可能会使用绑定变量,减少sql parser, plan的开销,但是当我们做数据库表结构的DDL变更时,缓存中的执行计划与结果类型就会不匹配,就会报ERROR: cached plan must not change result type报错,关于这个报错有多种解决办法如重启业务程序,杀掉数据库会话连接,deallocate the prepare等方法。但是由于当前各业务都是使用的ORM框架生成的SQL,另外我们属于OLTP在线业务,肯定是不能随意做上述操作的,我们能做的只能是在业务相对低峰期审批执行类似的工单,减少对业务的影响。
第二个报错ERROR: canceling statement due to statement timeout,是因为执行计划选择出现了问题,
超时SQL 条件为WHERE third_user_id = $1 and third_app_type = $2
and third_app_name = $3 and is_delete = false order by update_time desc limit 1
third_app_type长度变更后导致执行计划走到order by update_time索引上,从而引起慢查询,看起来有必要在业务DDL工单执行完毕后再去自动analyze 一下目标表了,这样可以减少类似问题的发生,接下来需要尽快优化这一步。
- 上一篇: Python日常应用库 python常用的库
- 下一篇: 隐藏在过时Java中的威胁 java 过时
猜你喜欢
- 2025-09-01 Docker源不生效解决方式2——自己搭建镜像服务
- 2025-09-01 5款免费POS应用帮你简化零售业务运营
- 2025-09-01 JDK 17新特性,学习,快到起飞?真猛
- 2025-09-01 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
- 2025-09-01 10款最出色的免费数据库管理工具_免费数据库管理系统软件
- 2024-11-07 国产Navicat来啦!免费使用的sql工具!
- 2024-11-07 隐藏在过时Java中的威胁 java 过时
- 2024-11-07 Python日常应用库 python常用的库
- 2024-11-07 终于等到了:VMware的Workstation Pro对个人用户免费
- 2024-11-07 甲骨文推出世界首个全自治操作系统,对云基础设施客户免费
你 发表评论:
欢迎- 09-0613.通过Excel导出数据库中的维值_数据库exp导入导出数据
- 09-06做数据分析时,SQL需要达到以下水平
- 09-06Java开发指南:JDK21下载、安装及目录解析,轻松开启编程之旅
- 09-06hive存储过程_hive存储过程环境变量
- 09-06Maven常用命令_maven常用命令有哪些
- 09-06JDK从8升级到21的问题集_jdk更新到几了
- 09-06Oracle狂刷存在感 NRF展会惊艳四座
- 09-06哪些软件支持UDI标签的生成与验证
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)