Oracle 查询每天执行慢的SQL

本文转载自http://blog.itpub.net/28602568/viewspace-1364844/

前言:

工作中的您是否有 想对每天慢的sql进行查询、汇总或者行优化等情况,如下SQL希望对您有帮助

--- 查询每天执行慢的SQL:

SELECT S.SQL_TEXT,

S.SQL_FULLTEXT,

S.SQL_ID,

ROUND(ELAPSED_TIME / 1000000 / (CASE

WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

1

ELSE

EXECUTIONS

END),

2) "执行时间‘S‘",

S.EXECUTIONS "执行次数",

S.OPTIMIZER_COST "COST",

S.SORTS,

S.MODULE, --连接模式(JDBC THIN CLIENT:程序)

-- S.LOCKED_TOTAL,

S.PHYSICAL_READ_BYTES "物理读",

-- S.PHYSICAL_READ_REQUESTS "物理读请求",

S.PHYSICAL_WRITE_REQUESTS "物理写",

-- S.PHYSICAL_WRITE_BYTES "物理写请求",

S.ROWS_PROCESSED      "返回行数",

S.DISK_READS          "磁盘读",

S.DIRECT_WRITES       "直接路径写",

S.PARSING_SCHEMA_NAME,

S.LAST_ACTIVE_TIME

FROM GV$SQLAREA S

WHERE ROUND(ELAPSED_TIME / 1000000 / (CASE

WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

1

ELSE

EXECUTIONS

END),

2) > 5 --100 0000微秒=1S

AND S.PARSING_SCHEMA_NAME = USER

AND TO_CHAR(S.LAST_LOAD_TIME, ‘YYYY-MM-DD‘) =

TO_CHAR( SYSDATE, ‘YYYY-MM-DD‘ )

AND S.COMMAND_TYPE IN (2 , 3, 5, 6 , 189)

ORDER BY "执行时间‘S‘" DESC;

/*  SQL中 COMMAND_TYPE意义:

2:INSERT

3:SELECT

6:UPDATE

7:DELETE

189:MERGE

详情可通过查找V$SQLCOMMAND视图  */

V$SQLAREA    官网解释:http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3064.htm#REFRN30259

V$SQLCOMMAND 官网解释:http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3066.htm#REFRN30632

时间: 2024-10-06 00:28:33

Oracle 查询每天执行慢的SQL的相关文章

oracle 查询最近执行过的 SQL语句

oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc; SELECT   sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'select%' ORDER BY last_load_time DESC; SELECT   sql_text, l

oracle 查询最近执行过的 SQL语句(转载)

oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼   分类: Database oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc; SELECT   sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text li

查询SQLSERVER执行过的SQL记录

原文:查询SQLSERVER执行过的SQL记录 有的时候,需要知道SQLSERVER执行了什么语句,可以用下面的方法: SELECT TOP 1000 --创建时间 QS.creation_time, --查询语句 SUBSTRING(ST.text,(QS.statement_start_offset/2)+1, ((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offse

Oracle 查询真实执行计划

什么是真实执行计划 获取Oracle的执行计划,有几种方式.(本文使用Oracle 11g XE版本,以及普通用户scott登录) explain plan for 有两个步骤: explain plan for ${SQL} select * from table(dbms_xplan.display); 这一个方法可以在PLSQLDev的cmd窗口和sql窗口执行,同时不需要给用户授权. 示例: autotrace 有两个步骤: set autot on 执行${SQL} 但普通用户需要授权

shell 中执行Oracle查询和执行存储过程

[oracle@master2 test]$ more b.sh #!/bin/sh #数据库地址 ip=192.168.1.250 port=1521 sid=orcl username=c##scott password=tiger oracle_name="${username}/${password}@${ip}:${port}/${sid}" #查询一个值 QUERYRETS=`sqlplus -s /nolog <<EOF set echo off feedba

oracle查询语句执行顺序

完整的查询语句类似是这样的: select ..., ROWNUM from table where <where clause> group by <columns> having <having clause> order by <columns>; 它的处理顺序是: 首先,执行 FROM/WHERE 语句 为结果赋予 ROWNUM 并同时根据 FROM/WHERE 语句进行 rownum 过滤 执行 SELECT 执行 GROUP BY 执行 HAVI

查询SQLSERVER执行过的SQL记录(历史查询记录)(转)

原文链接:https://www.cnblogs.com/icycore/p/10493237.html 有的时候,需要知道近段时间SQLSERVER执行了什么语句,可以用下面的方法: SELECT TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1, ((CASE QS.statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) EL

mysql第四篇--SQL逻辑查询语句执行顺序

mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition&g

常用oracle查询总结

--查询表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "