ORACLE 服務器的配置及優化
2024-08-29 13:31:12
供稿:网友
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后執行。