- 浏览: 2111771 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
细说websocket - php篇 -
wahahachuang8:
挺好的,学习了
细说websocket - php篇 -
jacking124:
学习了!支持你,继续
初窥Linux 之 我最常用的20条命令 -
aliahhqcheng:
应该是可以实现的,没有看过源码。你可以参考下:http://w ...
Jackson 框架,轻易转换JSON
Oracle性能问题sql调优脚本集
来自:《Oracle 11g性能优化攻略》
---------------------------------------------------------------------------------------------------------
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
--检查报警日志->性能差的sql->会话满了->阻塞->IO->锁->CPU->FRA闪回恢复区->hanganalyze
--DEFAULT_PERMANENT_TABLESPACE
默认的永久表空间 DEFAULT_TEMP_TABLESPACE 默认的临时表空间
select *
from DATABASE_PROPERTIES
where property_name
IN ( 'DEFAULT_PERMANENT_TABLESPACE' , 'DEFAULT_TEMP_TABLESPACE' );
--如何查看当前SQL*PLUS用户的sid和serial#:
select sid,
serial#, status from v$session
where audsid=userenv( 'sessionid' );
--UNDO表空间的设置
SELECT NAME ,VALUE
FROM V$PARAMETER
WHERE NAME IN ( 'undo_tablespace' , 'undo_management' );
--是否使用本地管理及ASM
SELECT TABLESPACE_NAME,
EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT,BIGFILE FROM DBA_TABLESPACES;
--/*+APPEND
*/ INSERT/*+APPEND */ INTO TABLE SELECT * FROM
SELECT /*RECENTSQL
*/ SQL_ID,CHILD_NUMBER,HASH_VALUE,ADDRESS,EXECUTIONS,SQL_TEXT
FROM V$SQL
WHERE PARSING_USER_ID
= ( SELECT USER_ID
FROM ALL_USERS
WHERE USERNAME
= 'ISS' )
AND COMMAND_TYPE
IN (2,3,6,7,189)
AND UPPER (SQL_TEXT)
NOT LIKE UPPER ( '%RECENTSQL%' );
--虚拟索引虚拟索引的目的,是在不必耗cpu,耗IO以及消耗大量存储空间去实际创建索引的情况,来判断一个索引是否能够对sql优化起到作用。
--CREATE
INDEX IDX_NAME TABLE_NAME(COL) NOSEGMENT;
--索引监控
SELECT UA.INDEX_NAME,UA.TABLE_NAME,UA.MONITORING,UA.USED
FROM V$OBJECT_USAGE
UA WHERE UA.USED= 'NO' AND UA.TABLE_NAME
LIKE 'FM%' ;
SELECT IO. NAME ,T. NAME ,DECODE(BITAND(I.FLAGS,65535),0, 'NO' , 'YES' ),DECODE(BITAND(OU.FLAGS,1),0, 'NO' , 'YES' ),OU.START_MONITORING,OU.END_MONITORING
FROM SYS.OBJ$
IO,SYS.OBJ$ T,SYS.IND$ I,SYS.OBJECT_USAGE OU WHERE I.OBJ#=OU.OBJ#
AND IO.OBJ#=OU.OBJ#
AND T.OBJ#=I.BO#;
--加快索引的创建速度
ALTER INDEX ISS_FM_ALARM_CLEARID
REBUILD PARALLEL /*并行*/ NOLOGGING /*少日志*/ ;
--keep缓冲池(长期占有)、recycle缓冲池(一天用那么一两次且是大对象),查询多少个数据块在缓冲区
SELECT O.OBJECT_NAME,
COUNT (*)
NUMBER_OF_BLOCKS FROM DBA_OBJECTS
O,V$BH V WHERE O.DATA_OBJECT_ID
= V.OBJD AND O.OWNER= 'ISS' GROUP BY O.OBJECT_NAME
ORDER BY COUNT (*)
DESC ;
--统计级别AWR
SHOW
PARAMETER STATISTICS_LEVEL;
--保存30=43200分钟,天时间间隔30分钟。
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(RETENTION=>43200,INTERVAL=>30);
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(START_SNAP_ID=>256,END_SNAP_ID=>288,BASELINE_NAME=> 'BASELINE
#1' );
SELECT BASELINE_NAME,START_SNAP_ID,
TO_CHAR(START_SNAP_TIME, 'YYYY-MM-DD
HH24:MI' )
START_TIME, END_SNAP_ID,TO_CHAR(END_SNAP_TIME, 'YYYY-MM-DD
HH24:MI' )
END_TIME,EXPIRATION FROM DAB_HIST_BASELINE
ORDER BY BASELINE_ID;
--过去15分钟的等待事件
SELECT ASH.EVENT, SUM (ASH.WAIT_TIME+ASH.TIME_WAITED)
TITAL_WAIT FROM V$ACTIVE_SESSION_HISTORY
ASH WHERE ASH.SAMPLE_TIME
BETWEEN SYSDATE-1/24/4
AND SYSDATE
GROUP BY ASH.EVENT
ORDER BY 2
DESC ;
--那些用户经历了等待
SELECT S.SID,S.USERNAME, SUM (a.WAIT_TIME+a.TIME_WAITED)
TOTAL_WAIT_TIME FROM V$ACTIVE_SESSION_HISTORY
A,V$SESSION S WHERE A.SAMPLE_TIME
BETWEEN SYSDATE-30/2880
AND SYSDATE
AND A.SESSION_ID
=S.SID GROUP BY S.SID,
S.USERNAME ORDER BY TOTAL_WAIT_TIME
DESC ;
--等待事件最长的sql
SELECT A.USER_ID,U.USERNAME,TO_NCHAR(S.SQL_TEXT), SUM (A.WAIT_TIME+A.TIME_WAITED)
TOTAL_WAIT_TIME FROM V$ACTIVE_SESSION_HISTORY
A, V$SQLAREA S,DBA_USERS U WHERE A.SAMPLE_TIME
BETWEEN SYSDATE-30/2880
AND SYSDATE
AND A.SQL_ID=S.SQL_ID
AND A.USER_ID=U.USER_ID
GROUP BY A.USER_ID,S.SQL_TEXT,U.USERNAME;
--由于锁定所花费的等待时间
SELECT WAIT_CLASS,EVENT,TIME_WAITED/100
TIME_SECS FROM V$SYSTEM_EVENT
E WHERE E.WAIT_CLASS<> 'Idle' AND TIME_WAITED
>0 UNION SELECT 'Time
Model' ,STAT_NAME
NAME ,
ROUND((value/1000000),2) TIME_SECS FROM V$SYS_TIME_MODEL
WHERE STAT_NAME
NOT IN ( 'background
elapsed time' , 'background
cpu time' )
ORDER BY 3
DESC ;
--过去15分钟使用最多cpu的会话
SELECT *
FROM ( SELECT S.USERNAME,S.MODULE,S.SID,S.SERIAL#, COUNT (*)
FROM V$ACTIVE_SESSION_HISTORY
H, V$SESSION S WHERE H.SESSION_ID=S.SID
AND H.SESSION_SERIAL#=S.SERIAL#
AND SESSION_STATE= 'ON
CPU' AND SAMPLE_TIME
> SYSDATE-INTERVAL '15' MINUTE GROUP BY S.USERNAME,S.MODULE,S.SID,S.SERIAL#
ORDER BY COUNT (*)
DESC );
--查询数据库等待百分比
SELECT METRIC_NAME,VALUE
FROM V$SYSMETRIC
WHERE METRIC_NAME
IN ( 'Database
CPU Time Ratio' , 'Database
Wait Time Ratio' )
AND INTSIZE_CSEC=( SELECT MAX (INTSIZE_CSEC)
FROM V$SYSMETRIC);
--当前等待情况
SELECT WAIT_CLASS, SUM (TIME_WAITED),
SUM (TIME_WAITED)/ SUM (TOTAL_WAITS)
SUM_WAITS FROM V$SYSTEM_WAIT_CLASS
GROUP BY WAIT_CLASS
ORDER BY 3
DESC ;
--等待事件类型
SELECT WAIT_CLASS, NAME FROM V$EVENT_NAME
WHERE NAME LIKE 'enq%' AND WAIT_CLASS
<> 'Other' ORDER BY 1
DESC ;
--找出是那种等待事件导致总等待事件过长
SELECT A.EVENT,A.TOTAL_WAITS,A.TIME_WAITED,A.AVERAGE_WAIT
FROM V$SYSTEM_EVENT
A, V$EVENT_NAME B, V$SYSTEM_WAIT_CLASS C WHERE A.EVENT_ID=B.EVENT_ID
AND B.WAIT_CLASS#=C.WAIT_CLASS#
AND C.WAIT_CLASS
IN ( 'Application' , 'Administrative' )
ORDER BY 3
DESC ;
--日志文件commit过多次数多而短
--enq:
TM - contention 锁表
SELECT *
FROM ( SELECT C.TABLE_NAME,CO.COLUMN_NAME,CO.POSITION
COLUMN_POSITION FROM USER_CONSTRAINTS
C,USER_CONS_COLUMNS CO WHERE C.CONSTRAINT_NAME=CO.CONSTRAINT_NAME
AND C.CONSTRAINT_TYPE= 'R' MINUS
SELECT UI.TABLE_NAME,UIC.COLUMN_NAME,UIC.COLUMN_POSITION
COLUMN_POSITION FROM USER_INDEXES
UI, USER_IND_COLUMNS UIC WHERE UI.INDEX_NAME=UIC.INDEX_NAME
) ORDER BY TABLE_NAME,
COLUMN_POSITION;
--深入会话级
SELECT A.SID,A.EVENT,A.TOTAL_WAITS,A.TIME_WAITED,A.AVERAGE_WAIT
FROM V$SESSION_EVENT
A,V$SESSION B WHERE A.TIME_WAITED
>0 AND A.SID=B.SID
AND B.USERNAME
IS NOT NULL AND A.EVENT= 'enq:
TX - row lock contention' ORDER BY 5
DESC ;
--最近被锁住的会话
SELECT TO_CHAR(H.SAMPLE_TIME, 'HH24:MI:SS' )
TIME ,H.SESSION_ID
SID,DECODE(H.SESSION_STATE, 'WAITTING' ,H.EVENT,H.SESSION_STATE
) STATE,H.SQL_ID,H.BLOCKING_SESSION BLOCKER FROM V$ACTIVE_SESSION_HISTORY
H,DBA_USERS U WHERE U.USER_ID=H.USER_ID
AND H.SAMPLE_TIME=SYSTIMESTAMP-(2/1440);
--引起最多等待的sql
SELECT ASH.USER_ID,U.USERNAME,
S.SQL_TEXT, SUM (ASH.WAIT_TIME+ASH.TIME_WAITED
) TTL_WAIT_TIME FROM V$ACTIVE_SESSION_HISTORY
ASH,V$SQLAREA S,DBA_USERS U WHERE ASH.SAMPLE_TIME
BETWEEN SYSDATE-60/2880
AND SYSDATE
AND ASH.SQL_ID=S.SQL_ID
AND ASH.USER_ID=U.USER_ID
GROUP BY ASH.USER_ID,S.SQL_TEXT,U.USERNAME
ORDER BY TTL_WAIT_TIME
DESC ;
--捕捉运行很久的SQL
select LO.START_TIME,LO.TARGET,
username,sid,opname,round(sofar*100 / totalwork,0) || '%' as progress,time_remaining,sql_text
from v$session_longops
lo, v$sql where time_remaining
<> 0 and sql_address=address
and sql_hash_value
= hash_value;
--某个会话在等待什么
SELECT EVENT, COUNT (*)
FROM V$SESSION_WAIT
GROUP BY EVENT
ORDER BY COUNT (*)
DESC ;
SELECT EVENT,STATE,SECONDS_IN_WAIT
SIW FROM V$SESSION_WAIT
W WHERE W.SID= '2100' ;
--监控临时表空间
SELECT *
FROM ( SELECT A.TABLESPACE_NAME, SUM (A.BYTES/1024/1024)
ALLOCATED_MB FROM DBA_TEMP_FILES
A WHERE A.TABLESPACE_NAME= UPPER ( '&&TEMP_TSNAME' )
GROUP BY A.TABLESPACE_NAME
) X,( SELECT SUM (B1.BYTES_USED/1024/1024
) USED_MB, SUM (B1.BYTES_FREE/1024/1024
) FREE_MB FROM V$TEMP_SPACE_HEADER
B1 WHERE B1.TABLESPACE_NAME= UPPER ( '&&TEMP_TSNAME' )
GROUP BY B1.TABLESPACE_NAME
);
--那条sql使用了temp表空间
SELECT S.SID|| ',' ,S.SERIAL#
SID_SERIAL,S.USERNAME,O.BLOCKS*T.BLOCK_SIZE/1024/1024 MB_USED,O.TABLESPACE,O.SQLADDR,H.HASH_VALUE,H.SQL_TEXT
FROM V$SORT_USAGE
O, V$SESSION S,V$SQLAREA H,DBA_TABLESPACES T WHERE O.SESSION_ADDR
= S.SADDR AND O.SQLADDR=H.ADDRESS(+)
AND O.TABLESPACE
= T.TABLESPACE_NAME ORDER BY S.SID;
--临时表空间使用率
SELECT S.SID|| ',' ,S.SERIAL#
SID_SERIAL,S.USERNAME,S.OSUSER,P.SPID,S.MODULE,S.PROGRAM, SUM (O.BLOCKS
)*T.BLOCK_SIZE/1024/1024 MB_USED,O.TABLESPACE, COUNT (*)
SORTS FROM V$SORT_USAGE
O, V$SESSION S,V$PROCESS P,DBA_TABLESPACES T WHERE O.SESSION_ADDR
= S.SADDR AND S.PADDR=P.ADDR
AND O.TABLESPACE
= T.TABLESPACE_NAME GROUP BY S.SID,S.SERIAL#,S.USERNAME,S.OSUSER,P.SPID,S.MODULE,S.PROGRAM,T.BLOCK_SIZE,O.TABLESPACE
ORDER BY S.SID;
--查看一下哪个用户在用临时段:
SELECT sid,serial#,sql_address,machine,program,tablespace,segtype,contents
FROM v$session
se,v$sort_usage su WHERE se.saddr=su.session_addr;
--查找前十条性能差的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<10
;
--等待时间最多的5个系统等待事件的获取:
select *
from ( select *
from v$system_event
where event
not like 'SQL%' order by total_waits
desc )
where rownum<=5;
--如何查看一下某个shared_server正在忙什么:
SELECT a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text
FROM v$session
a,v$process b,v$sqltext c WHERE b.spid=13161
AND b.addr=a.paddr
AND a.sql_address=c.address(+)
ORDER BY c.piece;
--数据库共享池性能检查:
Select namespace,gets,gethitratio,pins,pinhitratio,reloads,Invalidations
from v$librarycache
where namespace
in ( 'SQLAREA' , 'TABLE/PROCEDURE' , 'BODY' , 'TRIGGER' );
--检查数据字典的命中率:
select 1- sum (getmisses)/ sum (gets)
"data
dictionary hit ratio" from v$rowcache;
--查看耗资源的进程(top
session):
select s.schemaname
schema_name,decode(sign(48 - command), 1, to_char(command), 'Action
Code #' ||
to_char(command) ) action ,status
session_status,s.osuser os_user_name,s.sid,p.spid,s.serial# serial_num,nvl(s.username, '[Oracle
process]' )
user_name,s.terminal terminal,s.program program,st.value criteria_value from v$sesstat
st,v$session s,v$process p where st.sid
= s.sid and st.statistic#
= to_number( '38' )
and ( 'ALL' = 'ALL' or s.status
= 'ALL' )
and p.addr=s.paddr
order by st.value
desc ,p.spid
asc ,s.username
asc ,s.osuser
asc ;
--监控当前数据库谁在运行什么SQL语句:
SELECT osuser,
username, sql_text from v$session
a, v$sqltext b where a.sql_address
=b.address order by address,
piece;
--如何查出前台正在发出的sql语句:
select user_name,sql_text
from v$open_cursor
where sid
in ( select sid
from ( select sid,serial#
from v$session
where status= 'ACTIVE' ));
--查看锁(lock)情况:
select /*+
RULE */ ls.osuser
os_user_name, ls.username user_name,decode(ls.type, 'RW' , 'Row
wait enqueue lock' , 'TM' , 'DML
enqueue lock' , 'TX' , 'Transaction
enqueue lock' , 'UL' , 'User
supplied lock' )
lock_type,o.object_name object,decode(ls.lmode, 1, null ,
2, 'Row
Share' ,3, 'Row
Exclusive' ,4, 'Share' ,5, 'Share
Row Exclusive' ,6, 'Exclusive' , null )lock_mode,o.owner,ls.sid,ls.serial#
serial_num,ls.id1,ls.id2 from sys.dba_objects
o,( select s.osuser,s.username,l.type,l.lmode,s.sid,s.serial#,l.id1,l.id2
from v$session
s,v$lock l where s.sid=l.sid)ls
where o.object_id=ls.id1
and o.owner<> 'SYS' order by o.owner,
o.object_name;
--查看占io较大的正在运行的session:
SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,
se.MODULE,se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changes
FROM v$session
se,v$session_wait st,v$sess_io si,v$process pr WHERE st.sid=se.sid
AND st.sid=si.sid
AND se.PADDR=pr.ADDR
AND se.sid>6
AND st.wait_time=0
AND st.event
NOT LIKE '%SQL%' ORDER BY physical_reads
DESC ;
--查看表空间数据文件的读写性能:(注意:如果phyblkrd与phyrds很接近的话,则表明这个表空间中存在全表扫描的表,这些表需要调整索引或优化SQL语句)
Select name ,phyrds,phywrts,avgiotim,miniotim,maxiowtm,maxiortm
from v$filestat,v$datafile
where v$filestat.file#=v$datafile.file#;
Select fs. name name ,f.phyrds,f.phyblkrd,f.phywrts,f.phyblkwrt
,f.readtim,f.writetim from v$filestat
f, v$datafile fs where f.file#
= fs.file# order by fs. name ;
--根据sid查看对应连接正在运行的sql
select /*+
PUSH_SUBQ */ command_type,sql_text,sharable_mem,
persistent_mem,runtime_mem,sorts,version_count,loaded_versions,open_versions,users_opening,executions, users_executing,loads,first_load_time,invalidations, parse_calls,disk_reads,buffer_gets,rows_processed,sysdate start_time,sysdate finish_time, '>' ||
address sql_address, 'N' status
from v$sqlarea
where address
= ( select sql_address
from v$session
where sid= '&&SID' );
--根据pid查看sql语句:
select sql_text
from v$sql
where address
in ( select sql_address
from v$session
where sid
in ( select sid
from v$session
where paddr
in ( select addr
from v$process
where spid=&pid)));
--根据SID找ORACLE的某个进程:
select pro.spid
from v$session
ses,v$process pro where ses.sid=&sid
and ses.paddr=pro.addr;
--查询表空间的碎片程度:
select tablespace_name, count (tablespace_name)
from dba_free_space
group by tablespace_name
having count (tablespace_name)>10;
--查看排序段的性能:
SELECT name ,
value FROM v$sysstat
WHERE name IN ( 'sorts
(memory)' ,
'sorts
(disk)' );
--查看数据库的创建日期和归档方式:
Select Created,
Log_Mode, Log_Mode From V$ Database ;
|
附图:oracle性能问题检修流程
相关推荐
Oracle SQL 优化与调优技术详解-随书脚本.zip
NULL 博文链接:https://dbua.iteye.com/blog/1530910
个人总结 内部资料 oracle 索引 调优
参加oracle原厂培训,老师给的,很好用,介绍给大家 Produces an HTML report with a list of observations based on health-checks performed in and around a SQL statement that may be performing poorly. ...
http://blog.csdn.net/wwlhz/article/details/70171288
Oracle SQL执行计划分析器功能的创建3步曲: 1 首先,编译XYG_ALD_SESS_PKG的Package头。 (XYG_ALD_SESS_PKG.sql) 2 接着要建立好下面的4个视图对象。因为XYG_ALD_SESS_PKG包体会用到。(View Create Script v...
2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优 26 2.2 如何缩短SQL调优时间 27 2.2.1 先...
12.Oracle专家调优秘密 13.PL_SQL单行函数和组函数详解 14.PL-SQL 15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接...
《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...
最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。 ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用...
书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。 本书还提供了dba完成本职工作必备的基本的uniix、...
oracle 常用和特殊的SQL脚本,以及PL/SQL; 备份和恢复、性能调优、oracle 网络、Oracle管理等等!
他的关注方向包括Oracle产品集,以及其他前沿技术和这些技术在优化数据仓库设计和部署的应用。他还是各种技术会议的主讲人,包括COLLABORATE、Oracle OpenWorld和其他地方与区域会议。 Michael Abbey是公认的...
EnterpriseDB是PostgreSQL的一个分支,在PostgreSQL基础上,针对企业级应用进行了专门的优化,同时,增加了一系列如动态 性能调优(DynaTune)、EDB Loader、高效批量SQL处理等高级特性;在众多功能亮点中,...
EnterpriseDB是PostgreSQL的一个分支,在PostgreSQL基础上,针对企业级应用进行了专门的优化,同时,增加了一系列如动态 性能调优(DynaTune)、EDB Loader、高效批量SQL处理等高级特性;在众多功能亮点中,...
EnterpriseDB是PostgreSQL的一个分支,在PostgreSQL基础上,针对企业级应用进行了专门的优化,同时,增加了一系列如动态 性能调优(DynaTune)、EDB Loader、高效批量SQL处理等高级特性;在众多功能亮点中,...
EnterpriseDB是PostgreSQL的一个分支,在PostgreSQL基础上,针对企业级应用进行了专门的优化,同时,增加了一系列如动态 性能调优(DynaTune)、EDB Loader、高效批量SQL处理等高级特性;在众多功能亮点中,...
EnterpriseDB是PostgreSQL的一个分支,在PostgreSQL基础上,针对企业级应用进行了专门的优化,同时,增加了一系列如动态 性能调优(DynaTune)、EDB Loader、高效批量SQL处理等高级特性;在众多功能亮点中,...