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的参数值。 中国网管联盟www_bitscn_com
任何回卷段的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的参数值。 中国网管联盟www_bitscn_com
与高速缓存有关的是游标在会话中的缓存方式。
在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
配置调度进程的数目。 网管网bitsCN_com
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命令来检查调度程序是否向监听器登记了服务。
要不惜任何代价避免页面调度和交换﹐每次都必须把系统全局区(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的参数值。 中国网管联盟www_bitscn_com
任何回卷段的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的参数值。 中国网管联盟www_bitscn_com
与高速缓存有关的是游标在会话中的缓存方式。
在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
配置调度进程的数目。 网管网bitsCN_com
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
54ne.com
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命令来检查调度程序是否向监听器登记了服务。