正在學習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...