51Testing软件测试论坛

标题: [你问我来答第30期]:SQL调校(已结束) [打印本页]

作者: lsekfe    时间: 2013-1-4 09:47
标题: [你问我来答第30期]:SQL调校(已结束)
[attach]83009[/attach]

论坛ID:makinstall
真实姓名:马利伟
擅长技术领域:性能测试,数据库调优,BI
现任公司:分众传媒
现任职位:测试主管


工作经验:
分众传媒   测试主管     
阿里金融   高级测试工程师            
意贝斯特   项目经理兼测试主管   
百岁-庄臣  仓库经理助理               
德国汉高   采购实习
                  
项目经验:
享乐SNS 网站
分众触媒户外广告小屏系统
淘宝订单贷款
阿里小额贷款合营贷款平台
阿里金融网关系统
宝洁中国移动营销平台O2 BI 系统
宝洁中国报表系统
宝洁中国移动访销系统
可口可乐中国实业有限公司CCCIL移动访销系统
汇源果汁移动访销系统
南孚电池移动销售系统
宝洁HFSI IZOOM Interface
mysteel我的钢铁网 手机平台
庄臣SAP系统亚太实施

[attach]83010[/attach]

各位会员可以在01月10日前以回帖的方式向客座专家提问。

(请大家围绕本期客座专家的擅长领域进行提问、探讨)

客座专家将在01月11日—01月31日为大家集中解答。

机会难得,欢迎大家踊跃提问!




作者: lsekfe    时间: 2013-1-4 09:48
新年新一期,大家可以踊跃提问了哦!
作者: power911    时间: 2013-1-4 10:43
SQL调校  很好的专题,顶
回头收集下问题
作者: zhsh1203    时间: 2013-1-4 10:47
回复 2# lsekfe


你好!想知道,数据库调优要怎么做,才能做好?
作者: hyd_bpmf    时间: 2013-1-4 10:53
新年新一期,顶一下
作者: femir    时间: 2013-1-4 11:48
sql调优的基本流程和检测方法大致是怎么样的,现在我一般是通过检查表的索引,sq语句听过分表查询来做,感觉很基础,不能发现隐藏的隐患sql,很难抓出来,请各位指点
作者: jiazurongyu    时间: 2013-1-4 12:11
新年新一期,顶一下

Sql语句的执行效率和关占语句对于推进cpu和硬解析外,还有什么其他可以做的。
目前是有很多参数可以通过sql trace可以看到,但是会如何执行调优呢
作者: piaolingxue423    时间: 2013-1-4 12:56
可不可以讲讲你性能调优的经验
作者: haojianshuai    时间: 2013-1-4 17:51
顶起~~
作者: 谣子    时间: 2013-1-4 18:34
回复 2# lsekfe


        可以不可以问一个其他的问题啊?我是在校学生。明天想去测试行业实习,现在应该做些什么啊?各位前辈请指教下……
作者: jerrytest    时间: 2013-1-4 19:52
你好!在程序方面,性能测试人员如何对响应时间长的service去定位到更深层的信息给开发?在数据库方面,SQL调优大致占到总体数据库调优的多少比例?
作者: 3580609999    时间: 2013-1-5 08:18

作者: 没翅膀的飞鱼    时间: 2013-1-5 08:42
很不错的话题,公司暂时没有对数据库进行相关测试,请问下:想对这块增加相关测试,该如何入手------
作者: lei198643    时间: 2013-1-5 09:22
1.脚本时url方式录制,加了检查点 web_reg_find;
2.脚本回放是,没有任何问题,检查点也检测成功;
3.场景运行中一个虚拟用户,脚本运行没有任何问题;
4.场景运行中大于一个虚拟用户运行,报错Action.c(2117): Error -26366: "Text=2012/11/30 16:54:00" not found for web_reg_find;
请高手解惑,我找不到问题所在,在线等,谢谢!
作者: yaya1127    时间: 2013-1-5 09:34
服务返回的结果为:<input type="hidden" id="vsid" name="vsid" value="2d2ff54f-cf27-4038-a278-045bb15125b6" />
关联的地方有:"Name=vsid", "Value=2d2ff54f-cf27-4038-a278-045bb15125b6", ENDITEM,
"URL=http://192.168.1.39:8080/erc/vehicle/vehicle!edit.action?sid=2d2ff54f-cf27-4038-a278-045bb15125b6",等
请问关联函数应该怎么写?

我是这么写的:web_reg_save_param_ex(
                "ParamName=vsid",
                "LB=name=\"vsid\" value=\"",
                "RB=\" />",
                "Ordinal=1",
                SEARCH_FILTERS,
                "ContentType=text/html",
                LAST);

提示:No match found for the requested parameter "vsid". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size          [MsgId: MERR-35061]

请教各位一下!谢谢!
作者: makinstall    时间: 2013-1-5 15:46
新年新一期,顶一下

