TOPSQL 簡單分析

2021-05-24 11:29:42 字數 4168 閱讀 9379

正在學習oracle中,如果有什麼不對的地方,請牛大大們多多指正!

目錄:2.4 按 parse_calls

查詢topsql資訊

2.5按sharable_mem

查詢topsql資訊

3.檢視sql

執行計畫

正文:1.topsql成因:

產生top sql

的原因,

細化起來有以下原因:

1 表結構設計的不合理

2 索引建立不合理

3 不必要的表關聯

4 隱式資料型別轉換導致沒走索引

5 使用

table

型別的函式而沒有指定合適的

hints

6 不使用繫結變數

7 表與索引的統計資訊陳舊 

2. 查詢topsql資訊

2.1 

按disk_reads

的次數找

topsql資訊

select b.username username,a.sql_id, a.executions exec, a.buffer_gets buffer, a.disk_reads disk,

a.parse_calls parse,a.sql_text statement

from v$sqlarea a, dba_users b

where a.parsing_user_id=b.user_id and ( a.buffer_gets > 10000000 or a.disk_reads > 1000000 )

order by  a.buffer_gets + 100 *  a.disk_reads desc;

也可以將v$sqlarea

換成v$sql

,再增加乙個

child_number

字段,就可以找到子游標 在

10.2

的版本中推薦在

v$sqlstats找

2.2  按event waits

查詢 topsql資訊

select event, 

sum(p3) sleeps,

sum(seconds_in_wait) seconds_in_wait

from 

v$session_wait

where event like 'latch%'

group by event;

select inst_id,

event,

count(1) 

from gv$session_wait  

where event not in ('sql*net message to client','rdbms ipc message','sql*net message from client','smon timer') 

group by inst_id,event;

select   /*+ ordered */         hash_value,sql_text

from v$sqltext a

where (a.hash_value, a.address) in (

select decode (sql_hash_value,

0, prev_hash_value,

sql_hash_value

), decode (sql_hash_value, 0, prev_sql_addr, sql_address)

from v$session b

where b.sid  in (select sid from v$session_wait where event = 'db file%read' ))

order by hash_value,piece asc

2.3 按buffer_gets

查詢topsql資訊

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;

2.4 按 parse_calls

查詢topsql資訊

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;

2.5按sharable_mem

查詢topsql資訊

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;

3.檢視sql

執行計畫

方法1         --

實時查詢計畫

sql>set autotrace on --開啟自動分析統計,並顯示

sql語句結果;

sql>set autotrace traceonly --開啟自動分析統計,不顯示

sql語句結果;

當執行sql

語句時,就會顯示

sql語句的執行計畫。

方法2         --explain plan

命令查詢執行計畫;

首先建立plan table,

通過指令碼執行:

sql>@?/rdbms/admin/utlxplan.sql

然後使用explain plan for

語句解析

sql語句執行計畫:

sql>explain plan for

2 select [column1,column2,……,

columnn] from table_name;

explained.

sql> select * from table(dbms_xplan.display) --查詢剛剛解析的語句的執行計畫;

方法3.        --sql_trace

系統引數

+ dbms_system.set_sql_trace_in_session

包查詢; 1.設定引數或更改會話設定(

對其他使用者session設定

通過dbms_system.set_ev

系統包來實現

) pfile/spfile中加入

sql_trace=true 或:

alter session set sql_trace=true/false;

2.跟蹤語句

sql>select sid,serial#,username from v$session where username='***';

sql>exec dbms_system.set_sql_trace_in_session(sid,serial#,true)

--等待片刻,執行中斷跟蹤

sql命令。

sql>exec dbms_system.set_sql_trace_in_session(sid,serial#,false);

3.獲得跟蹤檔案

3.1 跟蹤檔案路徑

--user_dump_dest

引數所指定的檔案路徑下。

sql>show parameter dump;

3.2 格式化跟蹤檔案

sql>$tkprof

檔案路徑

/hsjf_ora_

1026

.trc 

檔案路徑

/hsjf_ora_

1026

.txt

獲得消耗cpu較高的topsql

一 select a.snap id,a.dbid,a.instance number,db time,to char trunc db time lag db time,1,db time over partition by stat name,instance number order by s...

MediaServer簡單分析

android上的多 服務是有乙個叫做 mediaserver 的服務程序提供的。這個程序通過 binder mediaserver伺服器程序的實現 在 frameworks base media mediaserver 目錄下,很小。該目錄下的android.mk 檔案 local path ca...

sizeof簡單分析

include include typedef struct t1 a typedef struct t2 b a aa b bb int main void int b int malloc 20 sizeof int char str1 ab 0cde 0fg char str2 ab 0cde...