Oracle调优实战

  • 格式:doc
  • 大小:293.50 KB
  • 文档页数:14

Oracle调优实战 1 文档结构 主要从性能调优的各个方面阐述分析思路,文中如果出现蓝色带下划线的部分,请点击,可以查看详细的操作步骤。 阅读文档的时候建议打开文档结构图,便于快速获得自己所需要的内容

2 必备工具

工欲善其事,必先利其器 2.1 SQLDeveloper 2.2 XManager系列工具 3 了解一下服务器大致运行的情况 3.1 CPU和内存情况 cat /proc/cpuinfo free

3.2 Top

如果4-5个Oracle进程老是居高不下,说明语句或者Oracle内存配置还是有很大问题 3.3 Vmstat

观察一段时间内,是否线程堵塞,SWAP是否在使用、CPU和Memory使用情况如何 3.4 确认是否以SMP方式运行 #cat /proc/cpuinfo 可查看系统CPU状况 #uname –a 可看系统的运行方式

3.5 确认操作系统的共享内存大小 最好将Oracle的使用内存都扔到一个共享内存段中,便于提高性能; 以下内容主要还是针对Linux,AIX好像是自己管理共享内存,无法设置

查看方法: more /proc/sys/kernel/shmmax 查看共享内存大小,默认为32M 修改方法: vi /etc/sysctl.conf 然后加入 fs.file-max = 65536 kernel.shmmax = 2147483648 需要将Oracle的SGA内存都放在一个共享内存段 使用sysctl -p命令生效

3.6 IO故障分析 确认文件打开数目,ulimit –n 建议调到65535 在IO故障分析还是缺少经验,希望有实战的同事补充

4 从TOPSQL开始入手

Oracle一般按照以前提供的文档进行设置,基本上不会出现太多问题,问题很多方面与垃圾数据、SQL语句不合理、索引创建得不太合适有关。

4.1 获取TOPSQL

按照后面相关知识点中的获取TOPSQL章节描述的方法,根据看到的情况,获取系统的前10~20条TOPSQL

4.2 逐条分析这些SQL,找到具体的原因

位于TOPSQL主要的可能性原因主要可能有以下几个方面: 1) 几个大表进行关联查询(比如WCMChnlDoc和WCMDocument) 2) 某些表数据太大,过多冗余 3) 索引建立得不合理,存在Table Full Scan

5 了解WCM的一些信息

5.1 检查一些表的冗余数据是否过多 需要检查的表: 1. WCMLog(日志) 2. 消息相关的表:WCMMessage、WCMMsgQueue、WCMMSGRECEIVER 3. 如果安装了Blog:XWCMCLIENTUSER 4. 如果使用了IDS:IDSLOG表可能也会很大

检查、删除和备份的方法: 1. Select count(*) from ; 2. 如果超过1W,建议执行truncate table ; 3. 如果感觉表对于用户还有用,可以先备份 a) SQLServer:select * into from ; b) Oracle:create table as select * from ;

5.2 确定是单表还是多表查询

如果是WCM52,默认都是多表; Alter table WCMChnlDoc nologging; Update WCMChnlDoc set DocTitle=(select WCMDocument.DocTitle from WCMDocument where WCMDocument.DocId=WCMChnlDoc.DocId);

5.3 栏目检索条件、模板中是否指定了多表

检查垃圾数据是否多,如果超过1W,建议truncate select count(*) from WCMLog; select count(*) from WCMMessage; --WCM6需要关注 select count(*) from wcmmsgqueue; --WCM6需要关注 select count(*) from wcmpublishtask; 检查WCMChnlDoc上的索引(RecId是否有主键、) 6 了解Oracle基本配置 6.1 获取配置文件 1) 登录服务器,切换到Oracle用户 2) 相关知识点: Oracle的SID一般定义在:$ORACLE_SID变量中

配置文件一般配置在$ORACLE_HOME/dbs中 3) cd $ORACLE_HOME/dbs,配置文件一般配置在cd $ORACLE_HOME/dbs中 4) 获取Oracle配置文件,查看各项配置,获取方法见Oracle配置文件的获取和修改方法