Sql语句的执行效率和关占语句对于推进cpu和硬解析外,还有什么其他可以做的。
目前 ...
jiazurongyu 发表于 2013-1-4 12:11



  SQL调校是调优改进型能的一个方面,硬解析和CPU使用是其中一个方面,但还有索引,锁机制,内存使用方式,硬盘扫描方式,缓存机制,数据库配置,文件部署等几个方面可以进行优化。
作者: makinstall    时间: 2013-1-5 15:46
新年新一期,顶一下

Sql语句的执行效率和关占语句对于推进cpu和硬解析外,还有什么其他可以做的。
目前 ...
jiazurongyu 发表于 2013-1-4 12:11



  SQL调校是调优改进型能的一个方面,硬解析和CPU使用是其中一个方面,但还有索引,锁机制,内存使用方式,硬盘扫描方式,缓存机制,数据库配置,文件部署等几个方面可以进行优化。
作者: makinstall    时间: 2013-1-5 15:46
新年新一期,顶一下

Sql语句的执行效率和关占语句对于推进cpu和硬解析外,还有什么其他可以做的。
目前 ...
jiazurongyu 发表于 2013-1-4 12:11



  SQL调校是调优改进型能的一个方面,硬解析和CPU使用是其中一个方面,但还有索引,锁机制,内存使用方式,硬盘扫描方式,缓存机制,数据库配置,文件部署等几个方面可以进行优化。
作者: makinstall    时间: 2013-1-5 15:49
你好!在程序方面,性能测试人员如何对响应时间长的service去定位到更深层的信息给开发?在数据库方面,SQL ...
jerrytest 发表于 2013-1-4 19:52



    1。一般都是通过各类监控工具来进行定位
    2。一般数据库问题主要由 表结构,SQL问题,锁机制,数据库配置等几大方面
作者: makinstall    时间: 2013-1-5 15:49
你好!在程序方面,性能测试人员如何对响应时间长的service去定位到更深层的信息给开发?在数据库方面,SQL ...
jerrytest 发表于 2013-1-4 19:52



    1。一般都是通过各类监控工具来进行定位
    2。一般数据库问题主要由 表结构,SQL问题,锁机制,数据库配置等几大方面
作者: fenlantianji    时间: 2013-1-6 09:20
本帖最后由 fenlantianji 于 2013-1-6 16:47 编辑

请问你用到的数据库,如oracle、sqlserver 、db2的监控工具都有那些,请推荐一些监控工具
作者: makinstall    时间: 2013-1-6 14:39
请问你用到的数据库,如oracle、sqlserver 、db2的监控工具都有那些,请推荐一些监控工作
fenlantianji 发表于 2013-1-6 09:20



很多   1.靠调用DB 管理语句
          2. 数据库默认的管理工具, ORACLE 的EM , SQLSERVER的 performance tool 等
          3. 第三方   如 nomon , spotlight  等很多
作者: makinstall    时间: 2013-1-6 20:41
回复  lsekfe


你好!想知道,数据库调优要怎么做,才能做好?
zhsh1203 发表于 2013-1-4 10:47


  引用一位行业人士的总结,

      系统性能问题基本就出在:

       1.日益增长的数据请求与网络带宽的矛盾

       2.日益增长的数据运算与硬件平台的矛盾

       3.日益增长的数据请求与数据库的矛盾

       4.日益增长的数据请求与物理IO的矛盾

网络带宽可以适当解决,硬件之CPU,内存也可以适当解决;唯有物理IO一直不遵从摩尔定律,一直徘徊在2位数。物理读写的磁盘成为了

所有系统瓶颈的源头,找不到原因都可以赖到它的头上,硬盘瓶颈成为放之四海皆成立的定律。

      即然事实不可改变,那我们只有适应,想尽办法去避免大量的IO操作,当然我们也不忘采用各种手段提高IO水平( 条带、SDD、内存库等),

但这都是在我们优化好程序及配置之后才做的事,优化程序及配置是最直接、最有效、最经济的手段,也是程序人最大的骄傲。

      下面来分析一下性能问题出现的地方:

       1.网络瓶颈,如带宽,流量等形成的网络环境
       2.应用服务瓶颈,如中间件的基本配置
       3.系统瓶颈:应用服务器,数据库服务器以及客户机的CPU,内存,硬盘等配置
       4.数据库瓶颈

       5.应用程序本身瓶颈

     以下不考虑网络及硬件升级(花钱解决的事就不是事),下面要讨论的是如何优化IO请求从而达到系统优化

(数据库默认为Oracle,APP默认为Web应用)。

  
   IO请求流程:

    1.APP请求——>2.DB程序处理——>3.内存访问——>4.物理IO(磁盘)

  基于以上路径我们要优化的有四部分

    1.减少APP请求;

    2.提高DB程序性能;

    3.内存使用合理;

    4.物理IO就只有加磁盘条带化,引入新的存储技术(SDD、内存数据库、专门存储设备EXADATA等)



  I.减少APP请求
     避免不必要的数据请求;
     优化业务过程;
     谨慎继承基类,减少不必要的加载;
     避免大对象的引用;
     控制数据连接
     使用缓存
