欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle关于TOPSQL的知识整理

程序员文章站 2024-01-29 23:15:28
–top 10 sql SELECT * FROM ( SELECT b.username AS username , a.disk...

–top 10 sql

SELECT *
FROM (
    SELECT b.username AS username
        , a.disk_reads / DECODE(a.executions, 0, 1, a.executions) AS rds_exec_ratio
        , a.sql_text AS STATEMENT
    FROM v$sqlarea a, dba_users b
    WHERE a.parsing_user_id = b.user_id
        AND b.username = 'ZYK'
    ORDER BY rds_exec_ratio DESC
)
WHERE ROWNUM < 11
ORDER BY rds_exec_ratio DESC

1. 识别’低效执行’的SQL语句

用下列SQL工具找出低效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 
ORDER BY 4 DESC; 

2.查找单条语句的内存占用率

alter system set pga_aggregate_target=10m 
alter system set workarea_size_policy=auto; 
select distinct * from a where rownum<500000; 

select sql_text,operation_type,policy,(last_memory_used/1024/1024), 
last_execution,last_tempseg_size 
from v$sql i,v$sql_workarea a 
where i.hash_value=a.hash_value 
and sql_text='select distinct * from a where rownum<500000'; 

Top 10 by Buffer Gets:

set linesize 100 
set pagesize 100 
SELECT * FROM 
(SELECT substr(sql_text,1,40) sql, 
buffer_gets, executions, buffer_gets/executions "Gets/Exec", 
hash_value,address 
FROM V$SQLAREA 
WHERE buffer_gets > 10000 
ORDER BY buffer_gets DESC) 
WHERE rownum <= 10 ; 

Top 10 by Physical Reads:

set linesize 100 
set pagesize 100 
SELECT * FROM 
(SELECT substr(sql_text,1,40) sql, 
disk_reads, executions, disk_reads/executions "Reads/Exec", 
hash_value,address 
FROM V$SQLAREA 
WHERE disk_reads > 1000 
ORDER BY disk_reads DESC) 
WHERE rownum <= 10 ; 

Top 10 by Executions:

set linesize 100 
set pagesize 100 
SELECT * FROM 
(SELECT substr(sql_text,1,40) sql, 
executions, rows_processed, rows_processed/executions "Rows/Exec", 
hash_value,address 
FROM V$SQLAREA 
WHERE executions > 100 
ORDER BY executions DESC) 
WHERE rownum <= 10 ; 

Top 10 by Parse Calls:

set linesize 100 
set pagesize 100 
SELECT * FROM 
(SELECT substr(sql_text,1,40) sql, 
parse_calls, executions, hash_value,address 
FROM V$SQLAREA 
WHERE parse_calls > 1000 
ORDER BY parse_calls DESC) 
WHERE rownum <= 10 ; 

Top 10 by Sharable Memory:

set linesize 100 
set pagesize 100 
SELECT * FROM 
(SELECT substr(sql_text,1,40) sql, 
sharable_mem, executions, hash_value,address 
FROM V$SQLAREA 
WHERE sharable_mem > 1048576 
ORDER BY sharable_mem DESC) 
WHERE rownum <= 10 ; 

Top 10 by Version Count:

set linesize 100 
set pagesize 100 
SELECT * FROM 
(SELECT substr(sql_text,1,40) sql, 
version_count, executions, hash_value,address 
FROM V$SQLAREA 
WHERE version_count > 20 
ORDER BY version_count DESC) 
WHERE rownum <= 10 ;