Oracle数据库性能监控语句汇总

Oracle数据库性能监控语句汇总
Oracle数据库性能监控语句汇总

Oracle数据库性能监控语句

一、查看临时表空间使用情况 (2)

二、查看使用临时表空间的SQL (2)

三、收缩临时表空间 (3)

四、重建索引 (3)

五、查看表空间使用情况 (3)

六、查询表空间的总容量 (4)

七、查询表空间使用率 (4)

八、查找当前表级锁 (4)

九、监控当前数据库谁在运行什么SQL语句 (5)

十、找使用CPU多的用户session (5)

十一、查看死锁信息 (5)

十二、具有最高等待的对象 (5)

十三、查看具有最高等待的对象 (6)

十四、查看等待最多的SQL (6)

十五、显示正在等待锁的所有会话 (7)

十七、查数据库中正在执行的SQL (7)

十八、每天执行慢的SQL (8)

十九、查看非绑定变量的SQL (9)

二十、查看LOG切换频率 (10)

二十一、查看SQL执行进度 (10)

二十二、查询外键字段在主键表中没有索引的 (11)

二十三、查看软硬解析,游标数 (12)

二十四、查看未提交的事物的会话和锁的对象 (12)

二十五、通过系统中PID去数据库中找执行的SQL (13)

二十六、序列/索引差异比对结果后的创建语句 (13)

二十七、查看热点块的对象 (15)

二十八、查看某用户表大小/总数情况 (15)

二十九、重新编译失效存储/包语句 (16)

三十、Oracle 查看各表空间使用情况和最大最小块 (16)

三十一、Oracle 查看TEMP表空间使用情况 (17)

三十二、Oracle 查看回滚进度情况用的几个SQL (17)

三十三、Oracle 查询锁之间的依赖关系 (18)

三十四、Oracle 查找锁之间依赖关系的最源头SID (20)

写于2016年1月,所有语句经过测试一、查看临时表空间使用情况

Select

f.tablespace_name

,sum(f.bytes_free + f.bytes_used)

/1024/1024/1024 "total GB"

,sum((f.bytes_free + f.bytes_used) - nvl(p.bytes_used, 0))

/1024/1024/1024 "Free GB"

,sum(nvl(p.bytes_used, 0))

/1024/1024/1024 "Used GB"

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

group by

f.tablespace_name

二、查看使用临时表空间的SQL

Select https://www.360docs.net/doc/fc15611662.html,ername,

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 https://www.360docs.net/doc/fc15611662.html, = 'db_block_size'

and su.session_addr = se.saddr

and s.hash_value = su.sqlhash

and s.address = su.sqladdr

order by https://www.360docs.net/doc/fc15611662.html,ername, se.sid

三、收缩临时表空间

alter tablespace temp shrink space;

alter tablespace temp shrink tempfile ''

四、重建索引

alter index PK_CROSSRELATION rebuild;

五、查看表空间使用情况

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB "表空间大小(M)",

D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",

F.TOTAL_BYTES "空闲空间(M)",

F.MAX_BYTES "最大块(M)"

FROM (SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

FROM SYS.DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT DD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER BY 1;

六、查询表空间的总容量

select tablespace_name, sum(bytes) / 1024 / 1024 as MB

from dba_data_files

group by tablespace_name;

七、查询表空间使用率

select total.tablespace_name,

round(total.MB, 2) as Total_MB,考试大论坛

round(total.MB - free.MB, 2) as Used_MB,

round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct

from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_free_space

group by tablespace_name) free,

(select tablespace_name, sum(bytes) / 1024 / 1024 as MB

from dba_data_files

group by tablespace_name) total

where free.tablespace_name = total.tablespace_name; 八、查找当前表级锁

select sess.sid,

sess.serial#,

lo.oracle_username,

lo.os_user_name,

ao.object_name,

lo.locked_mode

from v$locked_object lo,

dba_objects ao,

v$session sess

where ao.object_id = lo.object_id and lo.session_id = sess.sid;

杀掉锁表进程:

alter system kill session '436,35123';

九、监控当前数据库谁在运行什么SQL语句

select osuser, username, sql_text

from v$session a, v$sqltext b

where a.sql_address =b.address order by address, piece;

十、找使用CPU多的用户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;

十一、查看死锁信息

SELECT (SELECT username

FROM v$session

WHERE SID = a.SID) blocker, a.SID, 'is blocking',

(SELECT username

FROM v$session

WHERE SID = b.SID) blockee, b.SID

FROM v$lock a, v$lock b

WHERE a.BLOCK = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2;

十二、具有最高等待的对象

SELECT o.OWNER,o.object_name, o.object_type, a.event,

