ORACLE 服務器的配置及優化
1. 在ORACLE中實現分布式快速存取和充實內存是很重要的。
要不惜任何代價避免頁面調度和交換﹐每次都必須把系統全局區(SGA)放到內存。
將SGA放到內存中﹐在INIT.ORA中設置參數 PRE_PAGE_SGA
PRE_PAGE_SGA=YES
2. 回卷段的竟爭會降低系統的性能。
SELECT GETS,WAITS FROM V$ROLLSTAT;
GETS代表回卷段被訪問的次數
WAITS代表進程等待回卷段中哪個進程的次數
如果GETS與WAITS的比大于2%表示存在竟爭問題
解決辦法是創建更多的回卷段。
有兩種類型的鎖存竟爭會產生嚴重的后果﹕立即鎖存(IMMEDIATE)和等待(WAIT)鎖存。
等待鎖存的計算公式﹕
WAIT CONTENTION=(MISSES/(GETS+MISSES))*100
立即鎖存的計算公式﹕
IMMEDIATE CONNECTION=(IMMEDIATE_MISSES/(IMMEDIATE_GETS+IMMEDIATE_MISSES))*100
如果任何一個值>0則就存在對鎖存的竟爭
如果發生恢復分配鎖存的竟爭﹐可以減小INIT.ORA中的LOG_SMALL_ENTRY_MAX_SIZE的參數值。如果發生恢復復制竟爭﹐可以增大INIT.ORA中的LOG_SIMULATANOUS_COPIES的參數值。
任何回卷段的OPTIMAL參數的設置不能太小﹐如果OPTIMAL<MINEXTENTS會降低系統的操作性能。
SELECT CLASS,COUNT FROM V$WAITSTAT WHERE UPPER(CLASS) IN (‘SYSTEM UNDO HEADER)’,’SYSTEM UNDO BLOCK’,
‘UNDO HEADER’,’UNDO BLOCK’);
SELECT SUM(VALUE) FROM V$SYSSTAT WHERE UPPER(NAME)
IN (‘DB BLOCK GETS’,’CONSISTENT GETS’);
第一條查詢中的每一類與第二條查詢中的比率最好<0.01
3. 提高緩沖區的效率。
SELECT RELOADS,PINS FROM V$LIBRARYCACHE;
RELOADS存入SQL命令被載入和分解的次數
PINS存入數據庫對SQL高速緩沖區查找一條語句的次數
如果RELOADS與PINS的比率大于1%則應增加INIT.ORA中的SHARED_POOL_SIZE的參數值。
SELECT GETMISSES,GETS FROM V$ROWCACHE;
如果RELOADS與PINS的比率大于10%則應增加INIT.ORA中的
SHARED_POOL_SIZE的參數值。
4. 用戶任何時點擁有的打開游標的最大數
修改INIT.ORA中的OPEN_CURSORS的參數值。
與高速緩存有關的是游標在會話中的緩存方式。
在INIT.ORA中增加 SESSION_CACHED_CURSORS=100
5. SELECT SUM(GETS),SUM(GETMISSES) FROM V$ROWCACHE;
必須使GETMISSES比率接近0, 為了優化性能﹐可以增加INIT.ORA中的參數SHARED_POLL_SIZE和DB_BLOCK_BUFFERS的值。
6. SELECT NAME,VALUE FROM V$SYSSTAT WHERE UPPER(NAME) IN
(‘SORTS(MEMORY)’,’SORTS(DISK)’);
如果用于磁盤上的排序量較高﹐可以增加INIT.ORA中的SORT_AREA_SIZE的值。
7. LGWR的日志文件如果切換太快會影響數據庫的活動﹐導致性能的下將。
在INIT.ORA 中 CHECKPOINT_PROCESS=TRUE
LOG_CHECKPOINT_INTERVAL=10000
LOG_CHECKPOINT_TIMEOUT=1800
8. 多線程服務器(MTS)的配置
1> MTS_SERVICE
這是調度程序用來向SQL*NET監聽器注冊服務的服務名。
最好取和SID相同的名稱。
2> MTS_DISPATCHERS
配置調度進程的數目。
3> MTS_MAX_DISPATCHERS
配置調度進程的最大數目。
4> MTS_SERCERS
啟動共享服務器的最初數目。
5> MTS_MAX_SERVERS
設置共享服務器的最大數目。
6> MTS_LISTENTER_ADDRESS
這是調度程序用來向SQL*NET監聽器注冊服務的服務名的地址。
一個MTS的配置例子:
在INIT.ORA中
mts_listener_address=’(ADDRESS=(PROTOCOL=TCP)(KEY=MYDB))’
mts_dispatchers=’tcp,10’
mts_dispatchers=’ipx,2’
mts_max_dispatchers=10
mts_max_servers=10
mts_servers=2
在LISTENER.ORA中應包括下類似的內容:
LISTENER=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=IPX)
(KEY=MYDB)
)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=OURHOST)
(PORT=1521
)
STARTUP_WAIT_TIME_LISTENER=0
CONNECT_TIMEOUT_LISTENER=10
TRACE_LEVEL_LISTENER=ADMIN
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=MYDB)
)
)
添加MTS參數之后要重新啟動數據庫。
在SQL*PLUS下用PS命令檢查共享服務器和調度程序是否存在。
Ø PS -EF|GREP FOXMOLD;
具有ORA_SNNN_SID和ORA_DNNN_SID名稱的進程分別是共享服務器和調度進程。
SELECT USERNAME,PROGRAM,SERVER FROM V$SESSION WHERE AUDSID=USERENV(‘SESSIONID’);
在SERVER列中返回的值應該是SHARED,如果是DEDICATED,就說明沒有正確配置MTS.
用LSNRCTL SERVICES命令來檢查調度程序是否向監聽器登記了服務。
7. 移動數據庫文件
第一種方法﹕(ALTER DATABASE)
關閉數據庫-移動數據文件-裝載并改名-啟動
1> SVRMGRL
2> CONNECT INTERNAL
3> SHUTDOWN
4> EXIT
5> MV /U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF /DB3/ORADATA
6> SVRMGRL
7> CONNECT INTERNAL
8> STARTUP MOUNT FOXMOLD
9> ALTER DATABASE RENAME FILE
‘/U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF’ TO
‘/DB3/ORADATA/USER01.DBF’
10> ALTER DATABASE OPEN
第二種方法﹕(ALTER TABLESPACE)
關閉數據庫-移動數據文件-裝載并改名-啟動
1> SVRMGRL
2> CONNECT INTERNAL
3> SHUTDOWN
4> EXIT
5> MV /U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF /DB3/ORADATA
6> SVRMGRL
7> CONNECT INTERNAL
8> ALTER TABLESPACE DATA RENAME DATAFILE
‘/U/PRODUCT/ORADATA/FOXMOLD/USER01.DBF’ TO
‘/DB3/ORADATA/USER01.DBF’
9> ALTER DATABASE OPEN
8. 統計分析
SPOOL C:\ANALYZE.SQL
SELECT 'ANALYZE TABLE '||TRIM(OBJECT_NAME)||' COMPUTE STATISTICS; '
FROM USER_OBJECTS
WHERE OBJECT_TYPE='TABLE'
然后運行analyze.sql文件即可
最后,對TABLESPACE碎片進行清理.
SELECT TABLESPACE_NAME, PERCENT_BLOCKS_COALESCED
FROM DBA_FREE_SPACE_COALESCED
去看那一個TABLESPACE對應的值不是100的就運行如下命令:
ALTER TABLESPACE TABLESPACE_NAME COALESCE
注意:如果TABLESPACE的值為100就沒有必要作此命令.
9. 移動TABLE INDEX 到另一個TABLESPACE
1> SPOOL C:\MV_INDEX.SQL
2> SELECT ‘ALTER INDEX ‘||TRIM(OBJECT_NAME)||’ REBUILD TABLESPACE FOXMOLD1;’ FROM USER_OBJECTS WHERE OBJECT_TYPE=’INDEX’
3> 將此命令生成MV_INDEX.SQL文件
4> @C:\MV_INDEX.SQL
10. MAINTAINING THE CONTROLFILE
1> SVRMGRL
2> CONNECT INTERNAL
3> SHUTDOWN
4> EXIT
5> CP /U/PRODUCT/ORADATA/FOXMOLD/CONTROL01.CTL
/DB4/ORADATA/CONTROL01.CTL
6> CHMOD 660 /DB4/ORADATA/CONTROL01.CTL
7> 修改INIT.ORA CONTROL_FILES=……
8> STARTUP MOUNT FOXMOLD
11. MAINTAINING REDO LOG FILE
1> SHUTDOWN
2> EXIT
3> CP /DISK1/*.RDO /DISK4/*.RDO
4> CHMOD 660 /DISK4/*.RDO
5> STARTUP MOUNT FOXMOLD
12. RECOVER SYNTAX
A. RECOVER A CLOSED DATABASE
1> RECOVER DATABASE
2> RECOVER DATAFILE ‘/DISK1/DF2.DBF’
3> ALTER DATABASE RECOVER DATABASE
B. RECOVER AN OPEN DATABASE
1> RECOVER TABLESPACE USER_DATA
2> RECOVER DATAFILE 2
3> ALTER DATABASE RECOVER DATAFILE 2
注意﹕ALTER DATABASE一定在RECOVER后執行。