营销业务应用系统应用级优化方案_第1页
营销业务应用系统应用级优化方案_第2页
营销业务应用系统应用级优化方案_第3页
营销业务应用系统应用级优化方案_第4页
营销业务应用系统应用级优化方案_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 项目简介项目简介 4 2 应用系统的优化应用系统的优化 5 2 1 优化概述 5 2 2 优化方案 5 2 2 1 未使用已有索引 5 2 2 2 缺少必要索引 23 2 2 3 其它 38 2 2 4 临时表优化 51 2 3 应用系统架构设计 51 2 3 1 业务拆分 52 2 3 2 历史数据下线 53 3 其它建议其它建议 53 3 1 数据库实例性能数据采集作业 53 2 1 项目简介项目简介 陕西公司营销业务系统随着业务量与数据量的增大 系统压力越来越大 系统可靠性与 高效性降低 影响了对业务支持的质量 为此 南瑞公司和陕西公司及该软件的开发公司东软公司一起合作 对营销业务系统通 过先进 标准 可控的技术 工具和方法 监控系统的运行状况 评估系统现状 定位系统 运行瓶颈 制定具体的优化实施及操作方案 并对优化实施结果进行评估 实现优化系统性 能 提升系统运行质量 挖掘系统潜力 创建系统建设良性循环模式的目的 并有助于提高 维护人员的技术水平 本项目分为四个阶段 第一阶段为优化小组在西安市对陕西公司营销业务系统进行现场调研和性能分析 形成 性能分析报告 并提出初步优化建议 第二阶段 优化小组和开发厂家在国网公司相关部门的领导下 在西安市是成立联合测 试小组 对主要问题的优化方案进行验证 第三阶段 优化小组在西安市实施现场优化实施工作 并在实施完成后进行性能评估 第四阶段 开发厂商完成应用优化的代码调整工作 发布新的版本 3 2 应用系统的优化应用系统的优化 由于本次优化工作中发现的应用优化问题 部分可以通过调整索引的方式得到解决 而 部分必须由开发厂商修改应用代码 因此本方案对目前发现的一些主要的应用问题进行了分 析 并给出了解决方案 在优化实施过程中 部分修改代码的工作需要开发厂商东软公司完 成 2 1 优化概述优化概述 应用程序的优化调整贯穿整个调优项目的始终 本章就部分重点应用的调整进行总结 SQL 语句的优化对于提高系统性能十分重要 高开销的 SQL 占用了大量的系统资源 对这些 SQL 进行优化 可以有效的提高系统的性能 需要进行调整的 SQL 语句主要可以分为以下几类 缺乏合适索引的 SQL 规范索引设计 添加或调整索引 避免对大表的全表扫描 语法明显不合理的 SQL 主要是随意地在字段上增加了转换函数 如 TRIM 和 UPPER 等 造成了全表扫描 还有就是在取单条记录时 习惯性地使用 MAX 等分组函数 而不是使 用更高效的 rownum 1 这些可以通过改写 SQL 调整 执行计划不稳定的 SQL 找到最佳执行计划 调整表联接顺序或通过 HINT 固定执行计划 使用更有效的物理结构 比如有些大表如果采用分区表效果可能更好 其它 比如有些 SQL 语句或存储过程改写后效率可能更好 具体内容见下节 2 2 优化方案优化方案 2 2 1 未使用已有索引未使用已有索引 1 Sql 1 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131024 00001 Comment u1 电费收缴及营销账务 4 模块名称 模块名称 电费收缴及营销账务 问题描述 问题描述 1 存在问题的存在问题的 SQL SELECT FIRST ROWS FROM SELECT t ROWNUM AS RN2 FROM SELECT a pay flow CHARGE ID AS CHARGE ID a pay flow ORG NO AS ORG NO a pay flow TYPE CODE AS TYPE CODE a pay flow RCV AMT AS RCV AMT a pay flow THIS CHG AS THIS CHG a pay flow LAST CHG AS LAST CHG a pay flow CHARGE EMP NO AS CHARGE EMP NO a pay flow PAY MODE AS PAY MODE a pay flow SETTLE MODE AS SETTLE MODE a pay flow SETTLE NOTE NO AS SETTLE NOTE NO a pay flow SETTLE BANK CODE AS SETTLE BANK CODE a pay flow ACCT NO AS ACCT NO a pay flow ACCT NAME AS ACCT NAME SELECT REAL NAME FROM sa user WHERE sa user USER ID a pay flow CHARGE EMP NO AND rownum 1 AS REAL NAME a cashchk flow CASHCHK NO AS CASHCHK NO a pay flow CHARGE DATE AS CHARGE DATE a cashchk flow ACCT STATUS CODE AS ACCT STATUS CODE a cashchk flow ARRIVE DATE AS ARRIVE DATE a pay flow CHARGE REMARK AS CHARGE REMARK a pay flow CONS NO AS CONS NO SELECT ORG NAME FROM sa org WHERE sa org org no a pay flow org no AND rownum 1 AS CONS ORG NAME a cashchk flow DISPOSE DATE AS DISPOSE DATE FROM a pay flow a cashchk flow WHERE a cashchk flow CASHCHK ID a pay flow CASHCHK ID AND a pay flow CHARGE DATE 1 AND a pay flow CHARGE DATE 6 AND A PAY FLOW PART CHG YM 7 ORDER BY a pay flow CHARGE DATE DESC 5 a pay flow TYPE CODE ASC a pay flow RCV AMT ASC t WHERE ROWNUM 9 生产环境真实执行计划 生产环境真实执行计划 2 导致效率低下的原因导致效率低下的原因 索引 EPM SN AC PAYINTO AC FLOW FK 的优化程序统计信息已失效 从执行计划可以看到 a pay flow charge date 字段进行了隐式类型转换从而导致该字段上的索引无法使用 隐式类型转换会导致过多 cpu 的消耗 我们从执行计划的 id 15 可以看到 cpu 的消耗是 420k 建议方案 建议方案 考虑收集此索引的优化程序统计信息 execute dbms stats gather index stats ownname EPM SN indname AC PAYINTO AC FLOW FK estimate percent DBMS STATS AUTO SAMPLE SIZE 修改程序 把传入变量的类型修改成与字段类型一致 避免隐式的数据类型转换 避免消耗大量 cpu 资源 原执行效果 原执行效果 从原执行计划看到此 sql CBO 估算的 cpu 的消耗为 420K 每次执行逻辑读 130905 每次执行时间 22s 测试效果测试效果 Comment u2 系统后台模块 6 生产环境真实执行计划 生产环境真实执行计划 对该 sql 的变量传入相应的数据类型的值之后 再执行查看其执行计划 看到 CBO 估算的 cpu 的消耗降低 到了 4 每次执行时间 2 95s 由此可看 cpu 和执行时间都大大缩短 测试日期 测试日期 2013 年年 10 月月 24 生产库实际效果 生产库实际效果 每次执行时间 2 95s 生产库确认日期 生产库确认日期 2013 年年 10 月月 24 2 Sql 2 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131024 00002 模块名称 模块名称 系统后台模块 问题描述 问题描述 1 存在问题的存在问题的 SQL SQL ID 8rf106msub9b7 CHILD NUMBER 0 select count from sa log login where sa log login ORG NO like 1 and sa log login LOGIN TIME 2 and sa log login LOGIN TIME 1 AND a LOGIN TIME nvl null 200001 and to char a3 charge date yyyy MM dd nvl 2 200001 and a0 rcvbl ym nvl 3 220012 and o1 org no a3 org no and u1 user id a3 charge emp no and y1 PROP TYPE ID acct status code and y1 PROP LIST ID a2 acct status code group by a0 rcvbl ym a3 org no a2 acct status code a3 charge emp no u1 real name o1 org name y1 PROP LIST NAME 2 导致效率低下的原因 导致效率低下的原因 经查询在 a pay flow charge date 字段上已经存在索引 然而该 sql 在该字段上添加了函数 导致索引 无法使用 从而导致性能严重下降 建议方案 建议方案 改写 sql 去掉 charge date 字段上的函数 进而能够使用该字段上的索引 提升效率 原执行效果 原执行效果 15 测试效果 测试效果 测试日期 测试日期 2013 年年 10 月月 28 日日 可以看到去掉索引字段上的函数之后 cpu 的 cost 值大大减少 性能得到很大提升 7 Sql 7 所属函数或存储过程名称 所属函数或存储过程名称 PRC DELETE HUIFANG YK 编号 编号 XA 20131028 00014 模块名称 模块名称 16 问题描述 问题描述 1 存在问题的存在问题的 SQL SELECT A KEYDATA ID FROM EPSA SN SA WORKFORM INST A EPM SN ARC S APP B WHERE A KEYDATA ID B APP NO AND B VOLT CODE IN AC02202 AC03802 AND A WORKFORM TYPE 002 AND TO CHAR A START TIME YYYYMMDD TO CHAR SYSDATE 1 YYYYMMDD AND ROWNUM trunc SYSDATE 1 and a START TIME trunc SYSDATE AND ROWNUM trunc SYSDATE 1 and a START TIME 1 AND a login time 2 AND d org no LIKE 61401 2 导致效率低下的原因 导致效率低下的原因 从执行计划中可以看到该 sql 中 sa log login 表的 login time 字段进行了隐式类型转换 导致其上面的 索引无法使用 从而导致严重的性能问题 建议方案 建议方案 修改应用 sql 把传入到 login time 字段中的变量的类型改成和 login time 字段类型一致的 这样就可 以使用其字段上的索引 原执行效果 原执行效果 20 在 30 分钟内执行 882 次 每次逻辑读 1764147 每次执行时间 15s 生产环境下执行计划 生产环境下执行计划 9 Sql 9 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131028 00016 模块名称 模块名称 问题描述 问题描述 1 存在问题的存在问题的 SQL Sql id 62qs5xy59346s Schema Name EPM SN SELECT COUNT DISTINCT a user name FROM sa log login history a WHERE EXISTS SELECT 1 FROM sa user b WHERE a user name b user name AND a LOGIN TIME 1 AND a LOGIN TIME 0 and w overdued 1 or w overdued 3 2 导致效率低下的原因 导致效率低下的原因 该表碎片严重 需要从新整理碎片 缺少必要索引 建议方案 建议方案 对该表和表上的索引进行碎片整理 我们查询在 rt workiteminst 表的 overdued 字段上数据分布不均衡 而且该字段的基数很低 值为 1 或 3 的值的数据量占很少一部分 所以非常适合创建所以 Comment u5 电费收缴及营销账务 22 在 overdued 字段上创建索引 同时搜集该字段上的直方图 告诉 CBO 该字段上数据的分布情况 以 便选择最优的执行计划 create index flow sn rt work on FLOW SN rt workiteminst overdued parallel 4 alter index flow sn rt work parallel 1 exec dbms stats gather table stats flow sn rt workiteminst estimate percent 60 method opt for columns overdued size 10 degree 4 cascade true 原执行效果 原执行效果 每次执行时间 205s 每次物理读 1347026 测试效果 测试效果 从执行计划上看 cost 逻辑读和执行时间都大大减少 测试日期 测试日期 2013 年年 10 月月 24 日日 生产库实际效果 生产库实际效果 每次逻辑读 6 每次执行时间 0 1s 生产库确认日期 生产库确认日期 2013 年年 10 月月 24 日日 2 Sql 2 所属函数或存储过程名称 例所属函数或存储过程名称 例 TRANS ID TONAME 编号 编号 XA 20131025 00005 模块名称 模块名称 电费收缴及营销账务 23 问题描述 问题描述 1 存在问题的存在问题的 SQL SELECT FROM v sql WHERE sql id 0rm64krm4qd2h select a rcvbl flow CONS NO as CONS NO c cons CONS NAME as CONS NAME c cons ELEC ADDR as ELEC ADDR max c cons MR SECT NO as MR SECT NO nvl SUM a rcvbl flow RCVBL AMT 0 nvl SUM a rcvbl flow RCVED AMT 0 as OWE FEE nvl SUM a rcvbl flow T PQ 0 as T PQ nvl SUM a rcvbl flow RCVBL AMT 0 as RCVBL AMT nvl SUM a rcvbl flow RCVED AMT 0 as RCVED AMT nvl SUM a rcvbl flow DISPOSE AMT 0 as DISPOSE AMT nvl SUM a rcvbl flow rcvbl penalty 0 as RCVBL PENALTY nvl SUM a rcvbl flow rcved penalty 0 as RCVED PENALTY nvl SUM a rcvbl flow dispose penalty 0 as DISPOSE PENALTY a rcvbl flow STATUS CODE as STATUS CODE a rcvbl flow PAY MODE as PAY MODE a rcvbl flow RCVBL YM as RCVBL YM a rcvbl flow amt type AMT TYPE 结清标志 case when min a rcvbl flow settle flag max a rcvbl flow settle flag and min a rcvbl flow settle flag 01 then 01 when min a rcvbl flow settle flag max a rcvbl flow settle flag and min a rcvbl flow settle flag 03 then 03 else 02 end as SETTLE FLAG c cons elec type code as ELEC TYPE CODE c acct pay no as PAY NO c acct MAIN CONS NO as MAIN CONS NO decode SUM a rcvbl flow DISPOSE AMT SUM a rcvbl flow RCVBL AMT 到账 在途 as ACCT STATUS SELECT ORG NAME FROM sa org WHERE ORG NO c cons ORG NO as ORG NAME 供电单位 SELECT sa user real name FROM r oper activity sa user WHERE r oper activity act code 03 AND r oper activity operator no sa user user id AND r oper activity MR SECT NO c cons MR SECT NO as READER NAME 抄表员 max c cons CONS SORT CODE as CONS SORT CODE 用户类别 01 高压 02 低压非居民 03 低压居民 nvl SUM a rcvbl flow RCVBL AMT 0 nvl SUM a rcvbl flow DISPOSE AMT 0 as RCVBL DISPOSE 欠费 收妥 24 from a rcvbl flow c cons c acct c payment rela where a rcvbl flow CONS NO c cons CONS NO and c cons cons id c payment rela cons id and c cons org no c payment rela org no and c payment rela acct id c acct acct id and a rcvbl flow ORG NO like 614074125 and C CONS ORG NO like 61407 and a rcvbl flow AMT TYPE 04 and a rcvbl flow RCVBL YM 201310 and a rcvbl flow RCVBL YM 201310 and A RCVBL FLOW SETTLE FLAG 03 and a rcvbl flow INVISIBLE FLAG is null OR a rcvbl flow INVISIBLE FLAG 0 group by a rcvbl flow CONS NO c cons CONS NAME c cons ELEC ADDR a rcvbl flow RCVBL YM a rcvbl flow STATUS CODE a rcvbl flow PAY MODE c cons elec type code c acct MAIN CONS NO c acct pay no a rcvbl flow amt type c cons ORG NO c cons MR SECT NO HAVING 1 1 and nvl SUM a rcvbl flow RCVBL AMT 0 nvl SUM a rcvbl flow RCVED AMT 0 0 25 生产环境真实执行计划 生产环境真实执行计划 2 导致效率低下的原因 导致效率低下的原因 IDX A RCVBL FLOW CONS NO 索引统计信息过期 在 EPM SN A RCVBL FLOW 表的 ORG NO 字段上缺少索引 导致了该表的全表扫描 从而导致性能严重下 降 建议方案 建议方案 在 EPM SN A RCVBL FLOW 表的 ORG NO 字段上创建普通索引 同时对该表和索引进行统计信息的搜集 Create index epm sn idx rcvbl flow org on EPM SN A RCVBL FLOW ORG NO Exec dbms stats gater table stats EPM SN A RCVBL FLOW estimate percent 60 method opt fo r all columns size repeat no invalidate false cascade true degree 8 原执行效果 原执行效果 每次执行逻辑读 9139 每次执行时间 3s 测试效果 测试效果 26 测试环境下执行计划 测试环境下执行计划 每次逻辑读 1 每次时间 0 01s 测试日期 测试日期 2013 年年 10 月月 25 日日 生产库实际效果 生产库实际效果 每次逻辑读 1 每次时间 0 01s 生产库确认日期 生产库确认日期 2013 年年 10 月月 25 日日 3 Sql 3 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131028 00011 模块名称 模块名称 问题描述 问题描述 1 存在问题的存在问题的 SQL Sql id fj847325tn6ax SELECT COUNT 1 FROM arc e cons prc amt arc e cons snap WHERE arc e cons prc amt CALC ID arc e cons snap CALC ID AND arc e cons snap ORG NO arc e cons prc amt ORG NO AND arc e cons snap ym arc e cons prc amt ym AND ARC E CONS SNAP ORG NO LIKE 614054112 AND arc e cons snap CALC TYPE IN 01 AND arc e cons prc amt YM 201311 AND arc e cons prc amt YM 60 method opt for all columns size repeat no invalidate false cascade true degree 8 原执行效果 原执行效果 测试效果 测试效果 每次逻辑读 1 CBO 评估 cost 1 从测试看前后的执行计划 我们可以看到每次的逻辑读和 cost 的值都成倍下降 测试日期 测试日期 2013 年年 10 月月 28 日日 生产库实际效果 生产库实际效果 每次逻辑读 1 CBO 评估 cost 1 生产库确认日期 生产库确认日期 2013 年年 10 月月 28 日日 4 Sql 4 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131028 00012 模块名称 模块名称 问题描述 问题描述 1 存在问题的存在问题的 SQL select a rcvbl flow CONS NO as CONS NO max a rcvbl flow ORG NO as ORG NO sum a rcvbl flow rcvbl amt 28 sum a rcvbl flow rcved amt sum a rcvbl flow rcvbl penalty sum a rcvbl flow rcved penalty as TOTLE a rcvbl flow CONS NO as CONS NO1 nvl max prepay bal 0 as ACCT BAL max CONS NAME as CONS NAME c cons CONS NO as CONS NO2 max c cons ORG NO as ORG NO2 sum rcvbl amt rcved amt as TOTLE FEE sum rcvbl penalty rcved penalty as TOTLE PENALTY c cons MR SECT NO as MR SECT NO from a rcvbl flow c cons a acct bal where a rcvbl flow CONS NO c cons CONS NO and c cons cons no a acct bal cons no and a rcvbl flow amt type in 0202 01 02 05 07 09 12 and a rcvbl flow settle flag in 01 02 AND A RCVBL FLOW RCVBL AMT A RCVBL FLOW RCVED AMT A RCVBL FLOW RCVBL PENALTY A RCVBL FLOW RCVED PENALTY 0 and a acct bal prepay bal 0 and a acct bal rema type in 01 and a acct bal org no like 614094102 and a acct bal org no like 614094102 AND A RCVBL FLOW RCVBL YM 60 method opt fo r all columns size repeat no invalidate false cascade true degree 8 原执行效果 原执行效果 29 生产环境下执行计划 生产环境下执行计划 每次逻辑读 136747 每次执行时间 1 83 测试效果 测试效果 每次逻辑读 84 每次执行时间 0 01s 30 测试日期 测试日期 2013 年年 10 月月 28 日日 生产库实际效果 生产库实际效果 每次逻辑读 84 每次执行时间 0 01s 生产库确认日期 生产库确认日期 2013 年年 10 月月 28 日日 5 Sql 5 所属函数或存储过程名称 所属函数或存储过程名称 PRC DELETE HUIFANG YK 编号 编号 XA 20131028 00017 模块名称 模块名称 问题描述 问题描述 1 存在问题的存在问题的 SQL Schema Name EPC SN update epc sn s 95598 wkst a set a accept mode 01 where a accept mode is null 2 导致效率低下的原因 导致效率低下的原因 该 sql 的执行计划是选择了对该表的全表扫描 缺少必要索引 导致执行效率低下 建议方案 建议方案 我们查看 accept mode 字段为 null 的值非常少 所以在该字段上创建一个和常量进行组合的组合索引 原执行效果 原执行效果 31 测试效果 测试效果 32 未建索引前 执行时间为 5s cost 值为 5995 逻辑读为 26983 创建索引之后 执行时间为 0 02s cost 值为 2 逻辑读为 14 执行效率提升了 200 多倍 测试日期 测试日期 2013 年年 10 月月 28 日日 生产库实际效果 生产库实际效果 执行时间为 5s cost 值为 5995 逻辑读为 26983 生产库确认日期 生产库确认日期 2013 年年 10 月月 28 日日 6 Sql 6 所属函数或存储过程名称 所属函数或存储过程名称 PRC DELETE HUIFANG YK 33 编号 编号 XA 20131028 00018 模块名称 模块名称 问题描述 问题描述 1 存在问题的存在问题的 SQL INSERT INTO EPM READ SA WORKTASK KF BAK SELECT FROM EPSA SN SA WORKTASK T WHERE T KEYDATA ID B1 AND T WORKTASK NAME LIKE 业扩报装回访 DELETE FROM EPSA SN SA WORKTASK T WHERE T KEYDATA ID B1 AND T WORKTASK NAME LIKE 业扩报装回访 2 导致效率低下的原因 导致效率低下的原因 经查询 该表大小为 232m 由于缺少必要索引 所以导致查询该表使用了全表扫描 导致了大量逻辑 和物理读 从而使该 sql 的性能大大降低 建议方案 建议方案 我们查看该表的数据基数 SQL select count count distinct KEYDATA ID from EPSA SN SA WORKTASK COUNT COUNT DISTINCTKEYDATA ID 853695 811120 查看该字段的选择性 SQL select 811120 853695 from dual 811120 853695 950128559 通过以上可以看出改字段的选择性很高 但是该字段上并未创建索引 建议创建索引 Create index epsa sn idx SA WORKTASK on EPSA SN SA WORKTASK KEYDATA ID 搜集统计信息 如果搜集统计信息 数据库会使用动态采用功能 这样会消耗资源 Exec dbms stats gather table stats EPSA SN SA WORKTASK estimate percent 100 method opt for all columns size repeat cascade true no invalidate false degree 4 7 Sql 7 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131028 00018 模块名称 模块名称 34 问题描述 问题描述 1 存在问题的存在问题的 SQL SELECT DISTINCT b user id b real name c dept name d org name e max login time login time FROM sa log login a sa user b sa dept c sa org d SELECT user name MAX login time max login time FROM sa log login GROUP BY user name e WHERE a user name b user name AND a user name e user name AND b dept id c dept id AND c org no d org no AND a login time to date 2013 01 01 yyyy mm dd AND a login time V FEE DAY FIRST AND B SEND DATE 100 METHOD OPT FOR ALL COLUMNS SIZE REPEAT CASCADE TRUE DEGREE 4 exec dbms stats gather table stats EPM SN D IO TASK ESTIMATE PERCENT 100 METHOD OPT FO R ALL COLUMNS SIZE REPEAT CASCADE TRUE DEGREE 4 搜集统计信息的时候 对于小表我们一般的采样率是 100 同时对那些已经存在直方图的字段进行搜集 直方图 同时对表上的索引也进行统计信息的搜集 或者直接添加 hint 来进行固定执行计划 select leading d dist task use nl d dist task d io task d dist task EQUIP NUM AS COUNT 0 AS ALREADY NUM d io task task id AS TASK ID d dist task equip categ AS EQUIP CATEG sa d flow item rela id AS APP NO from D DIST TASK D IO TASK SA D FLOW ITEM WHERE d dist task det id 1 and d dist task RCV DEPT NO 6140341 变量 AND d dist task task id d io task rela id and d io task task id sa d flow item task id 由于数据库中没有对表和索引进行定时统计信息搜集的任务 所以最好要把该执行计划固定 通过 hint 这种方式需要修改应用程序代码 原执行效果 原执行效果 每次执行产生逻辑读 62817455 每次执行时间在 5 6 分钟 测试效果 测试效果 Comment u7 计量资产管理 41 生产环境真实执行计划 生产环境真实执行计划 测试日期 测试日期 2013 年年 10 月月 24 日日 生产库实际效果 生产库实际效果 每次执行 0 7S 每次逻辑读 68214 从前后的执行计划中看到 执行时间从原来的 5 6 分钟 到目前的 0 7s 逻辑读从 62817455 降低到 68214 性能的到了极大的提升 生产库确认日期 生产库确认日期 2013 年年 10 月月 24 日日 4 Sql 4 所属函数或存储过程名称 所属函数或存储过程名称 编号 编号 XA 20131024 00002 模块名称 模块名称 计量资产管理 问题描述 问题描述 1 存在问题的存在问题的 SQL sql id 8tu81ynfa8bn2 SELECT 42 FIRST ROWS FROM SELECT t ROWNUM AS RN2 FROM SELECT e rs log RS ID AS RS ID e rs log APP CODE AS APP CODE e rs log CONS ID AS CONS ID e rs log ORG NO AS ORG NO e rs log RS FLAG AS RS FLAG e rs log RS DATE AS RS DATE e rs log ERR DATE AS ERR DATE e rs log RS REMARK AS RS REMARK e rs log MERGE FLAG AS MERGE FLAG e rs log ACCT MERGE MON AS ACCT MERGE MON e rs log MERGE MON AS MERGE MON e rs log PF FLAG AS PF FLAG e rs log TL FLAG AS TL FLAG e rs log MR UPD FLAG AS MR UPD FLAG e rs log ORGN PRC CODE AS ORGN PRC CODE e rs log ORGN PRC VN AS ORGN PRC VN e rs log TR BGN AS TR BGN e rs log TR END AS TR END e rs log H AMT HANDLE MODE AS H AMT HANDLE MODE e rs log CALC TIMES AS CALC TIMES e rs log EFFECT FLAG AS EFFECT FLAG e rs log OLD CALC ID AS OLD CALC ID e rs log APPLY TYPE AS APPLY TYPE e rs log APPLY STATUS AS APPLY STATUS e rs log CONS NO AS CONS NO e rs log CONS NAME AS CONS NAME e rs log ELEC ADDR AS ELEC ADDR c cons MR SECT NO AS MR SECT NO SELECT sa org ORG NAME FROM sa org WHERE org no e rs log org no AS ORG NAME e rs log POLICY FLAG AS POLICY FLAG e rs log CUR PRC CODE AS CUR PRC CODE e rs log CUR PRC VN AS CUR PRC VN AS APP NO AS RELA APP NO e rs log OLD CALC TYPE AS OLD CALC TYPE e rs log OLD CALC TIMES AS OLD CALC TIMES e rs log APPLY MAN AS APPLY MAN SELECT SA USER REAL NAME FROM SA USER WHERE E RS LOG APPLY MAN SA USER USER ID AS APPLY NAME e rs log APPLY DATE AS APPLY DATE e rs log APP RS PQ AS APP RS PQ e rs log APP RS AMT AS APP RS AMT 0 AS T SETTLE PQ 0 AS T AMT 43 AS IS ARC SELECT s prop list name FROM E RS SORT RELA t sa prop list s WHERE t rs id e rs log rs id AND t rs type 0 AND s PROP TYPE ID mistake type code AND s prop list id t type code AS TYPE NAME 1 SELECT s prop list name FROM E RS SORT RELA t sa prop list s WHERE t rs id e rs log rs id AND t rs type 2 AND s PROP TYPE ID fault level code AND s prop list id t type code AS TYPE NAME 2 SELECT MAX REAL NAME FROM SA USER R OPER ACTIVITY C CONS WHERE USER ID R OPER ACTIVITY OPERATOR NO AND R OPER ACTIVITY ACT CODE 03 AND R OPER ACTIVITY MR SECT NO C CONS MR SECT NO AND C CONS CONS NO E RS LOG CONS NO AND C CONS ORG NO LIKE SUBSTR e rs log org no 1 5 AS REAL NAME SELECT MAX REAL NAME FROM SA USER R OPER ACTIVITY C CONS WHERE USER ID R OPER ACTIVITY OPERATOR NO AND R OPER ACTIVITY ACT CODE 07 AND R OPER ACTIVITY MR SECT NO C CONS MR SECT NO AND C CONS CONS NO E RS LOG CONS NO AND C CONS ORG NO LIKE SUBSTR e rs log org no 1 5 AS CHECKER REAL NAME AS SEND DATE FROM e rs log c cons WHERE e rs log cons no c cons cons no AND e rs log app code NOT IN SELECT a app code FROM e rs log a r plan b WHERE a app code b rela app no AND a org no b org no AND a apply status 9 AND a apply status 9 OR A APPLY STATUS9 OR A APPLY STATUS 9 AND E RS LOG ORG NO LIKE 614014201 AND C CONS ORG NO LIKE 61401 t WHERE ROWNUM 0 2 导致效率低下的原因 导致效率低下的原因 经查看其原始执行计划 发现其 CBO 选择的执行计划不是最优的 建议方案 建议方案 修改 sql 使用 hint use nl e rs log c cons 强制其走嵌套循环 SELECT FIRST ROWS FROM SELECT t ROWNUM AS RN2 FROM SELECT use nl e rs log c cons e rs log RS ID AS RS ID e rs log APP CODE AS APP CODE e rs log CONS ID AS CONS ID e rs log ORG NO AS ORG NO e rs log RS FLAG AS RS FLAG e rs log RS DATE AS RS DATE e rs log ERR DATE AS ERR DATE e rs log RS REMARK AS RS REMARK e rs log MERGE FLAG AS MERGE FLAG e rs log ACCT MERGE MON AS ACCT MERGE MON e rs log MERGE MON AS MERGE MON e rs log PF FLAG AS PF FLAG e rs log TL FLAG AS TL FLAG e rs log MR UPD FLAG AS MR UPD FLAG e rs log ORGN PRC CODE AS ORGN PRC CODE e rs log ORGN PRC VN AS ORGN PRC VN e rs log TR BGN AS TR BGN e rs log TR END AS TR END e rs log H AMT HANDLE MODE AS H AMT HANDLE MODE e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论