SUM (a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a, dba_objects o

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

AND a.current_obj# = o.object_id

GROUP BY o.OWNER,o.object_name, o.object_type, a.event

ORDER BY total_wait_time DESC;

十三、查看具有最高等待的对象

SELECT a.session_id, s.osuser, s.machine, s.program, o.owner, o.object_name, o.object_type, a.event,

SUM (a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a, dba_objects o, v$session s

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

AND a.current_obj# = o.object_id

AND a.session_id = s.SID

GROUP BY o.owner,

o.object_name,

o.object_type,

a.event,

a.session_id,

s.program,

s.machine,

s.osuser

ORDER BY total_wait_time DESC;

十四、查看等待最多的SQL

SELECT a.program, a.session_id, https://www.360docs.net/doc/fc15611662.html,er_id, https://www.360docs.net/doc/fc15611662.html,ername, s.sql_text,

SUM (a.wait_time + a.time_waited) total_wait_time

FROM v$active_session_history a, v$sqlarea s, dba_users d

WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE

AND a.sql_id = s.sql_id

AND https://www.360docs.net/doc/fc15611662.html,er_id = https://www.360docs.net/doc/fc15611662.html,er_id

GROUP BY a.program, a.session_id, https://www.360docs.net/doc/fc15611662.html,er_id, s.sql_text, https://www.360docs.net/doc/fc15611662.html,ername;

十五、显示正在等待锁的所有会话

SELECT * FROM DBA_WAITERS;

十七、查数据库中正在执行的SQL

SELECT SE.INST_ID, --实例

SQ.SQL_TEXT, /*SQL文本*/

SQ.SQL_FULLTEXT, /*SQL全部文本*/

SE.SID, /*会话的唯一标识,通常要对某个会话进行分析前,首先就需要获得该会话的SID。*/

--SE.SERIAL#, /*会话的序号*/

SQ.OPTIMIZER_COST AS COST_, /* COST 值*/

https://www.360docs.net/doc/fc15611662.html,ST_CALL_ET CONTINUE_TIME, /*执行时间可能是单个sql也可能是整个功能*/

SE.PREV_EXEC_START, /*SQL execution start of the last executed SQL statement*/

SE.EVENT, /*等待事件*/

SE.LOCKWAIT, /*是否等待LOCK(SE,P)*/

SE.MACHINE, /*客户端的机器名。(WORKGROUP\PC-201211082055)*/

SQ.SQL_ID, /*SQL_ID*/

https://www.360docs.net/doc/fc15611662.html,ERNAME, /*创建该会话的用户名*/

SE.LOGON_TIME /*登陆时间*/

--SE.TERMINAL, /*客户端运行的终端名。(PC-201211082055)*/

--,SQ.HASH_VALUE, /*一个SQL 产生的HASH 值*/

--SQ.PLAN_HASH_VALUE /*执行SQL的HASH值(解析后HASH值),与SQL_ADDRESS关联查询其他SQL相关视图后即可查询会话当前正在执行的SQL语句*/ FROM GV$SESSION SE, /*会话信息。每一个连接到ORACLE数据库的会话都能在该视图中对应一条记录,根据该视图中的信息可以查询该会话使用的用户,正在执行或者刚刚执行的SQL语句*/

/*[GV$SQLAREA 多节点]*/

GV$SQLAREA SQ /*跟踪所有SHARED POOL中的共享CURSOR信息,包括执行次数,逻辑读,物理读等*/

WHERE SE.SQL_HASH_VALUE = SQ.HASH_VALUE

AND SE.STATUS = 'ACTIVE'

AND SE.SQL_ID = SQ.SQL_ID

AND SQ.INST_ID = SE.INST_ID

AND https://www.360docs.net/doc/fc15611662.html,ERNAME is not null;

--过滤条件

--AND https://www.360docs.net/doc/fc15611662.html,ERNAME = 'FWSB' --用户名

--AND https://www.360docs.net/doc/fc15611662.html,MAND_TYPE IN (2, 3, 5, 6, 189)

--AND SE.SID != USERENV ('SID')/*rac集群环境误用*/

--AND MACHINE != 'WORKGROUP\MHQ-PC' ;

十八、每天执行慢的SQL

SELECT S.SQL_TEXT,

S.SQL_FULLTEXT,

S.SQL_ID,

ROUND(ELAPSED_TIME / 1000000 / (CASE

WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

1

ELSE

EXECUTIONS

END),

2) "执行时间'S'",

S.EXECUTIONS "执行次数",

S.OPTIMIZER_COST "COST",

S.SORTS,

S.MODULE, --连接模式(JDBC THIN CLIENT:程序)

-- S.LOCKED_TOTAL,

S.PHYSICAL_READ_BYTES "物理读",

-- S.PHYSICAL_READ_REQUESTS "物理读请求",

S.PHYSICAL_WRITE_REQUESTS "物理写",

-- S.PHYSICAL_WRITE_BYTES "物理写请求",

S.ROWS_PROCESSED "返回行数",

S.DISK_READS "磁盘读",

S.DIRECT_WRITES "直接路径写",

S.PARSING_SCHEMA_NAME,

https://www.360docs.net/doc/fc15611662.html,ST_ACTIVE_TIME

FROM GV$SQLAREA S

WHERE ROUND (ELAPSED_TIME / 1000000 / ( CASE

WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

1

ELSE

EXECUTIONS

END),

2) > 5 --100 0000微秒=1S

-- AND S.PARSING_SCHEMA_NAME = USER

AND TO_CHAR(https://www.360docs.net/doc/fc15611662.html,ST_LOAD_TIME, 'YYYY-MM-DD' ) =

TO_CHAR( SYSDATE, 'YYYY-MM-DD' )

AND https://www.360docs.net/doc/fc15611662.html,MAND_TYPE IN (2, 3, 5 , 6, 189) /*值对应类型2:INSERT、3:SELECT、6:UPDATE、7:DELETE、189:MERGE 查询V$SQLCOMMAND*/

AND MODULE = 'JDBC Thin Client'

ORDER BY "执行时间'S'" DESC;

十九、查看非绑定变量的SQL

SELECT V.SQL_ID,

V.SQL_FULLTEXT,

V.PARSING_SCHEMA_NAME,

FM.EXECUTIONS_COUNT,

FM.ELAPSED_TIME

FROM (SELECT L.FORCE_MATCHING_SIGNATURE MATHCES,

MAX(L.SQL_ID || L.CHILD_NUMBER) MAX_SQL_CHILD,

DENSE_RANK() OVER(ORDER BY COUNT(*) DESC ) RANKING,

ROUND(SUM (ROUND(ELAPSED_TIME / 1000000 / (CASE

WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

1

ELSE

EXECUTIONS

END),

5))) ELAPSED_TIME,

SUM(L.EXECUTIONS) EXECUTIONS_COUNT

FROM V$SQL L

WHERE TO_CHAR(TO_DATE(LAST_LOAD_TIME, 'YYYY-MM-DD HH24:MI:SS'),

'YYYY-MM-DD') = TO_CHAR(SYSDATE - 1, 'YYYY-MM-DD') -- 当天LAST_LOAD_TIME(VARCHAR类型,LOADED INTO THE LIBRARY CACHE TIME)

AND L.MODULE LIKE '%JDBC%' --程序连接

AND L.FORCE_MATCHING_SIGNATURE <> 0

AND L.PARSING_SCHEMA_NAME = UPPER ('&USERNAME') --用户

AND https://www.360docs.net/doc/fc15611662.html,MAND_TYPE IN (2, 3, 5 , 6, 189) --命令类型2:INSERT、3:SELECT、6:UPDATE、7:DELETE、189:MERGE 查询V$SQLCOMMAND

GROUP BY L.FORCE_MATCHING_SIGNATURE

HAVING COUNT (*) > 5) FM,

V$SQL V

WHERE FM.MAX_SQL_CHILD = (V.SQL_ID || V.CHILD_NUMBER)

AND EXECUTIONS_COUNT >= 50 --执行次数超过50次先筛选改写,后续慢慢在围小

ORDER BY FM.RANKING;

--V$SQL_BIND_CAPTURE --记录包含变量得表..包括ROWNUM<:1 变量二十、查看LOG切换频率

select b.SEQUENCE#,

b.FIRST_TIME,

a.SEQUENCE#,

a.FIRST_TIME,

round(((a.FIRST_TIME - b.FIRST_TIME) * 24 ) * 60, 2)

from v$log_history a, v$log_history b

where a.SEQUENCE# = b.SEQUENCE# + 1

and b.THREAD# = 1

order by a.SEQUENCE# desc;

二十一、查看SQL执行进度

--显示运行时间超过6秒的数据库操作的状态

SELECT A.SID,

A.SERIAL#,

OPNAME,

TARGET, --对象

TO_CHAR(START_TIME, 'YYYY-MM-DD HH24:MI:SS' ) START_TIME, --开始时间

(SOFAR / TOTALWORK) * 100 PROGRESS, --进度比

TIME_REMAINING, --估算剩余时间

ELAPSED_SECONDS, --运行时间‘S’

A.SQL_ID

FROM V$SESSION_LONGOPS A

WHERE SID = ;

*** 其中SID和SERIAL#是与V$SESSION中的匹配的,

*** OPNAME:指长时间执行的操作名.如:TABLE SCAN

*** TARGET:被操作的OBJECT_NAME. 如:TABLEA

*** TARGET_DESC:描述TARGET的容

*** SOFAR:这个是需要着重去关注的,表示已要完成的工作数,如扫描了多少个块。

*** TOTALWORK:指目标对象一共有多少数量(预计)。如块的数量。

*** START_TIME:进程的开始时间

*** LAST_UPDATE_TIM:最后一次调用SET_SESSION_LONGOPS的时间

*** TIME_REMAINING:估计还需要多少时间完成,单位为秒

*** ELAPSED_SECONDS:指从开始操作时间到最后更新时间

*** MESSAGE:对于操作的完整描述,包括进度和操作容。

*** USERNAME:与V$SESSION中的一样。

*** SQL_ADDRESS:关联V$SQL

*** SQL_HASH_VALUE:关联V$SQL

*** QCSID:主要是并行查询一起使用。

二十二、查询外键字段在主键表中没有索引的

SELECT C.*,

C1.r_constraint_name,

c2.table_name,

T.NUM_ROWS,

'create index idx_' || c.table_name || '_' || column_name || ' on ' ||

c.table_name || '(' || column_name || ');'

FROM USER_CONS_COLUMNS C

JOIN USER_CONSTRAINTS C1

ON C1.CONSTRAINT_NAME = C.CONSTRAINT_NAME

AND C1.CONSTRAINT_TYPE = 'R'

AND (C.TABLE_NAME, C.COLUMN_NAME) NOT IN

( SELECT TABLE_NAME, COLUMN_NAME FROM USER_IND_COLUMNS I) JOIN USER_TABLES T

ON T.TABLE_NAME = C.TABLE_NAME

join USER_CONSTRAINTS c2

on c1.r_constraint_name = c2.constraint_name;

博客:为什么子表外键列需要建立索引?

https://www.360docs.net/doc/fc15611662.html,/17203031/viewspace-701832/

** 自己测试【外键字段不加索引时】

** update外键表,主键表delete任何数据都不允许;但update session1的围且set字段不是where字段就可以执行,加索引后,更改where字段的数据会报错

二十三、查看软硬解析,游标数

SELECT /*A.SID,*/ /* A.STATISTIC#,*/

SUM (A.VALUE),

https://www.360docs.net/doc/fc15611662.html,,

( CASE

WHEN NAME = 'PARSE COUNT (TOTAL)' THEN

'表示总的解析次数'

WHEN NAME = 'PARSE COUNT (HARD)' THEN

'表示硬解析的次数'

WHEN NAME = 'SESSION CURSOR CACHE COUNT' THEN

'表示缓存的游标个数'

WHEN NAME = 'SESSION CURSOR CACHE HITS' THEN

'表示从缓存中找到游标的次数'

WHEN NAME = 'OPENED CURSORS CURRENT' THEN

'表示SESSION中打开的游标数'

END )

FROM V$SESSTAT A, V$STATNAME B

WHERE A.STATISTIC# = B.STATISTIC#

AND https://www.360docs.net/doc/fc15611662.html, IN ( 'PARSE COUNT (HARD)',

'PARSE COUNT (TOTAL)' ,

'SESSION CURSOR CACHE COUNT' ,

'SESSION CURSOR CACHE HITS' ,

'OPENED CURSORS CURRENT' )

-- AND SID=11

GROUP BY https://www.360docs.net/doc/fc15611662.html,

ORDER BY NAME;

--#用于衡量软硬解析/游标共享比.

二十四、查看未提交的事物的会话和锁的对象

SELECT DISTINCT S.SID,

S.SERIAL#,

S.MACHINE,

L.SQL_TEXT,

https://www.360docs.net/doc/fc15611662.html,ST_CALL_ET,

'ALTER SYSTEM KILL SESSION ''' || S.SID || ',' || S.SERIAL# ||

''';' ,

LO.ORACLE_USERNAME,

LO.OS_USER_NAME,

AO.OBJECT_NAME,

LO.LOCKED_MODE

FROM V$SESSION S,

V$TRANSACTION T,

V$SQL L,

V$LOCKED_OBJECT LO,

DBA_OBJECTS AO

WHERE S.TADDR = T.ADDR

AND S.PREV_SQL_ADDR = L.ADDRESS

AND AO.OBJECT_ID = LO.OBJECT_ID

AND LO.SESSION_ID = S.SID;

二十五、通过系统中PID去数据库中找执行的SQL

SELECT https://www.360docs.net/doc/fc15611662.html,ERNAME, A.PROGRAM, B.SPID, C.SQL_TEXT, C.SQL_FULLTEXT FROM V$SESSION A, V$PROCESS B, V$SQLAREA C

WHERE A.PADDR = B.ADDR

AND A.SQL_HASH_VALUE = C.HASH_VALUE

AND A.STATUS = 'ACTIVE'

AND https://www.360docs.net/doc/fc15611662.html,ERNAME NOT IN ( 'SYS', 'SYSTEM' , 'SYSMAN')

AND A.SID != USERENV ('SID')

AND B.SPID = 填写PID;

二十六、序列/索引差异比对结果后的创建语句

(例如:将A用户index和B用户对比,将A用户多B用户的在B用户创建)

【如下2个SQL都需要在缺少sequence/index A用户执行】

--#SEQUENCE的创建语句:

SELECT 'CREATE SEQUENCE ' || SEQUENCE_NAME || ' MINVALUE ' || MIN_VALUE ||

' MAXVALUE ' || MAX_VALUE || ' START WITH ' || LAST_NUMBER ||

' INCREMENT BY ' || INCREMENT_BY || (CASE

WHEN CACHE_SIZE = 0 THEN

' NOCACHE'

ELSE

' CACHE ' || CACHE_SIZE

END ) || ';'

FROM USER_SEQUENCES W

WHERE --过滤掉登录用户存在的SEQUENCE

NOT EXISTS ( SELECT 1

FROM USER_SEQUENCES@DB_SINOSOFT W1

WHERE W.SEQUENCE_NAME = W1.SEQUENCE_NAME);

--#索引差异结果的创建语句

SELECT 'CREATE ' || INDEX_TYPE || ' INDEX ' || INDEX_NAME || ' ON ' ||

TABLE_NAME || ' (' || LISTAGG(CNAME, ',' ) WITHIN GROUP (ORDER BY COLUMN_POSITION) || ');'

FROM (SELECT IC.INDEX_NAME,

IC.TABLE_NAME,

IC.COLUMN_NAME CNAME,

IC.COLUMN_POSITION,

COUNT (IC.INDEX_NAME) OVER ( PARTITION BY IC.INDEX_NAME, IC.TABLE_NAME) CON,

I.INDEX_TYPE

FROM USER_IND_COLUMNS@DB_SINOSOFT IC

JOIN USER_INDEXES@DB_SINOSOFT I

ON I.INDEX_NAME = IC.INDEX_NAME

WHERE

--过滤掉登录用户存在的INDEX

NOT EXISTS

( SELECT 1

FROM USER_IND_COLUMNS IC1

WHERE IC1.INDEX_OWNER = UPPER ( '&TO_USERNAME')

AND IC.INDEX_NAME = IC1.INDEX_NAME)

--过滤掉主键,避免索引创建,在创建主键报错对象已存在

AND IC.INDEX_NAME NOT IN

( SELECT C.CONSTRAINT_NAME FROM USER_CONSTRAINTS@DB_SINOSOFT C)

ORDER BY IC.INDEX_NAME, IC.COLUMN_POSITION) GROUP BY INDEX_TYPE, CON, INDEX_NAME, TABLE_NAME;

二十七、查看热点块的对象

SELECT A.HLADDR, A.FILE#, A.DBABLK, A.TCH, A.OBJ, B.OBJECT_NAME

FROM X$BH A, DBA_OBJECTS B

WHERE (A.OBJ = B.OBJECT_ID OR A.OBJ = B.DATA_OBJECT_ID)

AND A.HLADDR = '0000000054435000' --V$SESSION_WAIT.P1RAW UNION

SELECT HLADDR, FILE#, DBABLK, TCH, OBJ, NULL

FROM X$BH

WHERE OBJ IN ( SELECT OBJ

FROM X$BH

WHERE HLADDR = '0000000054435000'

MINUS

SELECT OBJECT_ID

FROM DBA_OBJECTS

MINUS

SELECT DATA_OBJECT_ID FROM DBA_OBJECTS)

AND HLADDR = '0000000054435000'

ORDER BY 4;

二十八、查看某用户表大小/总数情况

SELECT T.TABLE_NAME,

https://www.360docs.net/doc/fc15611662.html,MENTS,

T.NUM_ROWS,

ROUND (SUM (S.BYTES / 1024 / 1024 / 1024 )) GB

FROM USER_TABLES T

JOIN USER_SEGMENTS S

ON S.SEGMENT_NAME = T.TABLE_NAME

JOIN USER_TAB_COMMENTS TC

ON TC.TABLE_NAME = T.TABLE_NAME

GROUP BY T.TABLE_NAME, https://www.360docs.net/doc/fc15611662.html,MENTS, T.NUM_ROWS

ORDER BY NUM_ROWS DESC NULLS LAST ;

二十九、重新编译失效存储/包语句

SELECT 'ALTER ' || (CASE

WHEN OBJECT_TYPE = 'PACKAGE BODY' THEN

'PACKAGE'

ELSE

OBJECT_TYPE

END) || ' ' /*|| OWNER || '.' */

|| OBJECT_NAME || ' COMPILE ' || (CASE

WHEN OBJECT_TYPE = 'PACKAGE BODY' THEN

' BODY ;'

ELSE

';'

END) --除类型是PACKAGE BODY返回是PACKAGE,其他正常显示类型,是PACKAGE BODY显示COMPILE BODY 否则显示COMPILE

FROM USER_OBJECTS

WHERE STATUS != 'VALID' -->存储状态'无效'

--AND OWNER = USER

AND OBJECT_NAME NOT LIKE '%ETL%'

ORDER BY LAST_DDL_TIME DESC;

三十、Oracle 查看各表空间使用情况和最大最小块

SELECT UPPER (F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB "表空间大小(M)",

D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR( ROUND ((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) /

D.TOT_GROOTTE_MB * 100 ,

2 ),

'990.99' ) "使用比",

F.TOTAL_BYTES "空闲空间(G)",

F.MAX_BYTES "最大块(G)"

FROM (SELECT TABLESPACE_NAME,

ROUND (SUM (BYTES) / 1024 / 1024 / 1024 , 2) TOTAL_BYTES,

ROUND (MAX (BYTES) / 1024 / 1024 / 1024 , 2) MAX_BYTES

FROM SYS.DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

( SELECT DD.TABLESPACE_NAME,

ROUND (SUM (DD.BYTES) / 1024 / 1024 / 1024 , 2) TOT_GROOTTE_MB

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME;

三十一、Oracle 查看TEMP表空间使用情况

SELECT F.BYTES_FREE + F.BYTES_USED TOTAL_BYTES,

F.BYTES_FREE + F.BYTES_USED - NVL (P.BYTES_USED, 0 ) FREE_BYTES,

D.FILE_NAME,

NVL (P.BYTES_USED, 0 ) USED_BYTES

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;

--> 等同于

SELECT TABLESPACE_NAME,

TF.TABLESPACE_SIZE,

TF.FREE_SPACE,

TF.TABLESPACE_SIZE - TF.FREE_SPACE

FROM DBA_TEMP_FREE_SPACE TF;

三十二、Oracle 查看回滚进度情况用的几个SQL

SELECT DISTINCT KTUXESIZ FROM X$KTUXE WHERE KTUXESTA = 'ACTIVE' ;

SELECT USED_UBLK FROM V$TRANSACTION;

SELECT KTUXEUSN, KTUXESLT

FROM X$KTUXE

WHERE /*KTUXECFL = 'DEAD' AND*/

KTUXESTA = 'ACTIVE' ;

SELECT * FROM V_$FAST_START_TRANSACTIONS;

SELECT USED_UBLK, https://www.360docs.net/doc/fc15611662.html,ED_UREC FROM V$TRANSACTION T;

--查询视图V$FAST_START_TRANSACTIONS中字段UNDOBLOCKSDONE,UNDOBLOCKSTOTAL估算SMON恢复进度

三十三、Oracle 查询锁之间的依赖关系

SELECT DISTINCT S.SID ,/*会话的唯一标识,通常要对某个会话进行分析前,首先就需要获得该会话的SID。*/

--S.SERIAL# /*会话的序号*/,

S.STATE/*WAIT STATE~*/,

S.BLOCKING_SESSION ,

--SESSION IDENTIFIER OF THE BLOCKING SESSION. THIS COLUMN IS VALID ONLY IF BLOCKING_SESSION_STATUS HAS THE VALUE VALID.

S.BLOCKING_SESSION_STATUS STATUS,/*THIS COLUMN PROVIDES DETAILS ON WHETHER THERE IS A BLOCKING SESSION: */

(CASE

WHEN SQL_TEXT IS NULL/*LO.REQUEST = 0 */

THEN

'(SID:'|| S.SID ||')会话SQL已跑完'

ELSE

'(SID:'|| S.SID ||')会话正执行SQL:'|| SQL_.SQL_TEXT

END) SQL_TEXT/*执行完的SQL'SQL_TEXT标记SQL已跑完,否则标记SQL'*/,

--SQL_.SQL_FULLTEXT SQL全文本,

https://www.360docs.net/doc/fc15611662.html,ERNAME/*创建该会话的用户名*/,

O.OWNER ||'.'|| O.OBJECT_NAME 锁的对象,--V$SESSION.ROW_WAIT_OBJ#若操作完的该字段值=-1,所以关联的V$LOCKED_OBJECT取锁表

LO.REQUEST,-- Lock mode in which the process requests the lock 会话申请的锁的模式

S.EVENT,

S.MACHINE/*客户端的机器名。*/,

S.LOGON_TIME/*登陆时间*/,

'ALTER SYSTEM KILL SESSION '''|| S.SID ||','|| S.SERIAL# ||''';'KILL--若存在锁情况,会用到KILL锁释放~

FROM V$SESSION S

LEFT JOIN V$SQL SQL_

ON SQL_.SQL_ID = S.SQL_ID

JOIN V$LOCKED_OBJECT L

ON L.SESSION_ID = S.SID

JOIN ALL_OBJECTS O

ON L.OBJECT_ID = O.OBJECT_ID

JOIN V$LOCK LO

ON(LO.BLOCK !=0OR LO.REQUEST !=0)

--V$LOCK.block => A value of either 0 or 1, depending on whether or not the lock in question is the blocker

--V$LOCK.REQUEST => Lock mode in which the process requests the lock:下文有值的意义~ ['0 - none']

WHERE LO.SID = L.SESSION_ID

AND LO.SID = S.SID

ORDER BY S.BLOCKING_SESSION DESC;

注释:

--视图==官网注释

--v$session==http://docs.oracle./cd/E11882_01/server.112/e40402/dynviews_3016.htm#R EFRN30223

--V$SQL==http://docs.oracle./cd/E11882_01/server.112/e40402/dynviews_3043.htm #REFRN30246

--V$LOCK==http://docs.oracle./cd/E11882_01/server.112/e40402/dynviews_2027.htm #REFRN30121

--V$LOCKED_OBJECT==http://docs.oracle./cd/E11882_01/server.112/e40402/dynviews_2030.htm# REFRN30125

--ALL_OBJECTS==http://docs.oracle./cd/E11882_01/server.112/e40402/statviews_1158.htm# REFRN20146

--显示字段==官网注释:

V$SESSION.STATE =Wait state :

--WAITING - Session is currently waiting

--WAITED UNKNOWN TIME - Duration of the last wait is unknown; this is the value when the parameter TIMED_STATISTICS is set to false

--WAITED SHORT TIME - Last wait was less than a hundredth of a second

--WAITED KNOWN TIME - Duration of the last wait is specified in the WAIT_TIME

column S.BLOCKING_SESSION ,

--Session identifier of the blocking session. This column is valid only if BLOCKING_SESSION_STATUS has the value VALID.

V$SESSION.BLOCKING_SESSION_STATUS = This column provides details on whether there is a blocking session:

--VALID - there is a blocking session, and it is identified in the BLOCKING_INSTANCE and

BLOCKING_SESSION columns

--NO HOLDER - there is no session blocking this session

--NOT IN WAIT - this session is not in a wait

--UNKNOWN - the blocking session is unknown

V$LOCK.REQUEST =Lock mode in which the process requests the lock:

--0 - none

--1 - null (NULL)

--2 - row-S (SS)

--3 - row-X (SX)

--4 - share (S)

--5 - S/Row-X (SSX)

--6 - exclusive (X)

三十四、Oracle 查找锁之间依赖关系的最源头SID

WITH LOCK_1AS

(SELECT DISTINCT S.INST_ID, S.SID, S.BLOCKING_SESSION, https://www.360docs.net/doc/fc15611662.html,ST_CALL_ET FROM GV$SESSION S

WHERE S.BLOCKING_SESSION IS NOT NULL

and BLOCKING_SESSION_STATUS ='VALID')

SELECT BLOCKING_SESSION

FROM LOCK_1

WHERE BLOCKING_SESSION NOT IN(SELECT SID FROM LOCK_1);

注释:

昨天通过

Oracle 查询锁之间的依赖关系的SQL 查询生产环境锁;

由于Oracle 查询锁之间的依赖关系查询数据比较全(例如:锁和被锁关系,锁的对象,等待事件,操作锁的客户端,会话跑的sql,等状态.)

若在每个SQL锁的对象较多、操作人较多、且最源头锁对象的sid 不断变化时;

想通过Oracle查询锁之间的依赖关系再右眼查到最源头锁sid比较费事。

所以特写如下sql!

实现Oracle 查找锁之间依赖关系的最源头SID(首先得到锁的SID),再通过SID找sql 查问题..

*** 思路

实验5 数据库监视与性能优化

实验项目名称:数据库监视与性能优化实验学时: 4 同组学生姓名:实验地点: 实验日期:实验成绩: 批改教师:批改时间: 一、实验目的和要求 1、利用索引优化查询性能、优化SQL语句。 2、了解通过对SQL profiler跟踪系统运行数据。 二、实验仪器和设备 设备:奔腾Ⅳ或奔腾Ⅳ以上计算机; 环境:WINDOWS 7 或WINDOWS XP、Microsoft SQL Server 2008。 三、实验过程 1、完成以下的实验。 1)使用对象资源管理器创建、管理索引 ①为员工表创建一个索引名为“emp_id”的唯一性非聚集索引,索引关键字是“员工号”,填充因子80 % 。 ②重命名索引,将索引“emp_id”重命名为“员工表_员工号”。 ③删除索引“员工表_员工号”。 2)使用T-SQL语句创建、管理索引 ①为员工表创建一个索引名为“emp_id”的唯一性非聚集索引,索引关键字是“员工号”,填充因子80 % 。 ②重命名索引,将索引“emp_id”重命名为“员工表_员工号”。 ③为员工参与项目表创建一个索引名为“员工_项目_index”的非聚集复合索引,索引关键字为“员工号”,升序,项目编号,降序,填充因子50%。 ④删除索引“员工表_员工号”和“员工_项目_index”。 3)索引前后的执行计划 ①删除员工表中员工号上的主键。按员工姓名和项目名称查询对应的职责,然后观察执行计划信息,计算总的I/O和CPU开销。(员工表和员工参与项目表中的员工号都没有索引)②为员工参与项目表创建一个索引名为“员工参与项目_员工号”的非聚集索引,索引关键字为“员工号”,升序;按员工姓名和项目名称查询对应的职责,然后观察执行计划信息,计算总的I/O和CPU开销。(员工表中员工号没索引,员工参与项目表中的员工号有非聚集

oracle性能监控sql-监控当前会话、执行的sql及io等信息

Oracle sql --MingJie Tian sql plsql developer sga select * from v$sgainfo; io io select v$sess_io.*,(block_gets+consistent_gets) reads, ((block_gets+consistent_gets-physical_reads)/(block_gets+consistent_gets)) ratio from v$sess_io where (block_gets+consistent_gets)>=1000 order by (block_gets+consistent_gets) desc; sql select last_load_time, disk_reads, sorts, fetches, buffer_gets, optimizer_cost, cpu_time, sql_fulltext, sql_text from v$sql where to_char(last_load_time)> '2011-05-10/14:00:00' # sql order by last_load_time desc; io select a.sid, block_gets, consistent_gets, physical_reads, block_changes, consistent_changes, b.serial#, https://www.360docs.net/doc/fc15611662.html,ername, https://www.360docs.net/doc/fc15611662.html,mand, b.server, b.machine, b.terminal, b.program

第3章 自动数据库性能监视器

第3章自动数据库性能监视器 自动数据库性能监视器(ADDM)自动检查和报告数据库的性能问题。结果作为ADDM调查报告显示在Oracle企业管理器的数据库主页中,审查ADDM调查结果让你可以快速找出性能问题。 每个ADDM调查结果都提供了一串有关减少性能问题影响的建议,审查ADDM调查结果并执行建议是你每天正常维护数据库应该要做的事情,即使数据库处于未最佳的性能状态,你也应该继续使用ADDM监视数据库性能。 3.1 自动数据库诊断监视器概述 ADDM是构建在Oracle数据库内部的自我诊断软件,ADDM检查并分析自动工作量仓库(AWR)捕获到的数据,确定Oracle数据库可能存在的性能问题,然后它定位性能问题的根本原因,为纠正这些性能问题提供建议,并量化预计的性能收益,ADDM也可以识别不需要行动的区域。 3.1.1 ADDM分析 每次AWR快照(默认每小时一次)后就会执行ADDM分析,分析报告保存在数据库中,你可以通过Oracle企业管理器来查看这些报告,在使用本指南描述的另一个性能调整方法之前,先审查一下ADDM分析报告。 ADDM分析是从上到下执行的,首先确定症状,然后完善分析报告,指出导致性能问题的根本原因,ADDM使用DB time统计信息确定性能问题,DB time是数据库除了用户请求花去的递增式时间,包括等待时间和所有非空闲会话的CPU时间。 数据库性能调整的目标是减少给定工作量的DB time,通过减少DB time,数据库使用相同数量的资源可以支持更多用户请求,ADDM报告使用了大量DB time的系统资源,将其显示在问题区域,并按消耗的DB time数量进行倒序排序,关于DB time统计信息的更多信息请参考"时间模型统计"小节的内容。 3.1.2 ADDM建议 除了诊断性能问题外,ADDM还会给出建议解决方案,并且有时会建议多个可选的解决方案让你选择,ADDM建议包括: 硬件改造 添加CPU或修改I/O子系统配置 数据库配置 修改初始化参数配置 方案修改 对表或索引进行哈希分区,或使用自动段空间管理(ASSM) 修改应用程序 为序列使用缓存选项或使用绑定变量 使用其它顾问 在高负载SQL语句上运行SQL调整顾问或在热点对象上运行分段顾问。 ADDM应用在生产系统上受益良多,即使在开发和测试系统上,ADDM也可以提前提供潜在的性能问题警报。 性能调整是一个反复的过程,修复一个问题可能会导致瓶颈转移到系统的其它部分,即使使用ADDM分析报告,也要经过多次反复的调整才能使性能达到理想的水平。 3.1.3 Oracle真正应用集群中的ADDM 在Oracle真正引用集群(Oracle RAC)环境中,你可以使用ADDM分析整个数据库集群的性能,Oracle RAC中的ADDM会认为DB time是所有数据库实例数据库时间的总和,它只会报告集群级别的重要分析结果,例如,考虑局部各个集群节点的I/O水平就没什么意义,但所有节点的I/O水平的总和对于判定集群问题就显得很重要了。 3.2 配置自动数据库诊断监视器 3.2.1 设置初始化参数启用ADDM 默认情况下自动数据库诊断监视功能是被启用的,由初始化参数CONTROL_MANAGEMENT_PACK_ACCESS和STATISTICS_LEVEL控制。 CONTROL_MANAGEMENT_PACK_ACCESS初始化参数应该被设置为DIAGNOSTIC+TUNING(默认)或DIAGNOSTIC以确保启用自动数据库诊断监视器,如果将CONTROL_MANAGEMENT_PACK_ACCESS设置为NONE,就会禁用掉许多Oracle数据库特性,包括ADDM,强烈建议不要这么做。

Oracle审计(Audit)监视用户所执行的数据库操作实例

Oracle审计(Audit)监视用户所执行的数据库操作: A、审计相关的表安装: SQL> conn sys/???? as sysdba; SQL> select * from sys.aud$; SQL> select * from dba_audit_trail; 如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。 SQL> @$ORACLE_HOME/rdbms/admin/cataudit.sql 审计表安装在SYSTEM 表空间, 所以要确保SYSTEM 表空间又足够的空间存放审计信息。 B、激活审计: SQL> show parameter audit; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ audit_file_dest string D:\APP\ADMIN\ADMIN\ORCL\ADUMP audit_sys_operations boolean FALSE audit_trail string DB SQL> alter system set audit_sys_operations=TRUE scope=spfile; System altered SQL> alter system set audit_trail=db_extended scope=spfile; System altered ------------------------------------------*****----------------------------------------

ORACLE SQL语句的监控

oracle SQL语句的监控 有时候想看看软件后台数据库到底执行了什么语句。比如大的erp系统,我们在查询的时 候,后台执行了 什么语句或者过程都存储在v$sql表中。但是当sql语句很长的时候就出现了截断显现。 比如 select sql_text from v$sql; 其中有一条不完整的sql语句: SELECT LSWLDW.LSWLDW_WLDWBH as CustomersCode, LSWLDW.LSWLDW_DWMC as CustomersName,LSWLDW.LSWLDW_DWLB as CustomerSorts ,LSDWLB_LBMC AS CustomerSortName,LSWLDW.LSWLDW_DQBH as CustomerAreas ,LSDQZD_DQMC AS CustomerAreaName,LSWLDW.HelpTag ,LSWLDW.LSWLDW_JC as ShortName,nvl(LSWLDW.LSWLDW_SH,'')as SH ,LSWLDW.IsDetail as Detail,https://www.360docs.net/doc/fc15611662.html,yer,LSWLDW.OfTrade ,nvl(LSWLDW.LSWLDW_CJDW,'')as LSWLDW_CJDW,LSWLDW.OfTrade AS OfTradeCode ,nvl(OfTradeItem."NAME",'')AS OfTradeName ,nvl(OwnerType."NAME",'')AS OwnerType From LSWLDW LEFT OUTER JOIN LSDWLB ON LSWLDW.LSWLDW_DWLB=LSDWLB.LSDWLB_LBBH LEFT OUTER JOIN CodeItems OfTradeItem ON LSWLDW.OfTrade=OfTradeItem.Code AND OfTradeItem.SetID='A003' LEFT OUTER JOIN CodeItems OwnerType ON LSWLDW.OwnerType=OwnerType.Code AND OwnerType.SetID='A004' LEFT OUTER JOIN LSDQZD ON LSWLDW.LSWLDW_DQBH=LSDQZD.LSDQZD_DQBH where1=1 and LSWLDW_TYBZ='0'and LSWLDW.LSWLDW_WLDWBH in (select LSWLDW_WLDWBH from (select Rownum rn,LSWLDW_WLDWBH from (select LS select LS下面的语句就被截断了. 第一种解决方法:通过sql语句实现 我们查找该语句的sql_id或者hash_value

ORACLE数据库监控配置规范方案

ORACLE数据库配置规范和监控清单 2015年12月

目录 一、常规参数配置 (3) 1.1 数据库最大连接数 (3) 1.2 归档配置 (3) 1.3 最大文件数设置 (4) 1.4 关闭回收站 (4) 1.5 控制文件配置 (5) 1.6 白名单设置 (5) 1.7 闪回区设置 (6) 1.8 在线日志组 (6) 1.9 控制文件记录保留数 (7) 二、常用监控项 (8) 2.1 数据库在用连接数 (8) 2.2 监控数据库文件数 (8) 2.3 表空间使用率 (8) 2.4 闪回区使用率 (9) 2.5 数据库等待事件 (10) 2.6 告警日志监控 (10) 2.7 灾备DataGuard同步监控 (10) 2.8 AWR采样报告分析 (10)

一、常规参数配置 1.1数据库最大连接数 参数: processes 说明: 数据库用户最大连接数通过processes参数进行配置,默认值为 300,该值表示能够同时连接到数据库的最大会话数,当连接数达到最大值,后续新增连接均会被拒绝。 修改命令: alter system set processes=1000 scope=spfile; 生效方式: 需重启实例生效。 1.2归档配置 参数: archive log list 说明: 数据库开启归档,任何生产环境均应在归档方式下运行,从而达到可通过备份进行数据恢复要求,提高系统安全性 修改命令: 数据库启动至mount状态,执行 alter database archivelog; 生效方式:

重启数据库设置生效 1.3最大文件数设置 参数: db_files 说明: 该参数用于控制在扩容表空间时,数据文件能够达到的最大数量,默认值为 200 修改命令: alter system set db_files=800 scope=spfile; 生效方式: 重启数据库生效 1.4关闭回收站 参数: recyclebin 说明: 如果回收站未关闭,则如果表对象被删除,将进入回收站,并不会释放占用的存储 修改命令: alter system set recyclebin=’off’ scope=spfile; 生效方式:

zabbix通过pyora监控oracle数据库

Zabbix 通过pyora监控oracle 1.oracle客户端的安装 从oracle官方网站上下载客户端,devel和sqlplus程序或者从以下网址下载https://www.360docs.net/doc/fc15611662.html,/s/1mgx8Fsk 以root用户安装 rpm –ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm rpm –ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm rpm –ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm vim /root/.bashrc添加 export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib export TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin export PATH=$PATH:$ORACLE_HOME/bin 设置好环境变量之后执行 source /root/.bashrc 创建文件/etc/ld.so.conf.d/oracle.conf添加 /usr/lib/oracle/11.2/client64/lib 执行命令ldconfig 创建连接文件 在ORACLE_HOME目录下创建以下目录network/admin,并创建文件tnsnames.ora,内容如下: vim /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) 测试 执行 [root@Monitor ~]# sqlplus system/admin@orcl SQL*Plus: Release 11.2.0.4.0 Production on Thu May 8 14:25:07 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options SQL>

使用SpotLight监控数据库性能

使用SpotLight监控数据库性能 8.1.4 使用SpotLight监控数据库性能(1) SpotLight On Oracle是由Quest公司出品的一款针对Oracle进行监控的软件。SpotLight监控Oracle的基本原理与LoadRunner监控类似,通过获取Oracle的数据字典和动态性能视图,然后把性能数据按直观的方式展现出来,如图8.11所示。 (点击查看大图)图8.11 SpotLight On Oracle监控数据库下面简要介绍使用SpotLight对Oracle进行监控的过程。 1.建立Oracle连接 第一步要建立Connection,如图8.12所示,这样才能够使用SpotLight连接到要监测的数据库。

新建连接,然后输入Oracle连接用户账号,确定之后即可进入监控主页面。 2.查看系统主界面进行Oracle监控 系统主界面反映了系统的整体运行情况,如果系统哪方面出现问题,会报相应的警告,最严重为红色警告。然后根据警告可转到相应的子窗口,查看相应的情况。下面介绍各子窗口。 1)Sessions面板 Response:系统的响应时间。 Total Users:总的用户Session数量。 Active Users:当前正在执行的用户Session数量。 2)Host面板 Host面板主要显示CPU利用率和内存使用情况。 3)Server Processes面板 Server Processes面板主要显示服务器进程的信息。主要关注以下几点。 PGA Target/Used:PGA目标总数及当前使用数。 Dedicated:专用服务器进程的个数。 Shared:共享服务器进程的个数。 Job Queue:作业进程的个数。 4)SGA面板 SGA面板主要显示SGA中各组件的内存使用情况,主要关注以下几点。

