目录

·90%以上的性能问题都是由Application引起的

·10%以下的性能问题是由于DB的配置,资源限制,操作系统引起来的

·标识与解决性能问题的工作流程

·潜在的原因

·Top Process

·找出事务中长时间操作的SQL

·几个重要的视图

·从statspack report中找到更详细的信息,10g中使用AWR Report及ADDM Report

·分析statspack report

·SQL Trace on top SQL

·DB Hung住的问题

·内部错误

·Lock问题

·显示Lock相关的几个脚本

·死锁

·OS相关的命令

·90%以上的性能问题都是由Application引起的

·10%以下的性能问题是由于DB的配置,资源限制,操作系统引起来的

·标识与解决性能问题的工作流程

·如果是故障,最先检查的是alter.log文件

标识问题流程解决问题流程

·潜在的原因

1)客户端程序瓶颈

2)PL/SQL 问题

3)未知原因的数据库配置

4)网络问题

5)内存问题

6)IO问题

7)CPU问题

·Top Processes

用top命令查看前消耗资源的进程,Unix,Linux中用top命令查看,NT平台中用“任务管理器”。从OS一级找出top n 进程的PID,再从数据库一级找出对应的session,进一步再找出对应的SQL语句,使用以下脚本可以根据spid找到对应的SQL语句:

#!/bin/ksh

# creator:Nico

#function:getsqlstatementbyspid

# parameter:spid

# useage:get_by_spid.sh

spid

sqlplus-S/nolog<

connect/assysdba;

col SERIAL# format999999

colsidformat99999

col username format a10

colprogramformat a32

col sql_text format a15

setlines1000

setpages1000

setverifyoff

col sql_hash_value new_value hash_valuehead hash_value

selectsid,serial#,username,program,sql_hash_value,

to_char(logon_time,'yyyy/mm/dd

hh24:mi:ss')aslogin_time

fromv\$session

wherepaddrin(selectaddrfromv\$processwherespid=$1);

selectsql_text

fromv\$sqltext_with_newlines

wherehash_value=&hash_value

orderbypiece;

exit;

EOF

·找出事务中长时间操作的SQL

#!/bin/ksh

# creator:Nico

#function:getlongoperationssqlstatement

# parameter:null

# useage:get_longops.sh

sqlplus-S/nolog<

connect/assysdba;

col username format a12

colsidformat99999

col opname format a15

col progress format a15

col sql_text format a81

col time_remaining format a10

setlines1000

setpages1000

setverifyoff

selectusername,sid,opname,

round(sofar *100/totalwork,0)||'%'asprogress,time_remaining,sql_text

fromv\$session_longops,v\$sqlarea

wheretime_remaining<>0

andsql_address=address

andsql_hash_value=hash_value;

exit;

EOF

·几个重要的视图

1)v$porcess

2)v$session

3)v$sqlarea , v$sql , v$sqltext_with_newlines

4)v$session_longops

·从statspack report中找到更详细的信息,10g中使用AWR Report及ADDM Report

一般在peak time做statspack report,时间一般在20分钟左右

·分析statspack report

Report 中的几个重要部分:

·Load Profile

·Instance Efficiency Percentages

·Top 5 Wait Events

·SQL order by Gets

for DB

·SQL order by

Reads for DB

·Tablespace IO stats for DB

·File IO Stats for DB

·SQL Trace on top SQL

1)set timing on

2)set autotrace on

·DB Hung住的问题

3)这是一个非常严重的问题

4)大多数情况下需要与OS Team及Oracle Support一起去解决

·内部错误

5)ORA-00600 到 ORA-07445

6)大多数与Oracle的Bug相关

7)在Metalink上查看别人的解决方法

8)将相关trace文件发给Oracle Support寻求支持

·Lock问题

9)Top Event Enqueue

10)找出TM,TX类型的锁,并找出holder

11)与开发部门的同事一起工作从应用逻辑减少或释放被lock住的资源

12)dba_waiters视图,显示所有等待lock的session

DBA_WAITERS

DBA_WAITERS shows all the sessions that

are waiting for a lock.

Column

Datatype

Description

WAITING_SESSION

NUMBER

The waiting session

HOLDING_SESSION

NUMBER

The holding session

LOCK_TYPE

VARCHAR2(26)

The lock type

MODE_HELD

VARCHAR2(40)

The mode held

MODE_REQUESTED

VARCHAR2(40)

The mode requested

LOCK_ID1

VARCHAR2(40)

Lock ID 1

LOCK_ID2

VARCHAR2(40)

Lock ID 2

V$LOCKED_OBJECT

This

view lists all locks acquired by every transaction on the system. It shows

which sessions are holding DML locks (that is, TM-type enqueues) on what

objects and in what mode

Column

Datatype

Description

XIDUSN

NUMBER

Undo segment number

XIDSLOT

NUMBER

Slot number

XIDSQN

NUMBER

Sequence number

OBJECT_ID

NUMBER

Object ID being locked

SESSION_ID

NUMBER

Session ID

ORACLE_USERNAME

VARCHAR2(30)

Oracle user name

OS_USER_NAME

VARCHAR2(30)

OS user name

PROCESS

VARCHAR2(12)

OS process ID

LOCKED_MODE

NUMBER

Lock mode

·显示Lock相关的几个脚本

#!/bin/ksh

#creator:Nico

#createdate:2008-07-05

#function:getlockedobject&session

# parameter:null

# useage:get_locked_object_session.sh

sqlplus-S/nolog<

connect/assysdba;

col user_name format a15

col owner format a15

col object_name format a15

col object_type format a10

setlinesize280

setpages1000

setverifyoff

prompt

promptV\$LOCKED_OBJECTlistsalllocks acquiredbyeverytransactiononthesystem.

promptIt

shows which sessions are holdingDMLlocks(thatis,TM-typeenqueues)onwhat objectsandinwhatmode.

col ORACLE_USERNAME heading'Oracle|User

Name'format a12

col OS_USER_NAME format a13

select*fromv\$locked_object;

prompt

prompt***********lockedobjectsandholdsession***************************

select/*+

rule */lpad(' ',decode(l.xidusn,0,3,0))||l.oracle_username

user_name,

o.owner,o.object_name,o.object_type,s.sid,s.serial#

fromv\$locked_object l,dba_objects

o,v\$session s

wherel.object_id=o.object_id

andl.session_id=s.sid

orderbyo.object_id,xidusndesc;

prompt

prompt**********locksessioninformation********************************

selectsid,type,id1,id2,lmode,request,ctime,block

fromv\$lock

wheretypein('TM','TX');

exit;

EOF

·死锁

1)死锁是一个逻辑问题

2)两个或多个session要求锁住对方持有的对象

3)从trace文件中找出相关的SQL语句

4)与开发人员一起改变应用的逻辑

·OS相关的命令

5)sar

6)iostat

7)top/topas

8)vmstat

9)free

10)uptime

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