8.4 其它
至于tnsnames.ora,listener.ora 使用操作系统拷贝。
9. 常见问题解决
9.1 安装后常用参数设置
参数 db_writer_processes open_cursors optimizer_mode pga_aggregate_target processes 说明 配置为CPU内核数的一半 根据AS数量及AS连接数,配置为3000 ~ 5000 RULE 同样,也与根据AS数量及AS连接数相关,一般为1500 ~ 3000。一般1G ~ 3G 参考设置 4 5000 RULE 3G 进程数,即可以对外提供服务的数据。同样,也与2000 根据AS数量及AS连接数相关,一般为1500 ~ 3000 300 2205 10G 设置processes后自动调整。 内存的一半,如果存储使用的是裸设备,可以提高到60% session_cached_cursors sessions sga_max_size sga_target shared_pool_size 同上;若设置为小于等sga_max_size,可动态修改;10G 否则则需要先设置sga_max_size 不超过800M,一般300M到500M就足够了 800M 注意:基于Linux平安的RAC不可设sga太大,否则可能会有问题。具体参见第9章11节。 SQL> sqlplus / as sysdba
当前参数值查看方法如下(open_cursors):
SQL> show parameter open_cursors;
参数设置方法如下:
SQL> alter system set open_cursors=4000; --非初始参数
SQL> alter system set db_writer_processes=2 scope=spfile; --初始参数,设置后需要重启数据库
注:1)以上参考设置在数据库主机为4CPU 双核,16G内存时的配置 2) 标为红色为初始参数,修改后需要重启数据。
9.2 杀死僵死连接
有时候由于客户端的异常退出,会出现一些连接的进程一直在运行,从而不能释放资源,影响系统的性能。可用以下方法实现把僵死的连接清除。 ? 查询数据库死锁
select distinct *
from (select t2.username, t2.sid, t2.serial#, t2.logon_time from v$locked_object t1, v$session t2 where t1.session_id = t2.sid) order by logon_time;
? 查询出来的结果就是有死锁的session了,
alter system kill session 'sid,serial#';
? 一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操
作系统进程,在unix中杀掉操作系统的进程。
SELECT a.username, c.spid AS oracle_process_id
FROM v$session a, v$process c WHERE c.addr = a.paddr and a.sid = m
and a.serial# = n;
os_process_id,
c.pid
AS
? 采用kill (unix/linux) 或 orakill(windows )
kill -9 os_process_id
9.3 AIX内存溢出
? 环境:
AIX平台,任何版本的Oracle
? 现象:
第一次:小机内核的CPU利用率达到40%,有一个进程占用内存不释放,Paging Space达到100%。重启AS、迪斯杰备份及小机后利用率及Paging Space下降至正常。
第二次:闭市后用SQLPlus连接到RAC1上,做了一些三方存管帐户的批量修改。晚上在清算处理时,在文件标志复位时发现很慢,查看Paging Space利用率为40%,但小机利用率正常。重开AS及迪斯杰备份后,利用率下降到30%,文件标志复位也很快了,在清算过程中利用率也一直在下降,一直到19%点多。清算结束后又重开AS及迪斯杰备份, Paging Space利用率为18.9% ,后将RAC1和rac2的ORACLE数据库重开(shut dowm及start)后,下降到5.6%。
? 原因:
当Sga,Pga设置过小时,数据库会把不能置于内存中的数据放到交换区去,磁盘的IO速度比内存慢很多,所以会对性能产生较大影响。在极端情况下,如果交换分区全部耗尽,那对系统性能的影响就更大了。
在AIX系统中,内存可以分为两类:计算型内存和文件型内存。类似大量文件类操作,如文件复制、压缩、数据库的dump/load等操作会大量占用文件型内存。如果按照系统缺省的配置,文件型内存最多会占用到内存总量的80%,由于文件型内存占用并不主动释放,从而可能造成内存资源的短缺及Paging Space使用率过高。特别是,由于数据库存储使用的是裸设备,允许文件缓存占用大量的内存是没有必要的。
命令topas可以用来查看文件型内存占用内存情况,在MEMORY一栏中的%Noncomp显示的是文件型内存的占用百分比。
如果文件型内存所占比例很高,而Paging Space使用率居高不下时,可以通过降低minperm、maxperm的参数值来进行调优,减少文件型内存可占用的份额。
? 解决方法:
在进行调整前,首先通过命令vmo -a来查看目前的参数值;minperm及maxperm的缺省值分别是20%和80%。注意:在调小maxperm%前,请产生同时降低maxclient%的值(即maxclient%的值不得大于maxperm%的参数值)。谨慎起见,可以通过小量多次调整来达到性能优化的目的。如maxperm% 可以依次调整了60,40,20,同时查看性能的性能。
最终可能可以调整为:
vmo -o minperm%=10 vmo -o maxclient%=20 vmo -o maxperm%=20
因为参数maxperm充当的是软限制,所以文件型内存的占用率依旧可以超过maxperm的设定值。如果需要进行强制限制,则需要将参数strict_maxperm的值设为1,该参数的缺省值为0,但此方法需谨慎使用。
? 其它
交换分区设置过小也可能引起交换分区利用率过高的问题。交换分区的大小与物理内存的大小有关。一般情况下,交换分区可以参照下表设置。 物理内存(RAM) Between 1024 MB and 2048 MB Between 2049 MB and 8192 MB More than 8192 MB
交换分区(Swap Space) 2 倍 RAM 1.5倍RAM 1 倍RAM 9.4 某一功能特别慢
取故障生产间的两个快照,然后做一个AWR报靠。同时,也可以用第7部分Troubleshooting提供的语句对数据库进行分析。对抓出来的语句进行分析,如果怀疑是统计信息不正确引起的全表扫瞄,可以先进行统计信息的收集,方法如下。否则则可能需要测试索引。具体联系开发人员。
9.5 统计信息失效导致执行计划走全表扫瞄
? 基于Schema的统计信息收集
begin
dbms_stats.gather_schema_stats(ownname => 'HS_FUTURES', estimate_percent => 20,
method_opt => 'for all indexed columns size 10',
cascade => true, degree => 7); end;
? 基于表的统计信息收集
Analyze table hs_secu.entrust compute statistics;
9.6 关于DRM
? 环境:
10g,至少HP-UN
? 现象:
在 2007-05-21 14:42:00 左右,管理员发现报盘系统hang住,AS队列上有大量积压,但未登陆到oracle系统查看等待事件,也未作其他的数据库方面的诊断处理。sqlplus正常登陆但比较缓慢。在操作系统层面,节点1的cpu利用率为0,节点2的cpu利用率为20。管理员在反复关闭并重开报盘系统3分钟左右后,系统正常运行。
事后,HP工程师在主机层面查看了相关的日志信息,并未发现什么异常的情况,同时表示无法在现有资源下监控数据库数据线网络的流量。查看了oracle 的相关日志,发现里面有大量的关于DRM 的信息,根据里面的信息,我猜测可能是由于数据库的对象资源动态管理过于频繁,在两个实例之间来回“震荡”时出现异常的缘故。
? 原因:
由于在oracle的日志和跟踪文件里未能找到与DRM 相关的以外的其他有用信息。根据Oracle 工程师的反馈,可以对DRM 做一些处理。并表示对系统性能并无什么影响。再者,从Oracle的trace文件里可以看出在两次交易故障发生时,oracle rac的DRM 正在做大量的数据同步信息,可查看pdcrac1_lmon_18807.trc。因此,综合以上的各种信息,有必要现在针对DRM方面做一些处理,修改以下初始化参数。
_gc_affinity_time=0 # defines the frequency in minutes to check if remastering is needed.
_gc_undo_affinity=FALSE # defines the number of times a node must access an object for it to be a DRM candidate
? 解决方法:
1. 备份当前的数据库服务器参数
SQL> Create pfile=’home/oracle/initsid.ora’ from spfile;
2.修改备份出来的数据库参数文件,在文件末尾添加
*._gc_affinity_time=0
*._gc_undo_affinity=false
3. shutdown 当前数据库,已刚才备份修改后的数据库参数文件启动到nomount SQL> Shutdown immediate (两台机)
SQL> Startup pfile=’/home/oracle/initsid.ora’ nomount; SQL> Create spfile=’/dev/raw/rspfile’ from pfile=’/home/oracle/initsid.ora’; 4. shutdown 当前数据库并重起数据库 SQL> Startup
? 其它
下面内容是trace文件的部分内容。
kjfcrfg: DRM window size = 0->4096 (min lognb = 15) *** 2007-05-19 15:28:08.141