6.2 确认是否为共享模式(shared mode)

ps -ef |grep s000 如果有进程,说明是Shared Mode,需要修改配置文件将如下一行注释掉 #*.dispatchers='(PROTOCOL=TCP) (SERVICE=mossXDB)' 关于共享模式的相关文档:http://fusnow.itpub.net/post/681/214188

6.3 查看内存配置情况,看是否与我发的文档一致

系统运行中可以直接通过alter system set XXX=XX scope=SPFile 修改参数 内存设置根据操作系统不一样会有些差别,32位操作系统最大只能设置到4G,更多内存只能在64位操作系统才能支持 查看是否是32位还是64位的方法: file /sbin/init

6.4 了解几张关键表的分析时间

几张关键的表:WCMDocument、WCMChnldoc、WCMMetaTableXXX 如果没有分析需要执行分析。 方法见:了解Oracle指定表的分析时间和分析方法 7 相关知识点 7.1 获取TOPSQL方法 1. 打开SQL Developer 2. 点击ReportsData Dictionary ReportsDatabase AdministrationTOP SQL,可以按照多种方式统计TOPSQL

Step1:

Step2: 7.2 Oracle配置文件的获取和修改方法 Oracle配置文件现在一般采用SPFile维护,但是他是二进制文件,需要转换成PFile 1) 确认系统是PFile还是SPFile: Select isspecified,count(*) from v$spparameter group by isspecified; True表示为spfile 2) 从SPfile转换成Pfile文件,便于修改: [oracle@database db_1]$ sqlplus "/as sysdba" SQL> create pfile from spfile; 3) 将$ORACLE_HOME/dbs/init.ora下载下来 4) 修改配置文件,在服务器上备份以前的文件,上传文件,将spfile.ora移走 5) 重新启动Oracle,让新的配置生效:(RAC的启动方式可能有很大不同) sqlplus "/as sysdba " shutdown immediate 如果没有带参数的停止时间可能会过长,千万要注意 startup exit

7.3 了解Oracle指定表的分析时间和分析方法 了解分析的最后时间: 对指定表进行分析

7.4 操作系统共享内存的相关知识 shmmax内核参数定义单个共享内存段的最大值,如果该参数设置小于Oracle SGA设置,那么SGA就会被分配多个共享内存段。这在繁忙的系统中可能成为性能负担,带来系统问题。 Linux上该参数的缺省值通常为32M。 [root@neirong root]# more /proc/sys/kernel/shmmax 33554432

可以通过ipcs命令查看此设置下共享内存的分配,我们可以看到Oracle分配了多个共享内存段以满足SGA设置的需要: [root@neirong root]# ipcs -sa

------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 884736 oracle 640 4194304 14 0x00000000 917505 oracle 640 33554432 14 0x00000000 950274 oracle 640 33554432 14 0x00000000 983043 oracle 640 33554432 14 0x00000000 1015812 oracle 640 33554432 14 0x00000000 1048581 oracle 640 33554432 14 0x00000000 1081350 oracle 640 33554432 14 0x00000000 1114119 oracle 640 33554432 14 0x00000000 1146888 oracle 640 33554432 14 0x00000000 1179657 oracle 640 33554432 14 0x00000000 1212426 oracle 640 33554432 14 0x00000000 1245195 oracle 640 33554432 14 0x00000000 1277964 oracle 640 33554432 14 0x00000000 1310733 oracle 640 33554432 14 0x00000000 1343502 oracle 640 33554432 14 0x00000000 1376271 oracle 640 33554432 14 0x00000000 1409040 oracle 640 33554432 14 0x00000000 1441809 oracle 640 33554432 14 0x00000000 1474578 oracle 640 33554432 14 0x00000000 1507347 oracle 640 33554432 14 0x00000000 1540116 oracle 640 33554432 14 0x00000000 1572885 oracle 640 33554432 14 0x00000000 1605654 oracle 640 33554432 14 0x00000000 1638423 oracle 640 33554432 14 0x00000000 1671192 oracle 640 33554432 14 0x00000000 1703961 oracle 640 33554432 14 0x7a9c9900 1736730 oracle 640 4194304 56