來(lái)源:小小工匠 發(fā)布時(shí)間:2018-11-01 13:40:20 閱讀量:990
系列
ORACLE常用性能監(jiān)控SQL【一】
ORACLE常用性能監(jiān)控SQL【二】
Oracle-動(dòng)態(tài)性能視圖解讀
系列
死鎖后的解決辦法
生成Kill Session語(yǔ)句
查看導(dǎo)致死鎖的 SQL
查看誰(shuí)鎖了誰(shuí)
ORA-00054 資源正忙要求指定 NOWAIT
查詢(xún)綁定變量使用的實(shí)際值
監(jiān)控事例的等待
回滾段的爭(zhēng)用情況
查看回滾段名稱(chēng)及大小
查看控制文件
查看日志文件
查看前臺(tái)正在發(fā)出的SQL語(yǔ)句
數(shù)據(jù)表占用空間大小情況
查看表空間碎片大小
查看表空間占用磁盤(pán)情況
查看表的大小倒序排列
查看表空間物理文件的名稱(chēng)及大小
查看Oracle 表空間使用率
查看Temp 表空間實(shí)際使用磁盤(pán)大小
查看session使用回滾段
查看當(dāng)前臨時(shí)表空間使用大小與正在占用臨時(shí)表空間的sql語(yǔ)句
Temp表空間上進(jìn)程的查詢(xún)
查看SGA區(qū)剩余可用內(nèi)存
監(jiān)控表空間IO比例
監(jiān)控SGA命中率
監(jiān)控 SGA 中字典緩沖區(qū)的命中率
監(jiān)控 SGA 享緩存區(qū)的命中率應(yīng)該小于1
監(jiān)控 SGA 中重做日志緩存區(qū)的命中率應(yīng)該小于1
監(jiān)控內(nèi)存和硬盤(pán)的排序比率最好使它小于 10
監(jiān)控字典緩沖區(qū)
非系統(tǒng)用戶(hù)建在SYSTEM表空間中的表
性能最差的SQL
讀磁盤(pán)數(shù)超100次的sql
查找消耗資源比較的sql語(yǔ)句
最頻繁執(zhí)行的sql
查詢(xún)使用CPU多的用戶(hù)session
當(dāng)前每個(gè)會(huì)話使用的對(duì)象數(shù)
查看數(shù)據(jù)庫(kù)庫(kù)對(duì)象
查看數(shù)據(jù)庫(kù)的版本
查看數(shù)據(jù)庫(kù)的創(chuàng)建日期和歸檔方式
檢查角色和權(quán)限設(shè)置
根據(jù)用戶(hù)名進(jìn)行授權(quán)的對(duì)象級(jí)特權(quán)
根據(jù)被授權(quán)人進(jìn)行授權(quán)的對(duì)象級(jí)特權(quán)
根據(jù)用戶(hù)名進(jìn)行授予的系統(tǒng)級(jí)特權(quán)
根據(jù)被授權(quán)人進(jìn)行授予的系統(tǒng)級(jí)特權(quán)
根據(jù)用戶(hù)名授予的角色
根據(jù)被授權(quán)人授予的角色
用戶(hù)名及已被授予的相應(yīng)權(quán)限
查詢(xún)用戶(hù)名及相應(yīng)的配置文件默認(rèn)的表空間和臨時(shí)表空間
等待事件V視圖
馬上該誰(shuí)等待查詢(xún)VSESSION_WAIT VSESSION
馬上該誰(shuí)等待SPECIFIC Waits查詢(xún)VSESSION_WAIT
誰(shuí)在等待 - 最后10 個(gè)等待數(shù)查詢(xún)VSESSION_WAIT_HISTORY
查找P1 P2 P3代表什么查詢(xún) VEVENT_NAME
會(huì)話開(kāi)始后的所有等待數(shù)查詢(xún) VSESSION_EVENT
類(lèi)的所有會(huì)話等待數(shù)查詢(xún)VSESSION_WAIT_CLASS
系統(tǒng)啟動(dòng)后的所有等待數(shù)查詢(xún)VSYSTEM_EVENT
類(lèi)的系統(tǒng)等待數(shù)查詢(xún)VSYSTEM_WAIT_CLASS
類(lèi)的系統(tǒng)等待數(shù)查詢(xún)VACTIVE_SESSION_HISTORY
自動(dòng)工作量倉(cāng)庫(kù)AWR 的基本信息
獲取生成的trace文件
死鎖后的解決辦法
如果死鎖不能自動(dòng)釋放,就需要我們手工的 kill session
生成Kill Session語(yǔ)句
查看有無(wú)死鎖對(duì)象,如有 kill session
SELECT 'alter system kill session ''' || sid || ',' || serial# || ''';' "Deadlock"
FROM v$session
WHERE sid IN (SELECT sid FROM v$lock WHERE block = 1);
1
2
3
4
5
如果有,會(huì)返回類(lèi)似與如下的信息:
alter system kill session '761,876';
.....
1
2
kill session:
執(zhí)行 alter system kill session ‘761,876’(sid 為 761);
注意: 應(yīng)當(dāng)注意對(duì)于 sid 在 100 以下的應(yīng)當(dāng)謹(jǐn)慎,可能該進(jìn)程對(duì)應(yīng)某個(gè)application,如對(duì)應(yīng)某個(gè)事務(wù),可以 kill
查看導(dǎo)致死鎖的 SQL
SELECT s.sid, q.sql_text
FROM v$sqltext q, v$session s
WHERE q.address = s.sql_address AND s.sid = &sid -- 這個(gè)&sid 是第一步查詢(xún)出來(lái)的
ORDER BY piece;
1
2
3
4
執(zhí)行后,輸入對(duì)應(yīng)的sid即可查看對(duì)應(yīng)的sql.
查看誰(shuí)鎖了誰(shuí)
SELECT s1.username || '@' || s1.machine || ' ( SID=' || s1.sid ||
' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' ||
s2.sid || ' ) ' AS blocking_status
FROM v$lock l1, v$session s1, v$lock l2, v$session s2
WHERE s1.sid = l1.sid
AND s2.sid = l2.sid
AND l1.BLOCK = 1
AND l2.request > 0
AND l1.id1 = l2.id1
AND l2.id2 = l2.id2;
1
2
3
4
5
6
7
8
9
10
或者
推薦這個(gè),因?yàn)槭褂玫氖?v$locked_object
SELECT LPAD(' ', DECODE(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY o.object_id, xidusn DESC;
1
2
3
4
5
6
7
8
9
10
V$LOCKED_OBJECT只能報(bào)發(fā)生等待的表級(jí)鎖,不能報(bào)發(fā)生等待的行級(jí)鎖。
ORA-00054 資源正忙,要求指定 NOWAIT
演示:
select * from emp for update ;--通過(guò)for update 獲取一個(gè)排它鎖
1
SQL>select object_name as 對(duì)象名稱(chēng),s.sid,s.serial#,p.spid as 系統(tǒng)進(jìn)程號(hào)
from v$locked_object l , dba_objects o , v$session s , v$process p
where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;
對(duì)象名稱(chēng) SID SERIAL# 系統(tǒng)進(jìn)程號(hào)
-------------------------------------------------------------------------------- ---------- ---------- ------------------------
EMP 1411 8865 32720
1
2
3
4
5
6
7
8
在另外一個(gè)會(huì)話中執(zhí)行
ALTER SYSTEM KILL SESSION '1411,8865';
1
查詢(xún)綁定變量使用的實(shí)際值
1, SQL還在shared pool中,沒(méi)有被aged out 替換SQL ID 值即可
select sql_id, name, datatype_string, last_captured, value_string
from v$sql_bind_capture where sql_id = '7nqt558g5gmyr' order by LAST_CAPTURED,
POSITION;
1
2
3
2.請(qǐng)自行替換sql_id,此時(shí)是從awr中查詢(xún)(sql 被 aged out 出 shared pool)
select instance_number,
sql_id,
name,
datatype_string,
last_captured,
value_string
from dba_hist_sqlbind
where sql_id = 'fahv8x6ngrb50'
order by LAST_CAPTURED, POSITION;
1
2
3
4
5
6
7
8
9
監(jiān)控事例的等待
select event,sum(decode(wait_Time,0,0,1)) "Prev",
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"
from v$session_Wait
group by event order by 4 ;
1
2
3
4
5
回滾段的爭(zhēng)用情況
select name, waits, gets, waits / gets "Ratio"
from v$rollstat a, v$rollname b
where a.usn = b.usn;
1
2
3
4
查看回滾段名稱(chēng)及大小
SELECT segment_name,
tablespace_name,
r.status,
(initial_extent / 1024) initialextent,
(next_extent / 1024) nextextent,
max_extents,
v.curext curextent
FROM dba_rollback_segs r, v$rollstat v
WHERE r.segment_id = v.usn(+)
ORDER BY segment_name;
1
2
3
4
5
6
7
8
9
10
查看控制文件
SELECT NAME FROM v$controlfile;
1
查看日志文件
SELECT MEMBER FROM v$logfile;
1
2
查看前臺(tái)正在發(fā)出的SQL語(yǔ)句
select user_name,sql_text
from v$open_cursor
where sid in (select sid from (select sid,serial#,username,program
from v$session
where status='ACTIVE'));
1
2
3
4
5
數(shù)據(jù)表占用空間大小情況
select segment_name, tablespace_name, bytes, blocks
from user_segments
where segment_type = 'TABLE'
ORDER BY bytes DESC, blocks DESC;
1
2
3
4
5
查看表空間碎片大小
select tablespace_name,round(sqrt(max(blocks)/sum(blocks))*
(100/sqrt(sqrt(count(blocks)))),2) FSFI
from dba_free_space
group by tablespace_name order by 1;
1
2
3
4
查看表空間占用磁盤(pán)情況
select
b.file_id 文件ID號(hào),
b.tablespace_name 表空間名,
b.bytes 字節(jié)數(shù),
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余空間,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id;
1
2
3
4
5
6
7
8
9
10
11
查看表的大小,倒序排列
每張表都是作為“段”來(lái)存儲(chǔ)的,可以通過(guò)user_segments視圖查看其相應(yīng)信息。
段(segments)的定義:如果創(chuàng)建一個(gè)堆組織表,則該表就是一個(gè)段
SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MBYTESE
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE = 'TABLE'
GROUP BY SEGMENT_NAME
order by MBYTESE desc;
1
2
3
4
5
查看表空間物理文件的名稱(chēng)及大小
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;
1
2
3
4
5
6
查看Oracle 表空間使用率
SELECT D.TABLESPACE_NAME,
SPACE || 'M' "SUM_SPACE(M)",
SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)",
ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%'
"USED_RATE(%)",
FREE_SPACE || 'M' "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL --如果有臨時(shí)表空間
SELECT D.TABLESPACE_NAME,
SPACE || 'M' "SUM_SPACE(M)",
USED_SPACE || 'M' "USED_SPACE(M)",
ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)",
NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
ORDER BY 1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SELECT a.tablespace_name "表空間名",
total "表空間大小",
free "表空間剩余大小",
(total - free) "表空間使用大小",
total / (1024 * 1024 * 1024) "表空間大小(G)",
free / (1024 * 1024 * 1024) "表空間剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空間使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
查看Temp 表空間實(shí)際使用磁盤(pán)大小
Select f.tablespace_name,
d.file_name "Tempfile name",
round((f.bytes_free + f.bytes_used) / 1024 / 1024, 2) "total MB",
round(((f.bytes_free + f.bytes_used) - nvl(p.bytes_used, 0)) / 1024 / 1024,
2) "Free MB",
round(nvl(p.bytes_used, 0) / 1024 / 1024, 2) "Used MB",
round((round(nvl(p.bytes_used, 0) / 1024 / 1024, 2) /
round((f.bytes_free + f.bytes_used) / 1024 / 1024, 2)) * 100,
2) as "Used_Rate(%)"
from SYS.V_$TEMP_SPACE_HEADER f,
DBA_TEMP_FILES d,
SYS.V_$TEMP_EXTENT_POOL p
where f.tablespace_name(+) = d.tablespace_name
and f.file_id(+) = d.file_id
and p.file_id(+) = d.file_id;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
查看session使用回滾段
SELECT r.name 回滾段名,
s.sid,
s.serial#,
s.username 用戶(hù)名,
t.status,
t.cr_get,
t.phy_io,
t.used_ublk,
t.noundo,
substr(s.program, 1, 78) 操作程序
FROM sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r
WHERE t.addr = s.taddr and t.xidusn = r.usn
ORDER BY t.cr_get,t.phy_io;
1
2
3
4
5
6
7
8
9
10
11
12
13
查看當(dāng)前臨時(shí)表空間使用大小與正在占用臨時(shí)表空間的sql語(yǔ)句
select sess.SID, segtype, blocks * 8 / 1000 "MB", sql_text
from v$sort_usage sort, v$session sess, v$sql sql
where sort.SESSION_ADDR = sess.SADDR
and sql.ADDRESS = sess.SQL_ADDRESS
order by blocks desc;
1
2
3
4
5
6
Temp表空間上進(jìn)程的查詢(xún)
select a.tablespace, b.sid, b.serial#, a.blocks,c.sql_text
from v$sort_usage a,v$session b,v$sqltext c
where a.session_addr = b.saddr
and b.sql_address = c.address
order by a.tablespace,b.sid,b.serial#,c.address, c.piece;
1
2
3
4
5
查看SGA區(qū)剩余可用內(nèi)存
select name,
sgasize/1024/1024 "Allocated(M)",
bytes/1024 "**空間(K)",
round(bytes/sgasize*100, 2) "**空間百分比(%)"
from (select sum(bytes) sgasize from sys.v_$sgastat) s, sys.v_$sgastat f
where f.name = 'free memory';
1
2
3
4
5
6
監(jiān)控表空間I/O比例
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,
f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw
from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name;
1
2
3
4
5
監(jiān)控SGA命中率
select a.value + b.value "logical_reads",
c.value "phys_reads",
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b, v$sysstat c
where a.statistic# = 38 and
b.statistic# = 39 and
c.statistic# = 40 ;
1
2
3
4
5
6
7
監(jiān)控 SGA 中字典緩沖區(qū)的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses ;
1
2
3
4
5
監(jiān)控 SGA **享緩存區(qū)的命中率,應(yīng)該小于1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;
1
2
3
監(jiān)控 SGA 中重做日志緩存區(qū)的命中率,應(yīng)該小于1%
SELECT name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
1
2
3
4
5
監(jiān)控內(nèi)存和硬盤(pán)的排序比率,最好使它小于 .10
SELECT name, value
FROM v$sysstat
WHERE name IN ('sorts (memory)', 'sorts (disk)') ;
1
2
3
監(jiān)控字典緩沖區(qū)
SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
FROM V$ROWCACHE ;
1
2
非系統(tǒng)用戶(hù)建在SYSTEM表空間中的表
SELECT owner,table_name
FROM DBA_TABLES
WHERE tablespace_name in('SYSTEM','USER_DATA') AND
owner NOT IN('SYSTEM','SYS','OUTLN', 'ORDSYS','MDSYS','SCOTT', 'HOSTEAC');
1
2
3
4
性能最差的SQL
SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC)
WHERE ROWNUM<100;
1
2
3
4
讀磁盤(pán)數(shù)超100次的sql
select * from sys.v_$sqlarea where disk_reads>100;
1
查找消耗資源比較的sql語(yǔ)句
Select se.username,
se.sid,
su.extents,
su.blocks * to_number(rtrim(p.value)) as Space,
tablespace,
segtype,
sql_text
from v$sort_usage su, v$parameter p, v$session se, v$sql s
where p.name = 'db_block_size'
and su.session_addr = se.saddr
and s.hash_value = su.sqlhash
and s.address = su.sqladdr
order by se.username, se.sid;
1
2
3
4
5
6
7
8
9
10
11
12
13
最頻繁執(zhí)行的sql
select * from sys.v_$sqlarea where executions>100;
1
查詢(xún)使用CPU多的用戶(hù)session
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and
c.sid=a.sid and
a.paddr=b.addr
order by value desc;
1
2
3
4
5
6
當(dāng)前每個(gè)會(huì)話使用的對(duì)象數(shù)
SELECT a.sid,s.terminal,s.program,count(a.sid)
FROM V$ACCESS a,V$SESSION s
WHERE a.owner <> 'SYS'AND s.sid = a.sid
GROUP BY a.sid,s.terminal,s.program
ORDER BY count(a.sid) ;
1
2
3
4
5
查看數(shù)據(jù)庫(kù)庫(kù)對(duì)象
SELECT owner, object_type, status, COUNT(*) count#
FROM all_objects
GROUP BY owner, object_type, status;
1
2
3
4
查看數(shù)據(jù)庫(kù)的版本
SELECT version
FROM product_component_version
WHERE substr(product, 1, 6) = 'Oracle';
1
2
3
查看數(shù)據(jù)庫(kù)的創(chuàng)建日期和歸檔方式
SELECT created, log_mode, log_mode FROM v$database;
1
檢查角色和權(quán)限設(shè)置
根據(jù)用戶(hù)名進(jìn)行授權(quán)的對(duì)象級(jí)特權(quán)
select b.owner || '.' || b.table_name obj,
b.privilege what_granted,
b.grantable,
a.username
from sys.dba_users a, sys.dba_tab_privs b
where a.username = b.grantee
order by 1, 2, 3;
1
2
3
4
5
6
7
8
根據(jù)被授權(quán)人進(jìn)行授權(quán)的對(duì)象級(jí)特權(quán)
Select owner || '.' || table_name obj,
privilege what_granted,
grantable,
grantee
from sys.dba_tab_privs
where not exists (select 'x' from sys.dba_users where username = grantee)
order by 1, 2, 3;
1
2
3
4
5
6
7
根據(jù)用戶(hù)名進(jìn)行授予的系統(tǒng)級(jí)特權(quán)
select b.privilege what_granted, b.admin_option, a.username
from sys.dba_users a, sys.dba_sys_privs b
where a.username = b.grantee
order by 1, 2;
1
2
3
4
根據(jù)被授權(quán)人進(jìn)行授予的系統(tǒng)級(jí)特權(quán)
select privilege what_granted, admin_option, grantee
from sys.dba_sys_privs
where not exists (select 'x' from sys.dba_users where username = grantee)
order by 1, 2;
1
2
3
4
5
6
根據(jù)用戶(hù)名授予的角色
select b.granted_role ||
decode(admin_option, 'YES', ' (With Admin Option)', null) what_granted,
a.username
from sys.dba_users a, sys.dba_role_privs b
where a.username = b.grantee
order by 1;
1
2
3
4
5
6
7
根據(jù)被授權(quán)人授予的角色
select granted_role ||
decode(admin_option, 'YES', ' (With Admin Option)', null) what_granted,
grantee
from sys.dba_role_privs
where not exists (select 'x' from sys.dba_users where username = grantee)
order by 1;
1
2
3
4
5
6
7
用戶(hù)名及已被授予的相應(yīng)權(quán)限
select a.username,
b.granted_role ||
decode(admin_option, 'YES', ' (With Admin Option)', null) what_granted
from sys.dba_users a, sys.dba_role_privs b
where a.username = b.grantee
UNION
select a.username,
b.privilege ||
decode(admin_option, 'YES', ' (With Admin Option)', null) what_granted
from sys.dba_users a, sys.dba_sys_privs b
where a.username = b.grantee
UNION
select a.username,
b.table_name || '-' || b.privilege ||
decode(grantable, 'YES', ' (With Grant Option)', null) what_granted
from sys.dba_users a, sys.dba_tab_privs b
where a.username = b.grantee
order by 1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
查詢(xún)用戶(hù)名及相應(yīng)的配置文件、默認(rèn)的表空間和臨時(shí)表空間
Select username, profile, default_tablespace, temporary_tablespace, created
from sys.dba_users
order by username;
1
2
3
等待事件V$視圖
在Oracle 10g中V$SESSION_WAIT中的所有等待事件列現(xiàn)在都在V$SESSION中。因此,確保查詢(xún)等待信息的 V$SESSION,因?yàn)樗且粋€(gè)更快的視圖。V$ACTIVE_SESSION_HISTORY (ASH)將許多重要統(tǒng)計(jì)數(shù)據(jù)合并為一個(gè)視圖或一個(gè)報(bào)表(ASH報(bào)表)。
馬上該誰(shuí)等待–查詢(xún)V$SESSION_WAIT / V$SESSION
select event,
sum(decode(wait_time, 0, 1, 0)) "Waiting Now",
sum(decode(wait_time, 0, 0, 1)) "Previous Waits",
count(*) "Total"
from v$session_wait
group by event
order by count(*);
1
2
3
4
5
6
7
馬上該誰(shuí)等待;SPECIFIC Waits–查詢(xún)V$SESSION_WAIT
SELECT /*+ ordered */
sid, event, owner, segment_name, segment_type, p1, p2, p3
FROM v$session_wait sw, dba_extents de
WHERE de.file_id = sw.p1
AND sw.p2 between de.block_id and de.block_id + de.blocks - 1
AND (event = 'buffer busy waits' OR event = 'write complete waits')
AND p1 IS NOT null
ORDER BY event, sid;
1
2
3
4
5
6
7
8
9
10
11
誰(shuí)在等待 - 最后10 個(gè)等待數(shù)–查詢(xún)V$SESSION_WAIT_HISTORY
SELECT /*+ ordered */
sid, event, owner, segment_name, segment_type, p1, p2, p3
FROM v$session_wait sw, dba_extents de
WHERE de.file_id = sw.p1
AND sw.p2 between de.block_id and de.block_id + de.blocks - 1
AND (event = 'buffer busy waits' OR event = 'write complete waits')
AND p1 IS NOT null
ORDER BY event, sid;
1
2
3
4
5
6
7
8
查找P1, P2, P3代表什么–查詢(xún) V$EVENT_NAME
select event#, name, parameter1 p1, parameter2 p2, parameter3 p3
from v$event_name
where name in ('buffer busy waits', 'write complete waits');
1
2
3
會(huì)話開(kāi)始后的所有等待數(shù)–查詢(xún) V$SESSION_EVENT
select sid, event, total_waits, time_waited, event_id
from v$session_event
where time_waited > 0
order by time_waited;
1
2
3
4
5
類(lèi)的所有會(huì)話等待數(shù)–查詢(xún)V$SESSION_WAIT_CLASS
select sid, wait_class, total_waits from v$session_wait_class;
1
系統(tǒng)啟動(dòng)后的所有等待數(shù)–查詢(xún)V$SYSTEM_EVENT
select event, total_waits, time_waited, event_id
from v$system_event
where time_waited > 0
order by time_waited;
1
2
3
4
5
類(lèi)的系統(tǒng)等待數(shù)–查詢(xún)V$SYSTEM_WAIT_CLASS
select wait_class, total_waits
from v$system_wait_class
order by total_waits desc;
1
2
3
4
類(lèi)的系統(tǒng)等待數(shù)–查詢(xún)V$ACTIVE_SESSION_HISTORY
–In the query below, the highest count session is leader in non-idle wait events.
select session_id, count(1)
from v$active_session_history
group by session_id
order by 2;
1
2
3
4
–In the query below, find the SQL for the leader in non-idle wait events.
select c.sql_id, a.sql_text
from v$sql a,
(select sql_id, count(1)
from v$active_session_history b
where sql_id is not null
group by sql_id order by 2 desc) c
where rownum <= 5
order by rownum;
1
2
3
4
5
6
7
8
自動(dòng)工作量倉(cāng)庫(kù)(AWR) 的基本信息
自動(dòng)工作量倉(cāng)庫(kù)(AWR)在默認(rèn)情況下,倉(cāng)庫(kù)用小時(shí)填充,保留期是7天。
AWR使用多少空間
SQL> Select occupant_name,occupant_desc,space_usage_kbytes from v$sysaux_occupants where occupant_name like '%AWR%';
OCCUPANT_NAME OCCUPANT_DESC SPACE_USAGE_KBYTES
----------------- ---------------------------------- ------------------
SM/AWR Server Manageability - Automatic Workload Repository 215616
SQL>
1
2
3
4
5
6
7
系統(tǒng)上最原始的AWR信息是什么?
SQL> select dbms_stats.get_stats_history_availability from dual;
GET_STATS_HISTORY_AVAILABILITY
-------------------------------------------------------------
20-OCT-16 12.04.49.088829000 AM -04:00
1
2
3
4
5
什么是AWR信息的保留期?
SQL> select dbms_stats.get_stats_history_retention from dual;
GET_STATS_HISTORY_RETENTION
---------------------------
31
1
2
3
4
5
將AWR信息的保留期更改為15天?
SQL> EXEC dbms_stats.alter_stats_history_retention(15);
PL/SQL 過(guò)程已成功完成。
1
2
3
獲取生成的trace文件
開(kāi)啟SQL跟蹤后,會(huì)生成一個(gè)trace文件,通過(guò)初始化參數(shù)user_dump_dest配置其所在目錄,該參數(shù)的值可以通過(guò)下面方法獲取到:
select name, value from v$parameter where name = 'user_dump_dest'
1
2
trace文件的名字是獨(dú)立于版本和平臺(tái)的,在大部分常見(jiàn)的平臺(tái)下,命名結(jié)構(gòu)如下:
{instance name}_{process name}_{process id}.trc
1
1)instance name
初始化參數(shù)instance_name的小寫(xiě)值。通過(guò)v$instance視圖的instance_name列可以得到這個(gè)值。
2)process name
產(chǎn)生跟蹤文件進(jìn)程的名字的小寫(xiě)值。對(duì)于專(zhuān)有服務(wù)器進(jìn)程,使用ora,對(duì)于共享服務(wù)器進(jìn)程,可以通過(guò)v$diapatcher或v$shared_server視圖的name列獲得。對(duì)于并行從屬進(jìn)程,可以通過(guò)v$px_process視圖server_name列獲得,對(duì)于其他多數(shù)后臺(tái)進(jìn)程來(lái)說(shuō),可以通過(guò)v$bgprocess視圖的name列獲得。
3)process id
操作系統(tǒng)層面的進(jìn)程標(biāo)記。這個(gè)值可以通過(guò)v$process視圖的spid列獲取。
根據(jù)這些信息,可以通過(guò)下面的方式獲取trace文件名:
select s.SID,
s.SERVER,
lower(case
when s.SERVER in ('DEDICATED', 'SHARED') then
i.INSTANCE_NAME || '_' || nvl(pp.SERVER_NAME, nvl(ss.NAME, 'ora')) || '_' ||
p.SPID || '.trc'
else
null
end) as trace_file_name
from v$instance i,
v$session s,
v$process p,
v$px_process pp,
v$shared_server ss
where s.PADDR = p.ADDR
and s.SID = pp.SID(+)
and s.PADDR = ss.PADDR(+)
and s.TYPE = 'USER'
and s.SID = 'your sid'
order by s.SID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
將上面的’your sid’替換為你的session的sid就可以查出指定session生成的trace文件的名字,session的sid在v$session視圖中得到,或者直接查詢(xún)當(dāng)前session的sid:
select userenv('sid') from dual
或者
select sid from v$mystat a where rownum=1 ;
1
2
3
將路徑(user_dump_dest)和文件名結(jié)合在一起,我們就得到了trace文件的完整路徑。
而在Oracel 11g中,查詢(xún)當(dāng)前會(huì)話生成的trace文件則非常簡(jiǎn)單:
select value from v$diag_info where name = 'Default Trace File'
---------------------
作者:小小工匠
來(lái)源:CSDN
原文:https://blog.csdn.net/yangshangwei/article/details/52449489
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
在線
客服
服務(wù)時(shí)間:周一至周日 08:30-18:00
選擇下列產(chǎn)品馬上在線溝通:
客服
熱線
7*24小時(shí)客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信