oracle监控方案

电力营销系统oracle监控方案 oracle监控也有多种方案,例如通过OEM监控管理本机数据库、GRID CONTROL监控管理同一网络里的数据库、通过SNMP协议监控实时性能信息(HP OPENVIEW)。但都有其缺点,例如OEM界面只能管理本机、GC和SNMP需要在被管机上安装AGENT代理,它们的操作界面也不直观,配置不够灵活。而HP OPENVIEW是综合监控软件,其费用过高,也不适合。 综合考虑,决定采用QUEST公司的SPOTLIGHT ON ORACLE软件来监控ORACLE 数据库,其优点是实时准确、界面直观、操作配置简单灵活、性能消耗可以限定在一个小范围内、不需要在被监控设备部署AGENT代理。且是破解版,没有监控数量上的限制。 其原理是通过设定的频率查询ORACLE内部开放的性能视图,主要是CPU上的性能消耗,需要创建新的DBA角色的用户用于监控,所以可以在限定此用户CPU消耗的限定值内(也可以降低查询频率)使用SPOTLIGHT达到实时监控的目的。其CPU消耗经QUEST 公司严格测试是比较小的,所以不用担心其CPU消耗给生产带来的影响。 1、监控总图 很直观的展示系统整体运行的实时情况,如SESSION、HOST、服务进程、SGA、后台进程、DISK等,哪部分出现问题将会红色闪烁展示,如下图示:

2、SESSION监控 2.1、TOP SE SSION信息 从图中可以看到,SID为1042,用户名为AMBER的SESSION其当前日志读为每秒386.64个块数,排名最前,说明这个SESSION当前运行繁忙,结合下面的信息可以查看到具体正执行的SQL。 2.2、SESSION等待事件 从SESSION WAITS中可以查看到当前SESSION正在等待的事件及其详细信息。

Oracle数据库监控工具lab128

知识点列表 编号名称描述级别 1 数据库简介了解什么是关系型数据库* 2 OracleServer的启动了解OracleServer启动时主要的服务* 3 Oracle数据库服务器重点掌握系统全局区SGA和程序全局区PGA *** 4 Oracle实例进程结构理解Oracle实例进程结构,注意后台进程** 5 Oracle网络配置了解Oracle网络配置** 6 Oracle查询工具了解Oracle的3个查询工具* 7 Oracle默认用户了解Oracle默认账户的设置及各自的权限* 8 客户端连接工具重点掌握能够使用Oracle客户端工具连接Oracle *** 9 锁了解锁的概念,理解行级锁和表级锁,重点掌握死锁 的概念 ** 10 Lab128的使用重点掌握Lab28监控Oracle服务器的方法以及查找 分析问题 *** 注:"*"理解级别"**"掌握级别"***"应用级别 目录 1. Oracle服务器 (2) 1.1.数据库简介 (2) 1.2. Oracle Server的启动 (2) 1.3. Oracle 数据库服务器 (2) 1.4. Oracle实例进程结构 (5) 2. Oracle的使用 (6) 2.1. Oracle网络配置 (6) 2.2. Oracle查询工具 (7) 2.3. Oracle默认用户 (7) 2.4.客户端连接工具 (8) 3.锁 (9)

