日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 分析视图,ORACLE 性能视图的分析和使用

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 分析视图,ORACLE 性能视图的分析和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在定位性能問題的時候,第一步需要做的事情通常是查看一些動態視圖來獲得一些相關的信息。這些視圖比sql_TRACE或者AWR報告更方便和快捷。

v$mystat記錄了某個session從運行以來的各種資源統計數據。

1、v$mystat視圖中只會有當前用戶的會話信息,v$sesstat會有整個實例內所有會話信息。兩個視圖結構一致,只是統計數據不一致。

2、一般情況下v$mystat,v$sesstat會與v$statname一起配合使用。在v$statname視圖中STATISTIC#與v$mystat,v$sesstat中STATISTIC#字段是相關聯的。而NAME則是對應的英文信息:

select a.sid,b.name,a.value from v$sesstat a,v$statname b where a.sid=192 and a.statistic#=b.statistic# and b.name in ('consistent gets','physical reads','parse count (total)','parse count (hard)');

3、如果是sys或system用戶或是有dba權限的用戶,可以直接查詢v$mystat即可得到sid;如果是普通用戶的話,執行下列sql:

select sys_context('USERENV','SESSIONID') from dual;

得到的是v$session中的AUDSID字段中的值。然后根據v$session 查詢即可。

select sid,serial#,username,process from v$session where audsid=261290;

v$session

記錄每一個連接到數據庫實例中的 session。包括用戶 session及后臺進程如 DBWR, LGWR, archiver等等。

SID: SESSION標識,常用于連接其它列

SERIAL#:如果某個 SID又被其它的 session使用的話則此數值自增加 (當一個SESSION結束,另一個 SESSION開始并使用了同一個 SID)。

USERNAME:當前 session在 oracle中的用戶名。

last_call_et:sql語句運行的時間。如果session狀態為active,那么意味著從session變為active到現在的時間,如果session狀態為inactive,則意味著從session狀態變為inactive到現在的時間。

event:當前等待的事件。

查找你的 session信息:

SELECT SID,OSUSER,USERNAME,MACHINE,PROGRAM,state,PROCESS FROM V$SESSION;

查找當前被某個指定 session正在運行的 sql語句:

select b.sql_text,a.status,a.last_call_et,a.event from v$session a,v$sqlarea bwhere a.sql_id=b.sql_idand a.sid= 100;

sql區(Shared sql Area)中的sql統計信息,這個視圖中的信息未分組,每個sql指針都包含一條獨立的記錄。這個視圖的主要字段如下:

select sql_text,executions,disk_reads,optimizer_mode,buffer_gets,hash_valuefrom v$sql where sql_text like'select * from emp%';

1、disk_reads和buffer_gets分別對應執行計劃當中的physical reads和consistent gets。

2、如果重復執行sql_text,disk_reads不再增加,而BUFFER_GETS和執行次數繼續增加。

select sql_text,cpu_time/(1000*1000) t_cpu,trunc(elapsed_time/(1000*1000)) t_elap,(cpu_time/elapsed_time/(1000*1000))*100 pct

from v$sql where sql_text like 'insert into t_%';

對比sql語句消耗的cpu時間和執行的時間,就可以知道sql語句在執行中是否有長時間的等待事件。

select sql_text,parse_calls,executions from v$sql where sql_text like 'select * from t%';

parse_calls代表sql被分析的次數,EXECUTIONS代表sql被執行的次數,對分析sql是否綁定變量非常有用。

v$sqlarea列出了共享sql區(Shared sql Area)中的sql統計信息,這些sql按照sql文本的不同,每條會記錄一行統計數據。注意這里所說的是“按照sql文本”來進行區分,也就是說這個視圖的信息可以看作是根據sql_TEXT進行的一次匯總統計。

select sql_text,hash_value,version_countfrom v$sqlarea where sql_text like 'select count(*) from t%';

1、Oracle將v$sql中的sql_text相同的子指針合并起來,執行次數等信息也都進行了累計,這就是v$sqlarea的聚合作用。

2、看起來完全相同的一句sql ,往往具有不同的執行計劃。如果是不同的數據庫用戶,那么相應的涉及的對象可能都不一樣。即使是相同的數據庫用戶,若 session 的優化模式、session 級的參數 等不一樣,執行計劃也能不同。所以即使相同的sql,也可能具有不同的執行計劃!

3、因v$sql及v$sqlarea存放著統計信息在調優時使用居多,但其sql_text是不全的,如果想獲得完整的sql就要用v$sqltext了。

select * from v$sqltextwhere hash_value='3111103299'order by piece(HASH_VALUE和ADDRESS用來鑒別sql語句)

v$sql_shared_cursor存放了sql在執行過程中游標共享的信息,可以用來分析為什么看上去同樣的sql語句卻沒有共享的原因。

select parsing_user_id puid,parsing_schema_id psid,sql_text,sql_id,address,child_address from v$sql where sql_text like 'INSERT INTO T VALUES%';

根據sql_ID查詢對應的游標不能共享的原因:

SELECT * FROM V$sql_TXWHERE sql_ID='cv6dqthna0m96';

總結

以上是生活随笔為你收集整理的oracle 分析视图,ORACLE 性能视图的分析和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。