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。

相关推荐
鸠摩智首席音效师3 小时前
MySQL ERROR 1114 (HY000): The table is full
数据库·mysql
数据大魔方4 小时前
【期货量化实战】豆粕期货量化交易策略(Python完整代码)
开发语言·数据库·python·算法·github·程序员创富
Codeking__4 小时前
Redis的value类型介绍——zset
数据库·redis·缓存
写代码的【黑咖啡】4 小时前
深入理解 Python 中的 SQLAlchemy
开发语言·python·oracle
muddjsv4 小时前
SQLite3 核心命令全解析 (从入门到精通)
数据库
難釋懷4 小时前
认识NoSQL
数据库·nosql
亿坊电商4 小时前
利于SEO优化的CMS系统都有哪些特点?
前端·数据库
阿阿阿安4 小时前
MySQL(一)数据库风险操作场景总结
数据库·mysql
心丑姑娘4 小时前
使用ClickHouse时的劣质SQL样例
数据库·sql·clickhouse
什么都不会的Tristan5 小时前
redis篇
数据库·redis·缓存