II.提高DB程序性能
    优化物理结构(分区、索引、冗余)
    SQL请求尽可能少、返回最小化
    查询器优化
    避免过载
    单条SQL优化
    并行SQL
    减少资源争用(锁、闩锁、缓存)
III.内存合理使用
    JVM优化
    SGA(缓存高频访问数据)
    PGA(排序、散列)
    AMM(人工干预自动内存管理)
IV.物理IO优化
    条带化
    SDD等存储技术
    数据库数据文件与日志文件存储优化
作者: lyhgq321    时间: 2013-1-7 17:38
回复 23# makinstall


呵呵,总结得不错嘛。
作者: zz45509    时间: 2013-1-7 21:44
弱弱的問下 BI是什麼啊
還有平時工作 只是簡單的增刪改查 以及存儲過程  
沒有涉及到sql調優  
請問如何去接觸調優  或著是 現有項目中的數據庫  該如何去調優
謝謝
作者: 风中落叶    时间: 2013-1-8 10:03
我是一个在校的实习生,我在的公司也是做bi的   我是在公司做性能测试的    作为一名性能测试人员要掌握哪些方面的知识?
作者: zbj793989849    时间: 2013-1-9 12:28
标题: RE: [你问我来答第30期]:SQL调校
老师,请教一下,目前我在公司是负责测试兼并需求,但由于我刚毕业,很多东西都不懂,业务上的或者沟通上,而且也没人专门的指导,因此感觉压力很大,但自身也感觉到,需求应该也要懂一些技术,因此有这么一种想法,就是先转去开发,等技术以及业务上熟悉了,再转去需求,不知这种想法是否正确,有些人跟我说女孩子不要去开发了,有机会接触需求,就慢慢学习,说我是缺少经验而已,接触多了就好了。但我不这么认为,我还是觉得需求跟测试都需要了解一些技术。您可否给个建议!谢谢!
作者: 待到花染红笑靥    时间: 2013-1-9 21:24
回放脚本时可以看到所有的回放日志,回放完毕瞬间,日志的大部分都丢失了,求高手指点。
作者: 云层    时间: 2013-1-12 12:53
我是来顶马总的。。。
作者: wjtest    时间: 2013-1-15 15:14
您好:请问 BI  和web测试 更多的要注意什么,安全测试方面 ,业务方面还是其他。。。
作者: wjtest    时间: 2013-1-15 15:16
貌似问错了。。跑题了 那问下 mysql ,oracle 、 存储过程 应该怎么调优
作者: kingsang    时间: 2013-1-16 11:37
做测试这么久,性能测试感觉还停留在操作工具的水平,怎么来综合提升性能测试能力咧
作者: yap0813    时间: 2013-1-16 12:57
专家,我性能测试以后同一个场景,trans response time里面的平均响应时间和summary报告里的平均响应时间相差很大啊,你能告诉我是怎么回事吗
作者: bichenlu    时间: 2013-1-18 10:33
请问下一般进行sql调优的步骤是什么,如何判断某些sql需要进行调优,对每个sql是否有个衡量的标准。
如果针对一个系统进行性能测试,在甲方没有提供相关资料的情况下,如果定义性能指标,是否有相关性能指标文档,能否共享呢。
一般系统的性能瓶颈是什么呢,如何突破。


请老师解答,多谢。
作者: 话说我爱你    时间: 2013-1-18 11:33
如何进行数据库调优呢?需要对数据库调优掌握哪些知识呢?
作者: cncnily    时间: 2013-1-18 16:34
这期貌似是大多人的弱项 坐看砖家分析解答。
作者: makinstall    时间: 2013-1-22 14:59
本帖最后由 makinstall 于 2013-1-22 23:46 编辑

@风中落叶
  作为一个性能测试人员应该对以下有功底:
                                       1.擅长JAVA和C 语言开发能力
                                       2.熟悉下各种协议
                                       3.精通linux unix  windows 等操作系统
                                       4. 持续构建环境工具和流程  如 JENKINS
                                       5. 数据库 和SQL
                                       6.中间件
       个人认为这些是我们成为专家的必经之路,可以关注下我网上的一段视频 性能测试总动员 里面说到各部分的重要性和前景等相关知识
作者: makinstall    时间: 2013-1-22 15:02
老师,请教一下,目前我在公司是负责测试兼并需求,但由于我刚毕业,很多东西都不懂,业务上的或者沟通上, ...
zbj793989849 发表于 2013-1-9 12:28


