IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

如何查找消耗资源较大的SQL

信春哥,系统稳,闭眼上线不回滚。 2015-01-04 22:47:30 累计浏览 15,167 次
本机暂存

对于优化来讲,查找消耗资源较大的SQL至关重要,下面介绍几个之前用到的SQL。

1.从V$SQLAREA中查询最占用资源的查询。

1select b.username username,a.disk_reads reads,
2a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
3a.sql_text Statement
4from v$sqlarea a,dba_users b
5where a.parsing_user_id=b.user_id
6and a.disk_reads > 100000
7order by a.disk_reads desc;

用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。

V$SQL是内存共享SQL区域中已经解析的SQL语句。

2.列出使用频率最高的5个查询:

1select sql_text,executions
2from (select sql_text,executions,
3rank() over
4(order by executions desc) exec_rank
5from v$sql)
6where exec_rank <=5;

3.消耗磁盘读取最多的sql top5:

1select disk_reads,sql_text
2from (select sql_text,disk_reads,
3dense_rank() over
4(order by disk_reads desc) disk_reads_rank
5from v$sql)
6where disk_reads_rank <=5;

  1. 找出需要大量缓冲读取(逻辑读)操作的查询:

1select buffer_gets,sql_text
2from (select sql_text,buffer_gets,
3dense_rank() over
4(order by buffer_gets desc) buffer_gets_rank
5from v$sql)
6where buffer_gets_rank<=5;

同分类推荐文章

  1. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  2. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)
  3. 硬件故障后数据文件大小不对故障处理—Oracle碎片扫描恢复 (2026-06-07 18:21:47)

查看更多 数据库 文章 →

建议继续学习

  1. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,363)
  2. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,412)
  3. Linux如何统计进程的CPU利用率 (累计阅读 16,254)
  4. Linux Used内存到底哪里去了? (累计阅读 11,800)
  5. 其实,文件也可以truncate (累计阅读 8,532)
  6. MariaDB常见问题FAQ (累计阅读 8,311)
  7. 搜索引擎的特殊用法 (累计阅读 8,081)
  8. SQL vs NoSQL:数据库并发写入性能比拼 (累计阅读 7,971)
  9. Mysql的随机读取 (累计阅读 7,826)
  10. 索引与优化like查询 (累计阅读 7,298)