當前位置:首頁 » 編程語言 » 查詢歷史sql執行時間
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

查詢歷史sql執行時間

發布時間: 2023-06-09 09:03:07

1. 怎麼查看用戶的sql執行歷史

【方法一】查詢v$sqltext、v$sqlarea、v$sqlstats視圖
select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;
#對v$sqltext、v$sqlarea查看的是shared pool中的SQL,其時間索引是其解析歷史,因為共享的問題這個查詢可能並不能完整地反映出執行的歷史。
#v$sqlstats信息保留時間比v$sql、v$sqltext、v$sqlarea長,及時SQL已經換出shared pool仍然可查到
【方法二】
聯合v$active_session_history和v$sqlarea
#v$active_session_history 這個表只是個取樣數據,按秒進行,只有在那一秒采樣點處於on cpu或非idle等待的session統計在內。所以可能會知姿不全,有些執行很短的SQL會忽略。這個視圖無法還原完整的session歷史。
#v$sqlarea中有執行過的SQL語句,但並無到session的關聯信息,v$session中只關聯了當前的sql,所以也不行。
查看視圖爛尺:dba_hist_sqlstats、dba_hist_sqltext(歷史數據)
【方法三:session trace】
SQL> execute dbms_session.session_trace_enable(true,true);
PL/SQL procere successfully completed.
SQL> select count(*) from dba_hist_sqltext;
COUNT(*)
----------
478
SQL> select * from V$sesstat where rownum=1;
SID STATISTIC# VALUE
---------- ---------- ----------
134 0 1
SQL> execute dbms_session.session_trace_disable();
PL/SQL procere successfully completed.
$ cd $ORACLE_HOME/admin/test/ump
$ ls -lrt
$ tkprof test_ora_2195620.trc report.txt sys=no explain=no aggregate=yes
$ more report.txt --這個文件包括了啟停trace之間所有SQL語句的執行信息,執行計劃、統計
【方法四:logminer】
只包含DML與DDL語句,不能查詢select語句。另外需要開啟supplemental logging,默認是沒有開啟的。
conn / as sysdba
--安裝LOGMINER
SQL> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql;
SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql;
SQL> @$ORACLE_HOME/rdbms/admin/dbmslms.sql;
SQL>飢猛高 @$ORACLE_HOME/rdbms/admin/prvtlm.plb;
--開啟附加日誌
alter database add supplemental log data;
--模擬DML操作
conn p_chenming/...
SQL> select * from test2;
SQL> insert into test2 values(7,77);
SQL> commit;
conn / as sysdba
--切歸檔
SQL> alter system switch logfile;
SQL> select name,dest_id,thread#,sequence# from v$archived_log; --最後一個即為新的歸檔
--新建LOG MINER
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/archive_10g/test/test_1_138_786808434.arc',options=>dbms_logmnr.new);
--開始miner
SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
--查看結果
SQL> col username format a8;
SQL> col sql_redo format a50
SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where table_name='TEST2';
SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where username='P_CHENMING';
--關閉MINER
SQL> execute dbms_logmnr.end_logmnr;
--關閉輔助日誌
SQL> alter database drop supplemental log data;
【總結】
查看v$sqlarea只能查看粗略的歷史,因為很多SQL是共享的。
查看ASH也不全,因為這是采樣數據。
查看TRACE應該是最完整的,但需要在執行SQL前開啟。
查看logminer不能查看select語句,而且默認的系統沒有開啟supplementing log,所以能查看的內容有限。

2. 怎麼查看sql語句執行所需的時間

在查詢分析器中,選中 包含客戶端統計信息 ,執行結果就會多一個選項卡。

如果是在應用程序中,在執行語句的前後各加一個時間,兩個時間對比就行了。
也可以在跟蹤里,查看語句的執行時間。

3. mysql怎麼查詢執行sql的記錄

-- 打開sql 執行記錄功能

set global log_output='TABLE' -- 輸出到表

set global log=ON; -- 打開所有命令

執行記錄功能general_log, 所有語句: 成功和未成功的.

set global log_slow_queries=ON; -- 打開慢查詢 sql 記錄

slow_log, 執行成功的: 慢查詢語句和未使用索引的語句

set global long_query_time=0.1; -- 慢查詢時間限制(秒)

set global log_queries_not_using_indexes=ON; -- 記錄未使用索引的sql 語句

-- 查詢sql 執行記錄

select * from mysql.slow_log order by 1; -- 執行成功的:慢查詢語句,和未

使用索引的語句

select * from mysql.general_log order by 1; -- 所有語句: 成功和未成功的.-- 關閉sql 執行記

4. 在oracle中怎麼查看在某一段時間內執行的sql語句所用的時間

dbms_system.SET_SQL_TRACE_IN_SESSION
tkprof trace文件 解析後文件 sys=no
--注意此包應在SYS用戶下執行

5. 如何查看sql語句執行時間

declare
@sttime
datetime
set
@sttime=getdate()
print
@sttime
Select
*
from
case1219
--
把你的sql語句放在這里
SELECT
RTRIM(CAST(DATEDIFF(MS,
@sttime,
GETDATE())
AS
CHAR(10)))
AS
'TimeTaken'
或者這么寫
DECLARE
@t1
DATETIME;
DECLARE
@t2
DATETIME;
SET
@t1
=
GETDATE();
Select
*
from
dimDate
;--
把你要查詢的sql語句放在這里
SET
@t2
=
GETDATE();
SELECT
DATEDIFF(millisecond,@t1,@t2)
AS
elapsed_ms;

6. oracle 怎麼查看過去的一條sql執行時間

用sqlplus連接資料庫,在執行sql語句之前寫這樣一句:

settimingon
setauotracetraceonly

Elapsed就是sql的執行時間