嗯: 我个人认为  人有两条腿,测试也有 两条腿, 业务是右腿,技术是左腿。没了一条腿会比较难在职业道路这条坑坑洼洼的路上走
作者: makinstall    时间: 2013-1-22 15:04
您好:请问 BI  和web测试 更多的要注意什么,安全测试方面 ,业务方面还是其他。。。
wjtest 发表于 2013-1-15 15:14



    BI 的测试 注重 数据的准确性和逻辑性, 对于BI 个人认为你要对业务熟悉且在大数据量分析方面和数据的精准性方面能有一技之长。是行业的难点
  
    WEB 测试 你指的是手工还是自动化呢? 范围有点广。。。资料很多
作者: makinstall    时间: 2013-1-22 15:06
回复 32# kingsang


     工具操作?  能读利用JAVA 写各种类型的脚本吗? 这个是主要基础 , 不会的话 说明 语言能力还有不到之处
               能对各种业务去分析吗?   不会?那么赶紧去 补业务 架构  操作系统 等等知识。
作者: makinstall    时间: 2013-1-22 15:16
回复 34# bichenlu


   美女的问题很犀利,
1. SQL 调优的步骤,一般对数据库执行比较消耗资源或者引起死锁等瓶颈通过监控工具或者专业的查询瓶颈的代码去定位需要调优的SQL ,如PS的例子

2.对特定的SQL 找到 这条SQL的弊端,根据业务进行针对性的修改

3. 根据修改后的效果进行回归确定其关联效果 是否有改善自己,影响其他的系统瓶颈。

4. 也可以调整 数据库的并发参数 存储的参数  缓冲的命中 内存的使用等等 方式进行调优

PS : exit 和 in的用法1
再来看一下内查询结果集比较大,而外查询较小的时候的情况。

SQL> select /*+ rule */ * from test2
where exists
  2    3        ( select 1 from test1 where test1.object_name = test2.table_name and test1.object_name like 'S%') ;

172 rows selected.

Elapsed: 00:00:00.08

Execution Plan
----------------------------------------------------------
Plan hash value: 833525739

----------------------------------------------
| Id  | Operation          | Name            |
----------------------------------------------
|   0 | SELECT STATEMENT   |                 |
|*  1 |  FILTER            |                 |
|   2 |   TABLE ACCESS FULL| TEST2           |
|*  3 |   INDEX RANGE SCAN | IDX_OBJECT_NAME |
----------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter( EXISTS (SELECT 0 FROM "TEST1" "TEST1" WHERE
              "TEST1"."OBJECT_NAME"=:B1 AND "TEST1"."OBJECT_NAME" LIKE 'S%'))
   3 - access("TEST1"."OBJECT_NAME"=:B1)
       filter("TEST1"."OBJECT_NAME" LIKE 'S%')

Note
-----
   - rule based optimizer used (consider using cbo)


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       4837  consistent gets
          0  physical reads
       2596  redo size
      13642  bytes sent via SQL*Net to client
        506  bytes received via SQL*Net from client
         13  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        172  rows processed

SQL> select /*+ rule */ * from test2
  2  where table_name in
  3        ( select object_name from test1 where object_name like 'S%') ;

172 rows selected.

Elapsed: 00:00:00.12

Execution Plan
----------------------------------------------------------
Plan hash value: 2497755124

-------------------------------------------------------
| Id  | Operation                   | Name            |
-------------------------------------------------------
|   0 | SELECT STATEMENT            |                 |
|   1 |  TABLE ACCESS BY INDEX ROWID| TEST2           |
|   2 |   NESTED LOOPS              |                 |
|   3 |    VIEW                     | VW_NSO_1        |
|   4 |     SORT UNIQUE             |                 |
|*  5 |      INDEX RANGE SCAN       | IDX_OBJECT_NAME |
|*  6 |    INDEX RANGE SCAN         | IDX_TABLE_NAME  |
-------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   5 - access("OBJECT_NAME" LIKE 'S%')
       filter("OBJECT_NAME" LIKE 'S%')
   6 - access("TABLE_NAME"="$nso_col_1")

Note
-----
   - rule based optimizer used (consider using cbo)
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       2214  consistent gets
          0  physical reads
       7556  redo size
      13378  bytes sent via SQL*Net to client
        506  bytes received via SQL*Net from client
         13  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
        172  rows processed

从理论上分析,当内存查询的结果集比较大,而外查询比较小的时候,应该增加in的cost,对于 exists的filter来说,也应该效率有所提高,所以再这种情况下,我们应该看到exists效率更高。但是在实际的测试中,我们可以看到,这两者并不存在明显的性能上的差异,甚至于用in的效果比exists更好。
总结:
1、在CBO模式下,两者效率一致。
2、在RBO模式下,当外层数据集远大于内层数据集时,使用in的效率比较高。
3、在RBO模式下,当外层数据集远小于内层数据集时,两者效率相差不大。
作者: makinstall    时间: 2013-1-22 15:18
如何进行数据库调优呢?需要对数据库调优掌握哪些知识呢?
话说我爱你 发表于 2013-1-18 11:33



    我简单的来说,你要调优
  1。对该数据库的架构比较熟悉
  2。对此系统业务和设计,架构等比较熟悉
  3。对数据库的调优原理很熟悉,扩展开来很多,可以私下找我聊聊