4. Lab128 (11) 1.Oracle服务器 1.1.数据库简介 DBMS:实现数据库管理的软件。 RDBMS(关系型数据库):是建立在关系模型基础上的数据库,数据以行和列的形式存储,以便于用户理解,这一系列的行和列被称为表,一组表组成数据库。 在关系数据库中:各数据项之间用关系来组织,关系(relationship)是表之间的一种连接,通过关系,我们可以更灵活地表示和操纵数据. ORDBMS(对象型关系数据库):在原来的RDBMS的基础上加入了对象的概念,如Oracles 10g。 1.2.Oracle Server的启动 启动Server,几个主要的服务: OracleServicexxx(SID):Oracle服务器服务进程开启(关闭)。(必开) OracleOraDb10g_home1TNSListener:Oracle网络服务监听程序服务,当需通过网络连接Oracle服务器或访问Oracle Enterprise Manager 10g时需启动 OracleOraDb10g_home1iSQL*Plus:运行iSQL*Plus工具时需开启的服务 OracleDBConsoleorcl1:访问Oracle Enterprise Manager 时需开启的服务 1.3.Oracle 数据库服务器 Oracle数据库服务器有两个部分:数据库和实例(instance)。 Oracle数据库用于存储和检索信息,是数据的集合。数据库包括逻辑结构和物理结构。逻辑结构代表了在Oracle数据库中能看到的组成部分(如表、索引等),而物理结构代表了Oracle内部使用的存储方法(如数据文件、控制文件、日志文件等)。 Oracle实例是指数据库服务器的内存及相关处理程序. 数据库文件的操作都是通过这个实例来完成的,因此它又被称为Oracle数据库引擎。Orade实例由系统全局区(SGA)和后台处理进程组成。 Oracle数据库服务器,如下图所示:

DB2数据库-性能测试监控

DB2数据库-性能测试监控 一.DB2数据库介绍 1. DB2架构介绍 概要介绍 DB2是IBM公司研发的关系数据库产品,目前广泛应用于金融、通信、交通等行业,在IBM随需应变的战略体系中扮演着重要角色。因为川农信属于金融行业,因此也在使用DB2,其版本为v9.7,所以在这里介绍一些9.7版本的新特性。 ●支持索引压缩、临时表数据压缩和xml压缩,更加降低了存储空间成本。 ●支持内联大对象。 ●在线表迁移功能。 ●支持实时表字段更改。 ●在性能监控方面DB29.7有了极大增强,新的监控模型不仅可以快速找出问题瓶颈,而且对系统的影响非常小。特别是对锁的监控,通过新的Locking Event Monitor可同时监控死锁、锁等待和锁超时。 ●移植性增强。 ●HADR备机可读。 三种常用架构简介 当前的应用系统主要分为两类:联机事务处理(OLTP)和联机分析处理(OLAP)。 OLTP主要执行日常的事务处理,比如银行存取款、商场购物等,它的主要特点是对响应时间要求高,数据量一般较小,并发多,面向应用。OLAP主要指数据仓库、决策分析类系统,主要特点是数据量大,对实时性要求不高,面向主题。 针对这两种典型的系统,DB2提供了很好的支持。对于OLTP系统和数据量较小的OLAP系统,可以采用单分区架构。 但是有一些OLAP系统,比如国内一些通信公司和电力公司的经营分析系统,包含的数据超过几十TB,一台机器的处理性能根本无法满足要求。这时,可考虑DB2的多

