ORACLE學習筆記--效能最佳化三

lishiran發表於2007-04-08
18.怎麼清理臨時段[@more@]

可以使用如下辦法

<1> 使用如下語句檢視一下認誰在用臨時段

SELECT username,sid,serial#,sql_address,machine,program,

tablespace,segtype, contents

FROM v$session se,v$sort_usage su

WHERE se.saddr=su.session_addr

<2> 那些正在使用臨時段的程式

SQL>Alter system kill session “sid,serial#“;

<3>、把TEMP表空間回縮一下

SQL>Alter tablespace TEMP coalesce;

還可以使用診斷事件

<1> 確定TEMP表空間的ts#

SQL> select ts#, name FROM v$tablespace;

TS# NAME

-----------------------

0 SYSYEM

1 RBS

2 USERS

3* TEMP

...

<2> 執行清理操作

alter session set events “immediate trace name DROP_SEGMENTS level TS#+1“

說明:

temp表空間的TS# 3*, So TS#+ 1= 4,如果想清除所有表空間的臨時段,則,TS# = 2147483647

19.怎麼樣dump資料庫內部結構,如上面顯示的控制檔案的結構

常見的有

1、分析資料檔案塊,轉儲資料檔案n的塊m

alter system dump datafile n block m

2、分析日誌檔案

alter system dump logfile logfilename;

3、分析控制檔案的內容

alter session set events “immediate trace name CONTROLF level 10“

4、分析所有資料檔案頭

alter session set events “immediate trace name FILE_HDRS level 10“

5、分析日誌檔案頭

alter session set events “immediate trace name REDOHDR level 10“

6、分析系統狀態,最好每10分鐘一次,做三次對比

alter session set events “immediate trace name SYSTEMSTATE level 10“

7、分析程式狀態

alter session set events “immediate trace name PROCESSSTATE level 10“

8、分析Library Cache的詳細情況

alter session set events “immediate trace name library_cache level 10“

20.如何獲得所有的事件程式碼

事件程式碼範圍一般從10000 to 10999,以下列出了這個範圍的事件程式碼與資訊

SET SERVEROUTPUT ON

DECLARE

err_msg VARCHAR2(120);

BEGIN

dbms_output.enable (1000000);

FOR err_num IN 10000..10999

LOOP

err_msg := SQLERRM (-err_num);

IF err_msg NOT LIKE “%Message “||err_num||“ not found%“ THEN

dbms_output.put_line (err_msg);

END IF;

END LOOP;

END;

/

Unix系統上,事件資訊放在一個文字檔案裡

$ORACLE_HOME/rdbms/mesg/oraus.msg

可以用如下指令碼檢視事件資訊

event=10000

while [ $event -ne 10999 ]

do

event=`expr $event + 1`

oerr ora $event

done

對於已經確保的/正在跟蹤的事件,可以用如下指令碼獲得

SET SERVEROUTPUT ON

DECLARE

l_level NUMBER;

BEGIN

FOR l_event IN 10000..10999

LOOP

dbms_system.read_ev (l_event,l_level);

IF l_level > 0 THEN

dbms_output.put_line (“Event “||TO_CHAR (l_event)||

is set at level “||TO_CHAR (l_level));

END IF;

END LOOP;

END;

/

21.什麼是STATSPACK,我怎麼使用它?

StatspackOracle 8i以上提供的一個非常好的效能監控與診斷工具,基本上全部包含了BSTAT/ESTAT的功能,更多的資訊,可以參考附帶文件$ORACLE_HOME/rdbms/admin/spdoc.txt

安裝Statspack:

cd $ORACLE_HOME/rdbms/admin

sqlplus "/ as sysdba" @spdrop.sql -- 解除安裝,第一次可以不需要

sqlplus "/ as sysdba" @spcreate.sql -- 需要根據提示輸入表空間名

使用Statspack:

sqlplus perfstat/perfstat

exec statspack.snap; -- 進行資訊收集統計,每次執行都將產生一個快照號

-- 獲得快照號,必須要有兩個以上的快照,才能生成報表

select SNAP_ID, SNAP_TIME from STATS$SNAPSHOT;

@spreport.sql -- 輸入需要檢視的開始快照號與結束快照號

其他相關指令碼s:

spauto.sql - 利用dbms_job提交一個作業,自動的進行STATPACK的資訊收集統計

sppurge.sql - 清除一段範圍內的統計資訊,需要提供開始快照與結束快照號

sptrunc.sql - 清除(truncate)所有統計資訊

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9099175/viewspace-909324/,如需轉載,請註明出處,否則將追究法律責任。

相關文章