作者: 晓菜瓜    时间: 2013-1-22 15:37
能否给新手推荐几本关于  基础、提高类别的书籍或视频
作者: wjtest    时间: 2013-1-22 16:02
回复 39# makinstall


    目前是黑盒测试
作者: opq133    时间: 2013-1-22 16:31
请问在我测试的时候通过LR的细分图看出server端的耗时很长,client和网络的耗时很长,那么这个时候我该如何去看这个时间主要是耗在了数据库操作上还是服务器处理上呢?LR发送的http请求到服务器,然后服务器发送给数据库服务器,有什么工具可以监控到服务器发送给数据库服务器这之间的耗时情况么(这之间也应该分分网络时间和数据库服务器处理时间吧)?
作者: marsliu    时间: 2013-1-22 21:03
在某群里看到你让大家来这里提问,所以特提问如下:
我们在做oracle性能调优的时候
如何利用awr报告进行问题定位
更准确的说:如何去阅读awr报告
awr的关注点是哪些?
如何减少硬连接?
如何让更多的查询的数据在共享内存,怎样是设置比较合理的?
……
谢谢解答
作者: makinstall    时间: 2013-1-23 12:57
能否给新手推荐几本关于  基础、提高类别的书籍或视频
晓菜瓜 发表于 2013-1-22 15:37



有关书,我把在ROAD论坛上的推荐的基本书给大家分享下:

.工具 Loadrunner11 性能调优实践 by 云层 基础部分+部分进阶

2.OS 鸟哥的linux私房菜.基础学习篇(第三版)
3.调优 oracle性能调优诊断艺术 by-Christian Antognini 人民邮电出版社
4.编程 http://ideone.com/ 编程网上环境
5.基于LINUX的ORACLE 数据库管理
6.基于LINUX的ORACLE 数据库管理 张佳音
7.教你如何成为10G OCP
8. 高性能网站建设进阶指南
等等
想要更多的找我qq  791959906
作者: makinstall    时间: 2013-1-23 13:00
回复  makinstall


    目前是黑盒测试
wjtest 发表于 2013-1-22 16:02


我觉得可以有很多地方入手,测试基本理论,测试用例如何精简有效,敏捷。。。,环境持续构建 测试自动化  单元测试 等等很多方向供你研究
作者: makinstall    时间: 2013-1-23 13:04
请问在我测试的时候通过LR的细分图看出server端的耗时很长,client和网络的耗时很长,那么这个时候我该如何 ...
opq133 发表于 2013-1-22 16:31


可以用日志进行切块化,总时间和 节点时间你就知道了。
然后通过很多监控工具都可以知道某个服务器的内部状态,如SPOTLIGHT 傻瓜级, nmon等,你是OS功底太差,一般来说直接用系统工具就可以得到想要的结果。如 ORACLE 我们可以用 SQL 查询系统视图,也可以用 EM工具,也可以用AWR等报告,也可以用其他第三方监控工具。

多多学习下OS 和中间件吧, 基础补补
作者: makinstall    时间: 2013-1-23 13:08
在某群里看到你让大家来这里提问,所以特提问如下:
我们在做oracle性能调优的时候
如何利用awr报告进行问 ...
marsliu 发表于 2013-1-22 21:03


很高兴,终于有一个专业点的问题。
有关内容很多
AWR 是 Oracle  10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库, AWR 是通过对比两次快,照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分

WORKLOAD REPOSITORY report for
DB Name        DB Id        Instance        Inst num        Release        RAC        Host
ICCI        1314098396        ICCI1        1        10.2.0.3.0        YES        HPGICCI1

        Snap Id        Snap Time        Sessions        Cursors/Session
Begin Snap:        2678        25-Dec-08 14:04:50        24        1.5
End Snap:        2680        25-Dec-08 15:23:37        26        1.5
Elapsed:                 78.79 (mins)                  
DB Time:                 11.05 (mins)                  
DB Time不包括Oracle后台进程消耗的时间。如果DB Time远远小于Elapsed时间,说明数据库比较空闲。
db time= cpu time + wait time(不包含空闲等待) (非后台进程)
说白了就是db time就是记录的服务器花在数据库运算(非后台进程)和等待(非空闲等待)上的时间
DB time = cpu time + all of nonidle wait event time
在79分钟里(其间收集了3次快照数据),数据库耗时11分钟,RDA数据中显示系统有8个逻辑CPU(4个物理CPU),平均每个CPU耗时1.4分钟,CPU利用率只有大约2%(1.4/79)。说明系统压力非常小。

列出下面这两个来做解释:
Report A:
Snap Id Snap Time Sessions Curs/Sess
--------- ------------------- -------- ---------
Begin Snap: 4610 24-Jul-08 22:00:54 68 19.1
End Snap: 4612 24-Jul-08 23:00:25 17 1.7
Elapsed: 59.51 (mins)
DB Time: 466.37 (mins)

Report B:
Snap Id Snap Time Sessions Curs/Sess
--------- ------------------- -------- ---------
Begin Snap: 3098 13-Nov-07 21:00:37 39 13.6
End Snap: 3102 13-Nov-07 22:00:15 40 16.4
Elapsed: 59.63 (mins)
DB Time: 19.49 (mins)
服务器是AIX的系统,4个双核cpu,共8个核:
/sbin> bindprocessor -q
The available processors are: 0 1 2 3 4 5 6 7
先说Report A,在snapshot间隔中,总共约60分钟,cpu就共有60*8=480分钟,DB time为466.37分钟,则:
cpu花费了466.37分钟在处理Oralce非空闲等待和运算上(比方逻辑读)
也就是说cpu有 466.37/480*100% 花费在处理Oracle的操作上,这还不包括后台进程
看Report B,总共约60分钟,cpu有 19.49/480*100% 花费在处理Oracle的操作上
很显然,2中服务器的平均负载很低。
从awr report的Elapsed time和DB Time就能大概了解db的负载。


可是对于批量系统,数据库的工作负载总是集中在一段时间内。如果快照周期不在这一段时间内,或者快照周期跨度太长而包含了大量的数据库空闲时间,所得出的分析结果是没有意义的。这也说明选择分析时间段很关键,要选择能够代表性能问题的时间段。

Report Summary
Cache Sizes
        Begin        End               
Buffer Cache:        3,344M        3,344M        Std Block Size:        8K
Shared Pool Size:        704M        704M        Log Buffer:        14,352K
显示SGA中每个区域的大小(在AMM改变它们之后),可用来与初始参数值比较。
shared pool主要包括library cache和dictionary cache。library cache用来存储最近解析(或编译)后SQL、PL/SQL和Java classes等。library cache用来存储最近引用的数据字典。发生在library cache或dictionary cache的cache miss代价要比发生在buffer cache的代价高得多。因此shared pool的设置要确保最近使用的数据都能被cache。

Load Profile
        Per Second        Per Transaction
Redo size:        918,805.72        775,912.72
Logical reads:        3,521.77        2,974.06
Block changes:        1,817.95        1,535.22
Physical reads:        68.26        57.64
Physical writes:        362.59        306.20
User calls:        326.69        275.88
Parses:        38.66        32.65
Hard parses:        0.03        0.03
Sorts:        0.61        0.51
Logons:        0.01        0.01
Executes:        354.34        299.23
Transactions:        1.18         
% Blocks changed per Read:        51.62        Recursive Call %:        51.72
Rollback per transaction %:        85.49        Rows per Sort:        ########
显示数据库负载概况,将之与基线数据比较才具有更多的意义,如果每秒或每事务的负载变化不大,说明应用运行比较稳定。单个的报告数据只说明应用的负载情况,绝大多数据并没有一个所谓“正确”的值,然而Logons大于每秒1~2个、Hard parses大于每秒100、全部parses超过每秒300表明可能有争用问题。
Redo size:每秒产生的日志大小(单位字节),可标志数据变更频率, 数据库任务的繁重与否。Logical reads:每秒/每事务逻辑读的块数.平决每秒产生的逻辑读的block数。Logical Reads= Consistent Gets + DB Block Gets
Block changes:每秒/每事务修改的块数
Physical reads:每秒/每事务物理读的块数
Physical writes:每秒/每事务物理写的块数
User calls:每秒/每事务用户call次数
Parses:SQL解析的次数.每秒解析次数,包括fast parse,soft parse和hard parse三种数量的综合。 软解析每秒超过300次意味着你的"应用程序"效率不高,调整session_cursor_cache。在这里,fast parse指的是直接在PGA中命中的情况(设置了session_cached_cursors=n);soft parse是指在shared pool中命中的情形;hard parse则是指都不命中的情况。
Hard parses:其中硬解析的次数,硬解析太多,说明SQL重用率不高。每秒产生的硬解析次数, 每秒超过100次,就可能说明你绑定使用的不好,也可能是共享池设置不合理。这时候可以启用参数cursor_sharing=similar|force,该参数默认值为exact。但该参数设置为similar时,存在bug,可能导致执行计划的不优。
Sorts:每秒/每事务的排序次数
Logons:每秒/每事务登录的次数
Executes:每秒/每事务SQL执行次数
Transactions:每秒事务数.每秒产生的事务数,反映数据库任务繁重与否。

Blocks changed per Read:表示逻辑读用于修改数据块的比例.在每一次逻辑读中更改的块的百分比。
Recursive Call:递归调用占所有操作的比率.递归调用的百分比,如果有很多PL/SQL,那么这个值就会比较高。
Rollback per transaction:每事务的回滚率.看回滚率是不是很高,因为回滚很耗资源 ,如果回滚率过高,可能说明你的数据库经历了太多的无效操作 ,过多的回滚可能还会带来Undo Block的竞争 该参数计算公式如下: Round(User rollbacks / (user commits + user rollbacks) ,4)* 100% 。
Rows per Sort:每次排序的行数
注:
Oracle的硬解析和软解析
  提到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:
  1、语法检查(syntax check)
  检查此sql的拼写是否语法。
  2、语义检查(semantic check)
  诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
  3、对sql语句进行解析(prase)
  利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
  4、执行sql,返回结果(execute and return)
  其中,软、硬解析就发生在第三个过程里。
  Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;
  假设存在,则将此sql与cache中的进行比较;
  假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。
  诚然,如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。
  创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。
作者: makinstall    时间: 2013-1-23 13:12
在某群里看到你让大家来这里提问,所以特提问如下:
我们在做oracle性能调优的时候
如何利用awr报告进行问 ...
marsliu 发表于 2013-1-22 21:03


内容太多,我给你连接下载好了
http://5itest.net/bbs/dispbbs.asp?boardid=16&Id=363
作者: changli_dong    时间: 2013-1-23 16:10
你好,现在公司准备将性能这块的测试交给我来进行,但是不知道从哪里入手,性能方面新手,请指教,谢谢。
作者: wjtest    时间: 2013-1-24 10:15
回复 48# makinstall


  前辈有没有这方面的书 推荐下,谢谢
作者: 小丫鬟789    时间: 2013-1-24 14:11
您好!

一个系统内嵌的邮件收发列表,客户提出邮件超过80封时,系统运行会很卡,需要做性能调优!!请问该如何着手处理呢?
作者: ashelywen    时间: 2013-1-24 14:20
BI 的测试 注重 数据的准确性和逻辑性, 对于BI 个人认为你要对业务熟悉且在大数据量分析方面和数 ...
makinstall 发表于 2013-1-22 15:04


那请问专家,当这个系统连所需要的数据都没有的时候是怎么去测试的呢?是要测试人员自己去造数据吗?那又是怎么造数据的呢?
还有是怎么去注重 数据的准确性和逻辑性?
作者: yangemil    时间: 2013-1-24 15:06
你好,现在公司准备将性能这块的测试交给我来进行,但是不知道从哪里入手,性能方面新手,请指教,谢谢。
changli_dong 发表于 2013-1-23 16:10

性能测试涉及到的知识很多 需要有 网络、操作系统、中间件、数据库  等知识的储备。
作者: makinstall    时间: 2013-1-24 20:15
性能测试涉及到的知识很多 需要有 网络、操作系统、中间件、数据库  等知识的储备。
yangemil 发表于 2013-1-24 15:06



    呵呵,谢谢yangemil帮我回答问题

做性能测试,需要掌握评估系统压力状态,如并发人数,TPS 吞吐量,
            制定该系统通过的的标准SLA: 如TPS多少秒算可以,事物失败率达到万分之一等。
            需要掌握压力的正确生成,即制造适量能模拟真实情况的虚拟用户的脚本。
            有多个不同操作系统或中间件的知识积累,能够顺藤摸瓜,找到问题的症结点,定位系统瓶颈。
作者: makinstall    时间: 2013-1-24 20:26
那请问专家,当这个系统连所需要的数据都没有的时候是怎么去测试的呢?是要测试人员自己去造数据吗?那 ...
ashelywen 发表于 2013-1-24 14:20

问题1:数据没有怎么办
    1.数据没有需要自己造,或者让SA或者DBA从线上数据库中拉出来。
    2.如果是自己制造数据 得根据系统的特点,业务特性,数据库表之间的关系来制作,写SQL过程 或者其他工作来制作。 如datafactory 之类的
作者: makinstall    时间: 2013-1-24 20:31
回复  makinstall


  前辈有没有这方面的书 推荐下,谢谢
wjtest 发表于 2013-1-24 10:15



    黑盒?软件测试的策略,测试用例设计,SCRUM等等自己找找看看吧:) 当当查查 呵呵
作者: makinstall    时间: 2013-1-24 20:33
那请问专家,当这个系统连所需要的数据都没有的时候是怎么去测试的呢?是要测试人员自己去造数据吗?那 ...
ashelywen 发表于 2013-1-24 14:20



    数据准确性和逻辑性,这个要看你的SQL 功底和业务功底 以及对数据库表之间的设计了解程度了
作者: bobo159357456    时间: 2013-1-25 17:14
回复 1# lsekfe


   专家啊 一个餐饮软件 我需要多少时间啊
作者: makinstall    时间: 2013-1-25 21:46
回复 29# 云层


     呵呵,谢谢关照
作者: makinstall    时间: 2013-1-27 10:55
回复 61# bobo159357456


   你能描述清楚点吗?
