Oracle线上执行SQL特别慢的原因分析

一、背景:

线上反馈一张表select * from table where id=xxx语句执行特别慢,超过60s超时不能处理,第一直觉是索引失效了,开始执行创建索引语句create index index_name on table() online。但是执行了超过20分钟索引还没有创建成功,下意识觉得不正常。

按照过往经验,我应该查查是否有锁表的,但是当时不知道那根脑子抽筋了,在客户现场plsq中瞎点开了,突然发现一个窗口中的语句如下:

for update!!!

for update!!!

for update!!!

这敏感的字眼刺伤了我的眼睛。

再左上角一看,事务未提交的,谁干的!!!

赶快先回滚了,select和insert正常了,内心波涛汹涌,在公司群里发了图片发了牢骚。

二、锁表分析:

使用 plsql进行表数据编辑时如果是用for update 编辑,那么编辑完如果不提交就会直接锁表,还是全表锁。

一定一定务必使用rowid进行更新操作,使用rowid进行更新数据时,属于行级锁,编辑时表不受影响,直到最后一步提交时才当做一个原子去上锁/执行/释放锁一步完成。所以一定要用rowid,官方也推荐用rowid,弃用for update。

相关推荐

  1. SQL执行原因?如何排查?

    2024-07-17 23:16:01       23 阅读
  2. Oracle分析SQL执行调优

    2024-07-17 23:16:01       45 阅读
  3. MyBatis特殊SQL执行

    2024-07-17 23:16:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 23:16:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 23:16:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 23:16:01       58 阅读
  4. Python语言-面向对象

    2024-07-17 23:16:01       69 阅读

热门阅读

  1. Bigdata-Docker构建大数据学习开发环境

    2024-07-17 23:16:01       18 阅读
  2. Flutter实战小案例

    2024-07-17 23:16:01       21 阅读
  3. 【读书笔记】训练自己的数据集yolov8

    2024-07-17 23:16:01       22 阅读
  4. C#自定义异常(Exception)的实现

    2024-07-17 23:16:01       24 阅读
  5. JDK 方法中的小坑

    2024-07-17 23:16:01       19 阅读
  6. LVS集群简介

    2024-07-17 23:16:01       21 阅读
  7. 类和对象-多态-纯虚函数和抽象类

    2024-07-17 23:16:01       19 阅读
  8. 建筑产业网元宇宙的探索与实践

    2024-07-17 23:16:01       21 阅读
  9. 微信小程序加载动画文件

    2024-07-17 23:16:01       26 阅读
  10. 刷题记录:LeetCode 925.长按键入

    2024-07-17 23:16:01       21 阅读
  11. 实际项目中JVM调优

    2024-07-17 23:16:01       17 阅读