服务器 频道

ORACLE 服务器的配置及优化

  【IT168 服务器学院】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

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命令来检查调度程序是否向监听器登记了服务。

  8.移动数据库文件

  第一种方法﹕(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

  9. 统计分析

  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就没有必要作此命令.

  10.移动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

  11.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

  12.MAINTAINING REDO LOG FILE

  1>SHUTDOWN

  2>EXIT

  3>CP /DISK1/*.RDO /DISK4/*.RDO

  4>CHMOD 660 /DISK4/*.RDO

  5>STARTUP MOUNT FOXMOLD

  13.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后执行。

0
相关文章