数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ORACLE 服務器的配置及優化

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

  ORACLE 服務器的配置及優化

1.        ORACLE中實現分布式快速存取和充實內存是很重要的。

        要不惜任何代價避免頁面調度和交換﹐每次都必須把系統全局區(SGA)放到內存。

SGA放到內存中﹐在INIT.ORA中設置參數 PRE_PAGE_SGA

   PRE_PAGE_SGA=YES

2.        回卷段的竟爭會降低系統的性能。

SELECT  GETS,WAITS  FROM V$ROLLSTAT;

GETS代表回卷段被訪問的次數

WAITS代表進程等待回卷段中哪個進程的次數

如果GETSWAITS的比大于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高速緩沖區查找一條語句的次數

如果RELOADSPINS的比率大于1%則應增加INIT.ORA中的SHARED_POOL_SIZE的參數值。

   SELECT GETMISSES,GETS FROM V$ROWCACHE;

   如果RELOADSPINS的比率大于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_SIZEDB_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_SIDORA_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后執行。


相关文章

相关软件