数据库有优化案例培训.ppt
《数据库有优化案例培训.ppt》由会员分享,可在线阅读,更多相关《数据库有优化案例培训.ppt(28页珍藏版)》请在三一办公上搜索。
1、ICD数据问题总结培训,李凌志 37090,CONTENTS,重大事故总结重大事故分类主要数据库问题数据库案例总结,Page 3,2006年与数据库相关的事故、重大事故,Page 4,数据库问题总结,SQL性能问题,是引起重大事故的主要原因人为操作不规范,也是引起重大事故的原因ORACLE的BUG,引起业务中断诱发重大事故,Page 5,数据库性能案例,局点 新疆电信 日期 20060614表现症状 座席接入很慢,数据库的IDLE几乎为0,IOWAIT到达60%。SQL语句写法有问题 索引使用不合理,使用的效率比较低 对大表、分区表的查询,没有使用到索引 分区表的查询,没有添加分区条件数据库参
2、数配置不合理 db_block_buffers 的值设置太小。问题解决情况:通过优化后,使系统的cpu的idle由0左右提升到业务高峰期的40%。,Page 6,主要有问题的SQL大表的查询没有使用到索引,SELECT MAX(T.SERIALNO)FROM T_PUB_COMMONINFO T WHERE T.ACCEPTERNO=:b1 AND PARTID=:b2问题描述该语句虽然按分区条件查询,但没有在字段ACCEPTERNO 上创建索引,导致对整个分区扫描 优化方式 对该字段创建分区索引,避免对分区扫描 create index ix_pub_commaccepterno on t_
3、Pub_CommonInfo(ACCEPTERNO)online nologging tablespace service_hist_idx,Page 7,主要有问题的SQL对分区表查询没有使用到分区条件,SELECT COUNT(*)FROM T_AG_RECORDFILE WHERE SERIALNO=:b1问题描述:该表T_AG_RECORDFILE是分区表,数据量非常大,上面的查询,虽然用到了流水号对应的索引,但是没有添加分区条件,导致对每个分区都访问,增加了系统的开销。优化方式:添加按分区条件查询SELECT COUNT(*)FROM T_AG_RECORDFILE WHERE SE
4、RIALNO=:b1 AND PARTID=substr(:b1,5,4),Page 8,主要有问题的SQL索引创建和使用不合理,SELECT 1 FROM T_WF_SKILLSTAFFAUTH T WHERE T.SKILLID=:b1 AND T.STAFFNO=:b2问题描述:该表存在字段SKILLID的单独索引以及SKILLID和STAFFNO的组合索引。上面的SQL语句通过SKILLID字段的单独索引访问,效率比较低。优化方式:索引1 create index ix_skillid on T_WF_SKILLSTAFFAUTH(SKILLID)索引2 create index ix
5、_skillid on T_WF_SKILLSTAFFAUTH(SKILLID,STAFFNO)当字段SKILLID单独出现在查询条件中时,可以通过索引2代替索引1,而这两个索引同时存在的时,ORACLE优先使用单个字段的索引,因此索引1是多余的,通过删除字段SKILLID对应的单独索引,使SQL语句使用到复合索引,Page 9,主要有问题的SQL使用的索引选择性不好,SELECT COUNT(*)FROM T_QC_INFO WHERE OBJECTID=:b1 AND RECORDERNUM=:b2问题描述:上面的SQL语句,使用的是OBJECTID字段的索引,通过查询该表的数据分析,发现
6、该字段为有限的几类数据。问题解决:通过对RECORDERNUM 字段创建索引,使SQL语句用到新的索引,提高了查询效率。,Page 10,主要有问题的SQL使用的索引选择性不好,SELECT count(*)FROM(SELECT 1FROM t_Pub_CommonInfo a,T_PUB_USERSATISFY b,T_Pub_Orga c,t_ag_language d,t_Pub_Receptmethod e WHERE AcceptBeginTime BETWEEN TO_DATE(2005-06-01 00:00:00,YYYY-MM-DD HH24:MI:SS)AND TO_DA
7、TE(2006-06-14 23:59:59,YYYY-MM-DD HH24:MI:SS)And a.USERSATISFY=b.ID(+)And a.UserCity=c.OrgaID And a.LANGUAGE=d.LANGUAGEID(+)AND a.ACCEPTID=e.ID(+)AND a.servicecity in(select cityid from t_pm_cityauth where staffno=2049)AND(A.PartID=0601 OR A.PartID=0614)AND A.StaffCity=01 AND A.CalleeNo=5867696),上面的
8、SQL使用的是蓝色字体所标注的字段对应的索引,该索引选择性非常差,因为该表是按日期范围分区,通过对CalleeNo字段创建索引;使SQL语句使用新的索引后,性能得到很大提高,Page 11,主要有问题的SQL没有办法通过索引进行优化,SELECT SERVICECLASSID,A.SERVICENAME,A.SUPERID,A.HANDLEHOURLIMIT,DECODE(SUBSTR(A.SERVICECLASSID,1,2),03,SUBSTR(A.SERVICECLASSID,3)|-|A.SERVICENAME,SUBSTR(A.SERVICECLASSID,-2)|-|A.SERVI
9、CENAME)SERVICEIDNAME FROM T_PUB_SERVICECLASS A WHERE NOT EXISTS(SELECT 1 FROM T_WF_SERVICECLASSSHIELD D WHERE A.SERVICECLASSID LIKE D.SERVICECLASSID|%)AND(A.CITYID=00 OR A.CITYID IN(SELECT CITYID FROM T_PM_CITYAUTH WHERE STAFFNO=:b1)ORDER BY A.SUPERID,A.SERVICECLASSID优化说明:上面的SQL语句没有办法使用到索引,需要根据业务逻辑的
10、需要,对代码进行重写。,Page 12,使用到索引,但扫描范围大,查询效率低,SELECT MIN(t.classid)FROM t_97_interface t WHERE t.serialnumber LIKE:b1|%问题描述:上面的SQL语句,是来话接入流程中调用的语句,该语句调用非常频繁,对系统的性能影响对大,导致系统的CPU资源100%忙,虽然用到了serialnumber字段的索引,但是由于查询条件是LIKE:b1|%方式同时使用了min函数,导致查询效率低。问题解决:通过修改相应的业务逻辑后,按下面的方式对SQL语句进行优化后,问题立即解决。SELECT MIN(t.class
11、id)from t_97_interface t where t.serialnumber i_CallerNo;,Page 13,主要有问题的SQL令人晕菜的SQL语句,select*from(SELECT 1 FROM t_Wf_Disposalstatus A,T_PUB_ServiceClass B,T_PUB_ORGA C,T_WF_NODE D,T_WF_ServiceInfo E,T_PUB_COMMONINFO F,T_wf_UserSatisfy G,T_wf_topayrecord H WHERE A.Accepttime=TO_DATE(2006-03-31 00:00:
12、00,YYYY-MM-DD HH24:MI:SS)AND A.Accepttime=TO_DATE(2006-03-31 00:00:00,YYYY-MM-DD HH24:MI:SS)AND A.Accepttime TO_DATE(2006-03-31 23:59:59,YYYY-MM-DD HH24:MI:SS)AND A.ServiceClassID=B.SERVICECLASSID AND A.Servicecity=C.ORGAID AND C.Superid=0 AND A.satisfyid=G.id(+)AND A.SERIALNO=H.SERIALNO(+)AND A.SER
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 优化 案例 培训
链接地址:https://www.31ppt.com/p-6296484.html