查看性能差的sql语句

简介:

查询出性能最差的10条sql

SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS, 

COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea 

order BY disk_reads DESC )where ROWNUM<10 ; 

HASH_VALUE:SQL语句的Hash值。

ADDRESS:SQL语句在SGA中的地址。

这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。



HASH_VALUE:SQL语句的Hash值。

ADDRESS:SQL语句在SGA中的地址。

这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。

PARSING_USER_ID:为语句解析第一条CURSOR的用户

VERSION_COUNT:语句cursor的数量

KEPT_VERSIONS:

SHARABLE_MEMORY:cursor使用的共享内存总数

PERSISTENT_MEMORY:cursor使用的常驻内存总数

RUNTIME_MEMORY:cursor使用的运行时内存总数。

SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符)。

MODULE,ACTION:使用了DBMS_APPLICATION_INFO时session解析第一条cursor时的信息

SORTS: 表示排序的次数

CPU_TIME: 语句被解析和执行的CPU时间

ELAPSED_TIME: 语句被解析和执行的共用时间

PARSE_CALLS: 语句的解析调用(软、硬)次数

EXECUTIONS: 表示同一条SQL语句一共执行了多少次

INVALIDATIONS: 语句的cursor失效次数

LOADS: 语句载入(载出)数量

ROWS_PROCESSED: 语句返回的列总数


查看最消耗资源的sql

SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls  

FROM V$SQLAREA  

WHERE buffer_gets > 10000000 OR disk_reads > 1000000  

ORDER BY buffer_gets + 100 * disk_reads DESC;


DISK_READS:表示物理读的数量。


分析性能差的sql

SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,   

ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,   

ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,   

SQL_TEXT   

FROM V$SQLAREA   

WHERE EXECUTIONS>0   

AND BUFFER_GETS >0   

AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8  



查询共享池中已经解析过的SQL语句及其相关信息

--EXECUTIONS 所有子游标的执行这条语句次数

--DISK_READS 所有子游标运行这条语句导致的读磁盘次数

--BUFFER_GETS 所有子游标运行这条语句导致的读内存次数

--Hit_radio 命中率

--Reads_per_run 每次执行读写磁盘数

笼统的说EXECUTIONS,BUFFER_GETS,Hit_radio越高表示读内存多,磁盘少是比较理想的状态,因此越高越好

另外两个越高读磁盘次数越多,因此低点好



获取执行次数最多的10个SQL

select sql_text,executions

from (

select sql_text,executions,rank() over(order by executions desc) exec_rank

from v$sql

)

where exec_rank <=10;



获取单次执行时间最长的10个SQL

select sql_id,sql_text,round(exec_time/1000000,0) exec_time

from(

select sql_id,sql_text,exec_time,rank() over (order by exec_time desc) exec_rank

from

(

select sql_id,sql_text,cpu_time,elapsed_time,executions,round(elapsed_time/executions,0) exec_time

from v$sql

where executions>1

)

)

where exec_rank <=10;



CPU和IO占用最多:

select sql_text,executions,buffer_gets,disk_reads from v$sql 

where buffer_gets > 100000

or disk_reads > 100000

order by buffer_gets+100*disk_reads desc

前5个花费最多CPU和时间:


select sql_text,executions,

round(elapsed_time/1000000,2) elapsed_seconds,

round(cpu_time/1000000,2) cpu_secs from 

(select * from v$sql order by elapsed_time desc)

where rownum<6

因为V$SQL是动态性能图,只能保留一些频繁执行的SQL。

查看最耗费资源的会话 

select to_char(m.END_TIME,'DD-MON-YYYY HH24:MI:SS') e_dttm, m.INTSIZE_CSEC/100 ints, s.USERNAME usr, m.SESSION_ID sid, m.SESSION_SERIAL_NUM ssn, ROUND (m.CPU) cpu100, m.PHYSICAL_READS prds, m.LOGICAL_READS lrds, m.PGA_MEMORY, m.HARD_PARSES hp, m.SOFT_PARSES sp, m.PHYSICAL_READ_PCT prp, m.LOGICAL_READ_PCT lrp, s.SQL_ID from v$sessmetric m,v$session s where (m.PHYSICAL_READS>100 or m.CPU>100 or m.LOGICAL_READS>100) and m.session_id=s.SID and m.SESSION_SERIAL_NUM=s.SERIAL# order by m.PHYSICAL_READS DESC,m.CPU desc,m.LOGICAL_READS desc;  



查询使用频率最高的5个查询:  

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


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

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


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

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



本文转自aaa超超aaa 51CTO博客,原文链接:http://blog.51cto.com/10983441/1857203

相关文章
|
4月前
|
存储 SQL 关系型数据库
PolarDB这个sql行存和列存性能差别好大 ,为什么?
PolarDB这个sql行存和列存性能差别好大 ,为什么?
33 0
|
3月前
|
SQL 存储 缓存
如何通过优化SQL查询提升数据库性能
SQL查询是数据库的核心功能之一,对于大型数据量的应用程序来说,优化SQL查询可以显著提升数据库的性能。本文将介绍如何通过优化SQL查询语句来提升数据库的性能,包括索引优化、查询语句优化以及其他一些技巧。
|
3月前
|
SQL 监控 关系型数据库
解密SQL性能异常事件及阿里云数据库的性能调优实践
作为开发者想必都知道数据库是现代应用的核心组件之一,而且在当今互联网时代之下,SQL查询的性能直接影响系统的整体性能,它的性能对于系统的稳定性和响应速度至关重要。那么本文就来讨论一下SQL性能异常的排查和优化方法,包括我个人印象深刻的SQL性能异常事件,以及分享一下使用阿里云数据库产品/工具进行SQL性能调优的经验和心得体会。
85 1
解密SQL性能异常事件及阿里云数据库的性能调优实践
|
3月前
|
SQL 监控 关系型数据库
常见的SQL优化和排查性能异常秘籍
常见的SQL优化和排查性能异常秘籍
34 1
|
4月前
|
关系型数据库 MySQL 数据库
史上最全的MySQL性能手册(优化+SQL+并发+数据库)
史上最全的MySQL性能手册(优化+SQL+并发+数据库)
|
7月前
|
SQL 数据库
使用事务码 SAT 比较传统的 SELECT SQL 语句和 OPEN / FETCH CURSOR 分块读取 ABAP 数据库表两种方式的性能差异试读版
使用事务码 SAT 比较传统的 SELECT SQL 语句和 OPEN / FETCH CURSOR 分块读取 ABAP 数据库表两种方式的性能差异试读版
63 0
|
9月前
|
SQL 存储 关系型数据库
提升SQL查询性能:深入理解和策略实践
1. 使用索引   索引是一个用于快速查询和检索数据的数据库结构。你可以将其想象成一本书的目录,它可以让数据库引擎不必扫描整个表,而是直接定位到所需的数据,从而大大提高查询的性能。以下是几种索引类型:
116 0
|
11月前
|
SQL 存储 关系型数据库
MySQL-获取有性能问题SQL的方法_慢查询 & 实时获取
MySQL-获取有性能问题SQL的方法_慢查询 & 实时获取
92 0
|
11月前
|
SQL JSON 关系型数据库
「PostgreSQL」PostgreSQL 和SQL SERVER(性能和可伸缩性)
「PostgreSQL」PostgreSQL 和SQL SERVER(性能和可伸缩性)