分区架构,即Shared Nothing架构。这种架构的优点就是能够充分利用系统资源,将一个大型的查询分解成若干个小查询并行运行在不同的系统中。由于每一个分区只能够访问自己分区的数据,当查询数据需要关联时。需要在分区中交换必要的数据,分区之间使用一种叫做FCM(Fast Communication Manager)的通信机制。这种架构对系统设计人员要求较高,一定要充分理解优化器与系统访问数据的规则,并且设计很好的分区键,才能够尽可能避免分区间大量的数据交换。 与Share-Nothing相对的另外一种常见的架构是Share-Disk。Share-Disk架构允许所有机器都可以访问全部的数据,好处是管理起来相对方便,而且任意一台机器宕机后,只要存储部分不出问题,其他机器上的系统可以照样访问数据。Share-Disk的设计目标主要是提供高可用性,一般用于OLTP系统。 2. 主要模块介绍 上图描述了DB2的进程模型,长方形代表处理进程,椭圆形代表处理线程,DB2的主进程是db2sysc,在这个处理进程下有许多线程,最主要的线程也是叫db2sysc,这个主要的线程派生了其他子线程。当一个远程的应用程序比如采用sql connect语句链接服务器时,通讯协议的远程监听器将接收这个请求,并联系db2agent,agent是一个代表DB2实现一些小操作的处理程序,当发出请求的应用程序是本地的,也就是和DB2服务器在同一服务器上,如果不在同一个服务器上,那么采用db2tcpcm处理本地请求,如果在一台服务器上采

归档—监控ORACLE数据库告警日志

ORACLE的告警日志里面包含许多有用的信息,尤其是一些ORACLE的ORA错误信息,所以有必要及时归档、监控数据库告警日志的ORA错误,及时提醒数据库管理员DBA处理这些错误信息,那么我们首先来看看告警日志的内容片断: Thread 1 advanced to log sequence 37749 (LGWR switch) Current log# 6 seq# 37749 mem# 0: /u01/oradata/SCM2/redo06.log Thu Jun 27 15:02:30 2013 Thread 1 advanced to log sequence 37750 (LGWR switch) Current log# 2 seq# 37750 mem# 0: /u01/oradata/SCM2/redo02.log Thu Jun 27 15:13:43 2013 Thread 1 advanced to log sequence 37751 (LGWR switch) Current log# 3 seq# 37751 mem# 0: /u01/oradata/SCM2/redo03.log Thu Jun 27 15:25:30 2013 Thread 1 advanced to log sequence 37752 (LGWR switch) Current log# 4 seq# 37752 mem# 0: /u01/oradata/SCM2/redo04.log Thu Jun 27 15:32:20 2013 ORA-00060: Deadlock detected. More info in file /u01/app/oracle/admin/SCM2/bdump/scm2_s001_14052.trc. Thu Jun 27 15:35:05 2013 Thread 1 advanced to log sequence 37753 (LGWR switch) Current log# 5 seq# 37753 mem# 0: /u01/oradata/SCM2/redo05.log Thu Jun 27 15:43:11 2013 Thread 1 advanced to log sequence 37754 (LGWR switch) Current log# 1 seq# 37754 mem# 0: /u01/oradata/SCM2/redo01.log Thu Jun 27 15:49:58 2013 Thread 1 advanced to log sequence 37755 (LGWR switch) Current log# 6 seq# 37755 mem# 0: /u01/oradata/SCM2/redo06.log Thu Jun 27 16:01:25 2013 Thread 1 advanced to log sequence 37756 (LGWR switch) Current log# 2 seq# 37756 mem# 0: /u01/oradata/SCM2/redo02.log Thu Jun 27 16:12:14 2013 Thread 1 advanced to log sequence 37757 (LGWR switch) Current log# 3 seq# 37757 mem# 0: /u01/oradata/SCM2/redo03.log Thu Jun 27 16:24:10 2013 Thread 1 advanced to log sequence 37758 (LGWR switch) 归档告警日志文件 告警日志文件如果不加管理的话,那么文件会持续增长,有时候文件会变得非常大,不利于读写。一般建议将告警日志按天归档,归档文件保留三个月(视情况而定),下面来看看将告警日志文件归档的两个Shell脚本: alert_log_archive.sh version 1

数据库性能监控分析系统的设计与实现

—105— 数据库性能监控分析系统的设计与实现 王 娜,宿红毅,白 琳,王 鑫,郝子昭 (北京理工大学计算机科学与工程系,北京 100081) 摘 要:在讨论Oracle 体系结构和性能优化的基础上介绍了一个基于J2EE 的数据库性能监控和分析系统(DMI)的总体设计思想及其部分实现。 关键词:性能优化;Oracle ;实时监控;JMS ;RMI Design and Realization of Database Performance Monitoring and Analyzing System WANG Na, SU Hongyi, BAI Lin, WANG Xin, HAO Zizhao (Dept. of Computer Science and Engineering, Beijing Institute of Technology, Beijing 100081) 【Abstract 】This paper presents the design and part of implementation of a database performance monitoring and analyzing system (DMI) based on J2EE with discussing the architecture and performance optimizing of Oracle. 【Key words 】Performance optimizing; Oracle; Real-time monitoring; JMS; RMI 计 算 机 工 程Computer Engineering 第31卷 第24期 Vol.31 № 24 2005年12月 December 2005 ·软件技术与数据库· 文章编号:1000—3428(2005)24—0105—03 文献标识码:A 中图分类号:TP311.13 随着数据库应用的不断深入和扩大,数据库中的数据量迅速增长,数据操作也越来越复杂,数据库工作效率逐渐下降。因此,实施对数据库的管理维护、性能调优越来越受到广大数据库管理员(DBA)的关注和重视。虽然目前各种数据库产品本身也提供了大量功能强大的性能监控和调试工具,如Oracle 的OEM 、Performance Manager 、Capacity Planer 等,来帮助数据库管理人员对数据库性能进行调整、优化,但遗憾的是,精通掌握这些工具并能通过它们来有效地分析数据库性能状态,进而合理配置数据库以调整其性能也十分困难。因此开发一个简单高效的数据库性能监控管理工具来辅助DBA 对数据库进行性能分析调优成为数据库应用不断扩展的需要。 针对这种情况,本文结合业界先进的数据库管理经验,开发了Database Management Insight(DMI)——一个简单、实用、方便、安全的数据库监控管理平台。它可以有效地辅助数据库管理人员对数据库进行性能优化,确保数据库正常、平滑、高效地运转。DMI 可以监控Oracle 、Sybase 、DB2等数据库,本文以Oracle 为例来对该系统进行阐述。 1 总体设计 1.1 Oracle 的结构和性能优化 数据库优化的目的是更改系统的一个或多个组件,使其满足一个或多个目标的过程。对Oracle 数据库来说,优化是进行合理的资源配置,达到组件之间的均衡以改善其性能,即增加吞吐量、提高响应时间。数据库性能优化要考虑到系统的各个组成部分,由图1可以看出,Oracle 应用系统主要包含以下几个部分[1]: (1)用户进程和服务器进程 用户进程是SQL 语句的提出者,服务器进程则负责执行由用户进程传递过来的SQL 语句,与SGA 区交互。用户进程和服务器进程是数据库性能调整的一个重要方面,尤其是当用户的数量随着时间的推移而 不断增大时,建立与数据库的重复性临时连接的Web 应用系统会导致性能下降[2]。 (2)Oracle 实例 一个Oracle 实例是存储结构和后台进程的组合体。其中,SGA 是用来存放所有数据库进程共享的数据和控制信息的存储区域,当数据库一启动,SGA 就立即占有服务器的内存空间。SGA 中的库高速缓存、字典高速缓存、数据高速缓存、日志缓冲区以及大缓冲池和Java 池等组件的大小对系统性能有极大的影响,它们直接影响磁盘I/O 的频率,从而影响数据库效率[3]。实施性能优化时应注意DB_CACHE_SIZE 、SHARED_POOL_SIZE 、LOG_BUFFER 、LARGE_POOL_SIZE 和JAVA_POOL_SIZE 这几个参数的值,如果配置不合理会造成系统资源的极大浪费。 图 1 Oracle 体系结构 基金项目:武器装备预研项目 作者简介:王 娜(1981—),女,硕士生,主研方向:计算机网络与分布式处理;宿红毅,副教授;白 琳、王 鑫、郝子昭,硕士生 收稿日期:2004-10-28 E-mail :sdbzwn@https://www.360docs.net/doc/fc15611662.html,

