遇到 Form 性能问题怎么办 performance issue
性能问题是比較复杂的问题. 一般由performance team 负责, 可是常见的情况是, 我们 INV team 定义的 view 不好, 导致查询性能较差. 这个必须由产品组和 performance team 一起来攻克了.
遇到性能问题的话, 几个经常使用的分析方法:
首先要找出性能较差的SQL, 这个要收集SQL trace, 然后转成 tkprof 文件来看.
把SQL 放到 pl/sql developer 里面, 查看运行计划. 非常多时候问题出在没有使用 index, 而是全表扫描了.
依照以下的步骤, 连接sqlplus, 一步一步运行, 生成 SQL trace 和 tkprof 文件. 里面会有更具体的信息.
BEGIN
mo_global.set_policy_context('S', 204);
FND_GLOBAL.APPS_INITIALIZE (
1068
,56229
,724
);
END; alter session set max_dump_file_size='UNLIMITED';
alter session set tracefile_identifier='APPSPERF';
alter session set events '10046 trace name context forever, level 12';
alter session set statistics_level = 'ALL'; ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';
select USERENV('LANG') from dual;
declare binds like below variable B1 number;
variable B2 number;
variable B3 number;
variable B4 varchar2(50);
variable B5 number;
variable B6 number; 6. Assign values to binds begin
:B1 := 2666;
:B2 := 2666;
:B3 := 2666;
:B4 := 'VENDOR';
:B5 := 8617;
:B6 := 639187;
end;
/ 7. Execute the test_SQL.sql WITH BIND VARIABLES (with :B1, :B2)
8. exec dbms_session.reset_package;
9. exit completely from the sqlplus prompt.
10. SELECT value FROM v$parameter WHERE name ='user_dump_dest';
go to this Dir and find (ls *APPSPERF*) --generated recently
11. Generate the tkprof of the trace generated with explain option.
12. provide TRACE,TKPROF and SQLTXTRACT(215187.1) to review it further.
----------------------------------------------------2014-06-07 更新
这里讨论一下 tkprof 文件怎么看.
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
801471 801471 801471 FILTER (cr=22258976 pr=56 pw=0 time=1382717063 us)
801471 801471 801471 FILTER (cr=22258973 pr=56 pw=0 time=1381082823 us)
801471 801471 801471 NESTED LOOPS (cr=22258973 pr=56 pw=0 time=1380590019 us)
859012 859012 859012 NESTED LOOPS (cr=23796 pr=45 pw=0 time=1831829 us cost=38 size=160 card=1)
1701 1701 1701 NESTED LOOPS (cr=2750 pr=0 pw=0 time=110268 us cost=19 size=122 card=1)
1701 1701 1701 NESTED LOOPS (cr=1037 pr=0 pw=0 time=64700 us cost=17 size=204 card=2)
1701 1701 1701 NESTED LOOPS (cr=1027 pr=0 pw=0 time=31038 us cost=13 size=324 card=4)
4 4 4 TABLE ACCESS BY INDEX ROWID MTL_CC_SCHEDULE_REQUESTS (cr=4 pr=0 pw=0 time=180 us cost=4 size=106 card=2)
4 4 4 INDEX RANGE SCAN MTL_CC_SCHEDULE_REQUESTS_N1 (cr=3 pr=0 pw=0 time=155 us cost=3 size=0 card=1)
1701 1701 1701 TABLE ACCESS BY INDEX ROWID MTL_ONHAND_QUANTITIES_DETAIL (cr=1023 pr=0 pw=0 time=30010 us cost=7 size=56 card=2)
1769 1769 1769 INDEX RANGE SCAN MTL_ONHAND_QUANTITIES_N4 (cr=45 pr=0 pw=0 time=5797 us cost=2 size=0 card=6)
1701 1701 1701 TABLE ACCESS BY INDEX ROWID MTL_ITEM_LOCATIONS (cr=10 pr=0 pw=0 time=26007 us cost=1 size=21 card=1)
1701 1701 1701 INDEX UNIQUE SCAN MTL_ITEM_LOCATIONS_U1 (cr=9 pr=0 pw=0 time=12782 us cost=0 size=0 card=1)
1701 1701 1701 TABLE ACCESS BY INDEX ROWID MTL_SYSTEM_ITEMS_B (cr=1713 pr=0 pw=0 time=38392 us cost=1 size=20 card=1)
1701 1701 1701 INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_B_U1 (cr=9 pr=0 pw=0 time=13686 us cost=0 size=0 card=1)
859012 859012 859012 INDEX RANGE SCAN MTL_SERIAL_NUMBERS_N2 (cr=21046 pr=45 pw=0 time=1710013 us cost=3 size=0 card=123)
801471 801471 801471 TABLE ACCESS BY INDEX ROWID MTL_SERIAL_NUMBERS (cr=22235177 pr=11 pw=0 time=1375657161 us cost=19 size=38 card=1)
这是一个典型的 tkprof 文件中面的运行计划. 我们能够看到这是有规律的缩进的. 看运行计划的原则是, 从中间往两边看.
首先看中间缩进最多的那一行: 这里用 index 訪问了 MTL_CC_SCHEDULE_REQUESTS 这个表, 选择了当中的 4 行.
4 4 4 TABLE ACCESS BY INDEX ROWID MTL_CC_SCHEDULE_REQUESTS (cr=4 pr=0 pw=0 time=180 us cost=4 size=106 card=2)
4 4 4 INDEX RANGE SCAN MTL_CC_SCHEDULE_REQUESTS_N1 (cr=3 pr=0 pw=0 time=155 us cost=3 size=0 card=1)
然后通过 MOQD 的 index 訪问了 MOQD, 选取了1701 行:
1701 1701 1701 TABLE ACCESS BY INDEX ROWID MTL_ONHAND_QUANTITIES_DETAIL (cr=1023 pr=0 pw=0 time=30010 us cost=7 size=56 card=2)
1769 1769 1769 INDEX RANGE SCAN MTL_ONHAND_QUANTITIES_N4 (cr=45 pr=0 pw=0 time=5797 us cost=2 size=0 card=6)
依据同样的规律, 终于訪问了 MTL_SERIAL_NUMBERS 这个表, 选取了801471 行.
859012 859012 859012 INDEX RANGE SCAN MTL_SERIAL_NUMBERS_N2 (cr=21046 pr=45 pw=0 time=1710013 us cost=3 size=0 card=123)
801471 801471 801471 TABLE ACCESS BY INDEX ROWID MTL_SERIAL_NUMBERS (cr=22235177 pr=11 pw=0 time=1375657161 us cost=19 size=38 card=1)
终于的结果就是第一行 FILTER 返回的行数, 也就是说, SQL 里面的这个FILTER 终于选择了801471 行:
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
801471 801471 801471 FILTER (cr=22258976 pr=56 pw=0 time=1382717063 us)
从每一行后面的 time 我们能够看出来花在这一行上的时间有多少. 这里我们看到上面这个 FILTER 总共花了接近1400 秒, 20 分钟的样子. 非常久的时间.
上面举的样例是查询条件写的不好, 导致查询时间太长. 以下的样例是查询条件没有问题, 可是 index 建的不好, 导致没有使用索引而花了太多时间;
1002 1002 1002 TABLE ACCESS BY INDEX ROWID RCV_TRANSACTIONS (cr=34491 pr=34491 pw=0 time=140386031 us cost=13 size=274 card=1)
124770 124770 124770 INDEX RANGE SCAN RCV_TRANSACTIONS_N4 (cr=524 pr=524 pw=0 time=12869366 us cost=3 size=0 card=50)
我们看到, RT 这个表取出的行数是1002 行, 可是索引訪问了124770 行, 导致浪费了非常多时间. 因此须要依据查询条件, 又一次建立索引, 使索引訪问的行数和最后得到的行数接近甚至同样.
推断性能不好的还有一个方法是看 tkprof 文件里的
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.22 0.21 0 0 0 0
Execute 1 1.84 1.83 0 0 0 0
Fetch 3 1106.09 1113.99 811 128069 0 4
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 5 1108.15 1116.04 811 128069 0 4
我们看到query 的行数 128069 比终于选取的行数 4 多了太多倍. 这是性能不好的一个标志.
上面两个样例, 第一个是查询条件写的不好, 查询了太多行. 这个是跟业务相关的代码, 须要我们自己去改动. 第二个样例中, 查询条件没有问题, 是索引建立的有问题, 须要依据须要又一次建立索引.
假设不知道如何建索引的话, 发邮件给performance team: appsperf_us@oracle.com. 他们会给你合适的建议.
Drop index PO.RCV_TRANSACTIONS_N4;
Create index PO.RCV_TRANSACTIONS_N4 on RCV_TRANSACTIONS(PO_HEADER_ID,VENDOR_ID);
遇到 Form 性能问题怎么办 performance issue的更多相关文章
- 页面性能监控之performance
页面性能监测之performance author: @TiffanysBear 最近,需要对业务上的一些性能做一些优化,比如降低首屏时间.减少核心按钮可操作时间等的一些操作:在这之前,需要建立的就是 ...
- .NET Core 性能分析: xUnit.Performance 简介
xunit-performance 是xUnit的一个扩展, 使用它可以对.NET Core项目进行性能测试. 官网:https://github.com/Microsoft/xunit-perfor ...
- After 2 years, I have finally solved my "Slow Hyper-V Guest Network Performance" issue. I am ecstatic.
Edit - It should be known that I was initially researching this issue back in 2012 and the solution ...
- 优化脚本性能 Optimizing Script Performance
This page gives some general hints for improving script performance on iOS. 此页面提供了一些一般的技巧,提高了在iOS上的脚 ...
- iOS-监听原生H5性能数据window.performance
WebKit-WKWebView iOS8开始苹果推荐使用WKWebview作为H5开发的核心组件,以替代原有的UIWebView,以下是webkit基本介绍介绍: 介绍博客 Webkit H5 - ...
- Dynamics CRM Performance Issue when CRM Forms Opening
事情发生在Dynamics CRM 8.2.2版本,客户新升级到这个版本几个月的时间. 突然有一天,客户反映为什么我们打开CRM Form页面的时候loading的时间这么长呢?大概会需要5-15分钟 ...
- MySQL调优性能监控之performance schema
一.performance_schema的介绍 performance:性能 schema:图(表)示,以大纲或模型的形式表示计划或理论. MySQL的performance schema 用于监控M ...
- 前端性能监控之performance
如果我们想要对一个网页进行性能监控,那么使用window.performance是一个比较好的选择. 我们通过window.performance可以获取到用户访问一个页面的每个阶段的精确时间,从而对 ...
- Form_通过Trace分析Concurrent和Form性能和异常详解(案例)
2014-06-21 Created By BaoXinjian
随机推荐
- vue反向代理解决跨域
问题描述 在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包的时候,我们在本地启动服务器后,比如本地开发服务下是 http ...
- 利用js自带函数 数组去重
<script> ,,]; //原数组 var a=[]; //定义空数组 arr.map(function(x){ //用 map 遍历数组 ){ //如果当前值没有存在空数组中 a.p ...
- GDOI2016酱油记(补发)
这篇酱油记是前年发在MCHacker一个叫code-hub的博客上的(已崩),现在来补发一下... GDOI2016扯淡(爆零记) 大家好,我是巨弱DCDCBigBig,在五一期间和一群神牛去考GDO ...
- luogu P4430 小猴打架(prufer编码与Cayley定理)
题意 n个点问有多少种有顺序的连接方法把这些点连成一棵树. (n<=106) 题解 了解有关prufer编码与Cayley定理的知识. 可知带标号的无根树有nn-2种.然后n-1条边有(n-1) ...
- python 正则表达式与re模块
一.正则表达式 用途 用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. #### 简单地说 就是用于字符串匹配的 字符组 在 ...
- Myeclipse学习总结(8)——Eclipse实用操作
工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个"器".本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行 ...
- 很好的DP思路,字符串比较次数
题目: https://leetcode.com/problems/distinct-subsequences/?tab=Description 一般没有明显思路的情况下,都要想想DP,用下Divid ...
- RubyMine2017破解
RubyMine2017破解 学习了:https://www.7down.com/soft/172903.html 激活的时候选择 license server; 输入如下地址激活: http://i ...
- 【HDU-4614】Vases and Flowers(线段树双查询)
11946317 2014-10-23 09:08:28 Accepted 4614 437MS 2348K rid=11946317" target="_blank" ...
- [Project Euler 429] Sum of squares of unitary divisors(数论)
题目链接:https://projecteuler.net/problem=429 题目: 我们称 N 的约数 d 为特殊的当且仅当 gcd(d, n / d) = 1. 设 S(n) 为 n 所有特 ...