--top 10 sql
SELECT * FROM (SELECT b.username username, a.disk_reads / DECODE (a.executions, 0, 1, a.executions) rds_exec_ratio, a.sql_text 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 ;
Top 10 by Buffer Gets: 最耗缓存
1
2
3
4
5
6
7
8
9
10
11
|
set
linesize 100
set
pagesize 100
SELECT
*
FROM
(
SELECT
SQL_FULLTEXT sql,
buffer_gets, executions, buffer_gets/executions
"Gets/Exec"
,
hash_value,address,LAST_ACTIVE_TIME
FROM
V$SQLAREA
WHERE
buffer_gets > 10000
ORDER
BY
buffer_gets
DESC
)
WHERE
rownum <= 10
;
|
Top 10 by Physical Reads: 最多物理读取
1
2
3
4
5
6
7
8
9
10
11
|
set
linesize 100
set
pagesize 100
SELECT
*
FROM
(
SELECT
SQL_FULLTEXT sql,
disk_reads, executions, disk_reads/executions
"Reads/Exec"
,
hash_value,address,LAST_ACTIVE_TIME
FROM
V$SQLAREA
WHERE
disk_reads > 1000
ORDER
BY
disk_reads
DESC
)
WHERE
rownum <= 10
;
|
Top 10 by Executions: 最多执行
1
2
3
4
5
6
7
8
9
10
11
|
set
linesize 100
set
pagesize 100
SELECT
*
FROM
(
SELECT
substr(sql_text,1,40) sql,SQL_FULLTEXT,
executions, rows_processed, rows_processed/executions
"Rows/Exec"
,
hash_value,address,LAST_ACTIVE_TIME
FROM
V$SQLAREA
WHERE
executions > 100
ORDER
BY
executions
DESC
)
WHERE
rownum <= 10
;
|
Top 10 by Parse Calls: 最多软解析
1
2
3
4
5
6
7
8
9
10
11
|
set
linesize 100
set
pagesize 100
SELECT
*
FROM
(
SELECT
substr(sql_text,1,40) sql,
SQL_FULLTEXT,
parse_calls, executions, hash_value,address,LAST_ACTIVE_TIME
FROM
V$SQLAREA
WHERE
parse_calls > 1000
ORDER
BY
parse_calls
DESC
)
WHERE
rownum <= 10
;
|
Top 10 by Sharable Memory: 最耗内存
1
2
3
4
5
6
7
8
9
10
|
set
linesize 100
set
pagesize 100
SELECT
*
FROM
(
SELECT
substr(sql_text,1,40) sql,
sharable_mem, executions, hash_value,address,LAST_ACTIVE_TIME
FROM
V$SQLAREA
WHERE
sharable_mem > 1048576
ORDER
BY
sharable_mem
DESC
)
WHERE
rownum <= 10
;
|
Top 10 by Version Count:
1
2
3
4
5
6
7
8
9
10
|
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
;
|