数据库性能问题处理及监控

`数据库性能问题处理及监控 思想重视 掌握方法 主动学习 善于协调 一、培训背景 系统性能是功能的延伸和深化。从某种程度上说,性能问题比单一的功能问题对客户造成的影响更大、更深、更恶劣,没有人愿意使用功能完备却性能糟糕的系统。改善和提升客户的系统操作体验,提高产品及客户服务满意度,系统的优异性能必不可少。从技术层面来说,这需要通过良好的数据库结构设计及应用程序架构设计来保证。 然而实际上,无论前期做多么的周密设计,都无法保证系统在客户实际使用过程中持续优良的性能。随着业务的提升,功能和数据也随之膨胀,性能稳定的挑战越来越大。此时,就需要现场系统维护人员迅速跟进并做有效的问题处理。 二、培训目的 明确系统维护人员性能问题处理的职责分工 明晰数据库性能问题的处理流程 性能调整需要团队协作,涉及DBA、操作系统管理人员、网络管理人员、应用程序设计及开发人员、应用系统现场维护人员等岗位 性能调整方法:调整业务功能、调整数据设计、调整过程设计、调整SQL语句、调整内存分配、调整IO、调整资源争用、调整OS 现场人员性能调整工作的角色分配:调整业务功能、调整SQL语句 明确、清晰的问题处理流程,可以规范问题处理步骤,缩短问题处理时间最小化性能问题的影响,有利于缓解后期解决问题的压力,进而促进问题的最终解决!

三、数据库性能故障处理流程 所谓数据库故障,简单讲就是数据库响应缓慢甚至不能响应客户端发起的请求。例如,客户端提交一个SQL请求后,会话处于等待数据库实例返回结果的状态。很多现场情况下,用户有7*24的运行需求。在系统突然遭遇性能问题时,我们并没有时间去收集数据,对比统计数据,进行索引分析和调整操作。 此时,需要几分钟或者几十分钟内解决这样的突发性能问题,我们工作重点应该是迅速确定发生了什么问题,并尽可能快速的恢复正常服务,严谨的优化方式并不现实。因此,应该先处理问题,再研究问题。 如何处理问题?没有简单答案!性能调整的普遍规则并不存在,但制定一个规范的工作流程和实施步骤是切实可行的。性能问题千差万别,需要有一个符合实际情况的性能问题处理的流程图,作为性能问题搜寻的方法指导。否则,由于性能问题分布在系统的各个层面,性能调整就会变成大海捞针。

数据库性能监测指标

数据库性能监测指标(如Oracle、SqlServer)、LoadRunner 性能测试指标 1.%Disk Time(PhysicalDisk_Total) 2.%Processor Time(Processor_Total) 3.File Data Operations/sec(System) 4.Interrupts/sec(Processor_Total) 5.Page Faults/sec(Memory) 6.Pages/sec(Memory) 7.PoolNonpaged Bytes(Memory) 8.Private Bytes(Process_Total) 9.Processor Queue Length(System) 10.Threads(Objects) dbm: rem_cons_in 到正在被监视的数据库管理器实例的当前连接数,从远程客户端启动 agents_from_pool 代理程序池中已分配的代理程序数 agents_stolen 从应用程序中盗用代理程序的次数。重新分配与应用程序相关联的空闲代理程序,以便对其他应用程序执行操作,称作“盗用” sort_heap_allocated 拍快照时,以所选择的级别为所有排序分配的排序堆空间的总页数post_threshold_sorts 达到排序堆阈值后,已请求的堆的排序数 db: appls_cur_cons 当前已连接到数据库的应用程序数 appls_in_db2 当前已连接到数据库并且数据库管理器当前正在处理其请求的应用程序数sort_heap_allocated 拍快照时,以所选择的级别为所有排序分配的排序堆空间的总页数total_sorts 已经执行的排序总数 total_sort_time 所有已执行排序的总已用时间(以毫秒为单位) sort_overflows 用完排序堆并且可能需要临时磁盘存储空间的排序总数 hash_join_small_overflows 哈希联接数据大小超过可用排序堆空间,但超出比率小于10% 的次数 pool_data_l_reads 已经通过缓冲池的数据页逻辑读取请求数 pool_data_p_reads 要求I/O 将数据页放入缓冲池的读取请求数 pool_index_l_reads 已经通过缓冲池的索引页逻辑读取请求数 pool_index_p_reads 需要将索引页放入缓冲池的物理读取请求数 files_closed 已关闭的数据库文件的总数 pkg_cache_lookups 应用程序在程序包缓存中查找一个节或程序包的次数。在数据库级,它表示自从启动数据库或重置监视器数据以来的引用总数 pkg_cache_inserts 请求的一个节不可用,因而必须加载到程序包缓存中的总次数。此计数包括由系统执行的任何隐式准备

Spotlight on Oracle性能监控器

Spotlight On Oracle性能监控器 一、各种资源总体性能指标主界面(Home) 主界面共分为六大面板,各面板指标如下: 1.1 Sessions(会话) Session是Oracle数据库服务器对连接数据库的用户进行记录的一种手段,用户使用客户软件(如SQL Plus、企业管理器等)连接数据库,就形成了一个会话。 ★Active Sessions:该值是活动用户占连接到数据库用户总数的百分比,注:正常值不小于70%。 1.2 Host(主机) Host主机主要指被监控的服务器。 ★Total CPU Usage:CPU总体利用率 ★Run Queue:等待CPU运行的队列数,注:该值超过CPU的块数时,表明CPU存在瓶颈。

1.3 Server Processes(PGA:程序全局区) PGA是数据库服务器内存中为单个用户进程分配的专用的内存区域,是用户进程私有的,不能共享。 ★Dedicated:专用服务进程(该值执行时代表一个客户进程)。该值主要表示登录和注销数据库服务器的用户数量。 ★Shared:多线程服务器(MTS:multi-threaded servers),该值执行时代表多个客户进程。 可以配置该值的两个参数来改变负载: MTS_SERVERS/SHARED_SERVERS MTS_MAX_SERVERS/MAX_SHARED_SERVERS ★Dispatchers:协调客户机作业的共享服务器分配的MTS发报。可以配置该值的两个参数来改变负载: MTS_DISPATCHERS/DISPATCHERS MTS_MAX_DISPATCHERS/MAX_DISPATCHERS ★Parallel Query:支持查询和(Oracle8版本)DML语句并发执行的并行查询服务器。可以配置该值的两个参数来改变负载: PARALLEL_MIN_SERVERS PARALLEL_MAX_SERVERS ★Job Queue:通过DBMS_JOB包运行PL/SQL命令提交oracle工作队列的工作队列服务器进程。可以配置该值的参数: JOB_QUEUE_PROCESSES 1.4 SGA(系统全局区) SGA是数据库服务器为用户进程和服务器进程之间进行通信所使用的内存,所有用户进程共享SGA的内容。 ★Buffer Cache Hit Ratio:高速缓冲区点击比率,该值反映了高速缓存区(Buffer Cache)的性能(高速缓冲存储器用高速缓存区频繁访问以后需要的数据块)。注:该值不能小于90%。★Shared Pool Used:存储SQL语句,PL/SQL程序,对象定义以及MTS的会话存储的共享池大小。

相关文档
最新文档