作者: dionysus    时间: 2013-1-27 21:17
数据库软解析、硬解析对数据库的影响到底有多少?主要影响在哪?是否必须是在大并发情况下才能有区别?最近在我的测试环境里试验Sybase ASE的语句缓存和预编译,感觉差异不大。
另外,数据库复合索引前导列的可选性对查询来说影响有多大呢?lz做过试验么?
作者: yangemil    时间: 2013-1-28 09:37
oracle 的经验  硬解析 SQL语句的执行需要完完全全的解析,生成执行计划需要耗用CPU资源。
尽量避免硬解析,注意使用变量绑定
作者: bobo159357456    时间: 2013-1-28 11:49
回复 63# makinstall
能 我现在在一家餐饮软件公司工作做测试工程师,上了两周多 还是让我了解软件。每天都是对着软件 操作这操作那 做这样的事情 要做到什么时候才能进入测试。 就是 测试 然后上报BUG的工作.
作者: jiangkay0128    时间: 2013-1-28 12:58
webservice性能测试时不知道该如何编写函数,请教大侠
Action()
{
        web_service_call( "StepName=login_101",
                "SOAPMethod=LoginServiceProxyService|LoginServiceProxy|login",
                "ResponseParam=response",
                "Service=LoginServiceProxyService",
                "ExpectedResponse=SoapResult",
                "Snapshot=t1359332729.inf",
                BEGIN_ARGUMENTS,
                "xmlpt="
                        "<opt></opt>",
                END_ARGUMENTS,
                BEGIN_RESULT,
                END_RESULT,
                LAST);
return 0;
}

2)        方法名:login
3)        功能:获取手机账户登录信息,登录成功后返回接口调用成功标识。
4)        入参说明:
入参类型: Object
入参格式:
{"type":"1",
"parameters":{
" username ":"xxxxx",
" password ":"xxxxx"
}}
其中:
type:入参类型为“1”
parameters:参数,包括用户名“username”和密码“password” ,username不可为空。
5)        出参说明:
出参类型:String
出参格式:{“status”:”0”}或{“status”:”1”, “fail-reason”: ”error msg”}
其中:
                status:“0”接口调用成功;“1”接口调用失败
fail-reason:为错误信息
作者: 欢欢891030    时间: 2013-1-28 14:39
EKIN:
    你好!我一直从事的是功能测试方面的工作,想往性能测试方面发展,希望能够给指导指导,要从哪些方面去学习!O(∩_∩)O谢谢
作者: bobo159357456    时间: 2013-1-28 14:53
回复 1# lsekfe


    我听力不好 我适合做什么样的测试 求给职业规划!
作者: dionysus    时间: 2013-1-28 23:55
回复 65# yangemil

是仅消耗CPU资源么?SQL Server和DB2对硬解析是不是也同样敏感?另外Oracle、SQL Server、DB2对多核CPU是怎么利用的?Sybase ASE中可以配置数据库引擎数量,对应多核CPU
作者: makinstall    时间: 2013-2-1 11:49
数据库软解析、硬解析对数据库的影响到底有多少?主要影响在哪?是否必须是在大并发情况下才能有区别?最近 ...
dionysus 发表于 2013-1-27 21:17



    回复 64# dionysus

    解析从单个请求来说是影响较小,但是蚁多咬死象,一个资源对象被N个重复的请求,等于重复用了N次的解析。这个大于不大,看N有多少了。
作者: makinstall    时间: 2013-2-1 11:53
EKIN:
    你好!我一直从事的是功能测试方面的工作,想往性能测试方面发展,希望能够给指导指导,要从哪些 ...
欢欢891030 发表于 2013-1-28 14:39



  需要很多积累,主要表现 3+1
   1。模拟真实的脚本制作    2。各类操作系统知识的积累   3。SQL+数据库知识积累  4。中间件等积累

PS ;
    监控手段要到位
作者: makinstall    时间: 2013-2-1 11:59
回复 66# bobo159357456


    职业规划根据自己的特性来,具体的私聊吧,我的Q  791959906
作者: makinstall    时间: 2013-2-1 12:00
回复 70# dionysus


    不仅仅是CPU   软解析 消耗 CPU  内存为主,硬解析,以IO为主。
作者: makinstall    时间: 2013-2-1 12:06
回复 70# dionysus


  硬解析无论是哪个数据库都一样。
  多核心CPU的利用和配置是个复杂的问题
CPU在某一个时间点上确实只能执行一个线程,但是多线程不是由于多核或者双核才叫多线程。是由于,很多个线程在并行执行的时候,CPU根据一定的线程调度算法,频繁的进行线程切换,当正在执行的一个线程需要进行IO操作或者需要访问内存的时候,CPU完全可以放弃该线程,转而调度线程就绪队列上的其他线程,被放弃的线程则进入阻塞状态,IO操作或者访问内存操作结束之后,该线程可以进入线程就绪队列上。
人们通常意义上的多线程指的是,由于CPU根据一定的线程调度算法来切换线程,所以在一个时间段上,可以看做很多线程在并发执行。其实还是在某一个时间点上只有一个线程在运行罢了。

你可以在数据库配置,表的应用和存储过程等环节配置好 多线程应用的分配技术才能利用好多核CPU




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2