首页 > 数据库 > Oracle > 正文

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后執行。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表