‘壹’ 如何做好性能测试
你好,首先很欣赏你的这种态度。我在TestBird 招聘新人的时候,也有很多小朋友觉得自己有多了解工具运用,有多熟练步骤过程,自我感觉很不错。
其实,我却想说,性能测试的重点不在性能测试工具的学习上。
当然,你也通过分析系统的压力点、LR录制脚本,设置用户,做压力,分析结果,整理测试报告。完成了性能测试的整个过程。那么我说这个性能测试报告是有效的,但它不一定是有用的。
为什么呢?因为在性能测试报告中,在你所在的环境中,你是测出了这样的效果。并未掺假,全部真实的记录。
为什么说它不一定是有用的,你了解系统架构么?知道数据库、中间件、前端程序的运行方式和处理机制么?了解网络协议么?了解操作系统么?熟悉开发系统的语言么,如java JVM的内在机理知道么?这些都是系统运行的一部分,都在影响着系统的性能。如果不了解这些,你如何做出有价值的有参考意义的性能测试。
所以,学会这些性能测试工具很好,但是这仅仅是第一步。性能结果只是一些数据而已,知道你在做什么,为什么要做这些,做完后能给出有价值的东西,才是后面要慢慢修炼的。
‘贰’ 谁知道如何:使用 Microsoft Excel 创建负载测试性能报告
负载测试报告分为两种:运行比较 这将创建使用表和条形运行,比较两个负载测试结果的数据。报表集。趋势 在两个或多个可以生成趋势分析负载测试结果。其结果以折线图显示,但可从数据透视表获得数据。要求Visual Studio 旗舰版提示也可以通过从摘要视图、关系图视图和表视图中复制和粘贴数据来手动创建 Microsoft Word 报告。有关更多信息,请参见 如何:使用 Microsoft Word 手动创建负载测试性能报告.这两种报告都可用于与利益干系人共享性能数据,传达系统的整体性能和运行状况是变好还是变差。报告定义存储在负载测试数据库中。保存报告后,报告定义保存在数据库中,以后可以重用。此外,可将 Excel 工作簿与利益干系人共享 ,以便利益干系人不必连接到数据库就可以查看报告。说明可以共享 Excel 工作簿;但是,只有计算机上已安装 Visual Studio 旗舰版的用户能够修改任意电子表格。其他用户不会看到在 Office 功能区的 负载测试报告 选项,但是,它们能够查看工作簿。警告最终 的Visual Studio 2012 与 Microsoft Office 2007 兼容。必须升级到 Microsoft Office 2010。在升级到 Microsoft Office 2010 之后中,Excel 负载测试插件可能不会正确加载。若要更正此问题,在 Microsoft Excel 2010 中,执行以下步骤:在Office 功能区,选择 文件。选择选项 然后选择 外接程序。在下拉列表中 管理下,选择 COM 加载项,然后选择 执行。为负载测试报告 Addin选中复选框。下图是显示处理(更新购物车)速度的下降和(% 处理器)计数器的退化之间的相关性的报告示例。这指向应用程序代码而不是数据库或网络中的潜在问题,并且适于使用 ASP.NET 探查器进行诊断。生成Excel 报告的方法有两种:一种是在负载测试分析器中使用工具栏中的“创建 Excel 报告”按钮,另一种是在 Excel 中使用 Office 功能区的“负载测试”选项卡中的“负载测试报告”选项。说明如果向负载测试中添加注释,注释将出现在 Excel 报告中。有关更多信息,请参见如何:使用负载测试分析器在分析完成的负载测试时添加注释和如何:使用负载测试分析器向运行负载测试中添加注释。使用Excel 生成负载测试比较报告在生成报告之前,必须先运行负载测试。有关更多信息,请参见运行负载测试。可采用两种方法创建 Excel 负载测试报告:在完成负载测试后,在 负载测试结果 页,在工具栏上选择 创建Excel 报告 按钮。说明如果“创建 Excel 报告”按钮在“Web 性能测试结果查看器”工具栏中处于禁用状态,可能需要运行一次 Microsoft Excel 才能启用该按钮。安装Visual Studio 旗舰版时,Visual Studio 旗舰版负载测试外接程序将会复制到您的计算机以便用于 Microsoft Excel;但是必须运行 Microsoft Excel 才能完成该外接程序的安装过程。Microsoft Excel 将打开“生成负载测试报告”向导。-或 -打开Microsoft Excel,选择 Office 功能区的选项 负载测试 然后选择 负载测试报告。此时将显示“生成负载测试报告”向导。在选择包含负载测试的数据库 页上,在 服务器名称下,键入包含的服务器名称负载测试结果。在的数据库名称 下拉列表中,选择包含的数据库负载测试结果。在要如何生成您的报告 页上,确认 创建报告 上选择并选择 下一个。在您希望生成哪种类型的报告 页上,确认 运行比较 上选择并选择 下一个。在“输入负载测试报告详细信息”页上,在“报告名称”中键入报告的名称。选择负载测试要生成报表并选择 下一个。在为报告选择运行 页上,在 选择一个或多个要添加到报告中的运行下,选择负载测试结果要在报告中比较并选择 下一个的两个。说明只能针对两个负载测试结果生成一个比较报告。如果选择一个负载测试结果或两个以上负载测试结果,则将显示一条警告消息。在“为报告选择计数器”页上的“选择一个或多个要添加到报告中的计数器”下面,有一个可用于自定义报告的可扩展计数器列表。默认情况下,已为报告选择以下计数器:LoadTest:Page - Avg.(负载测试:页 - 平均)页面时间LoadTest:Request - Requests/Sec(负载测试:请求 - 每秒请求数)LoadTest:Scenario - User Load(负载测试:方案 - 用户负载)LoadTest:Test - Avg.(负载测试:测试 - 平均)Test Time(测试时间)LoadTest:Test - Total Tests(负载测试:测试 - 总测试次数)LoadTest:Transaction - Avg.(负载测试:事务 - 平均)Response Time(响应时间)LoadTest:Transaction - Total Transactions(负载测试:事务 - 事务总数)Memory - Available MBytes(内存 - 可用的兆字节数)Network Interface - Bytes Total/sec(网络接口 - 每秒总字节数)PhysicalDisk - %Idle Time(物理磁盘 - 空闲时间百分比)Process - %Processor Time(进程 - 处理器时间百分比)Processor %Processor Time(处理器 - 处理器时间百分比)选择要从报告中两个所选的测试运行比较并选择 完成的计数器。将生成带有以下电子表格选项卡的 Excel 工作簿:目录 - 显示负载测试报告名称,并提供一个目录,其中包含指向报告的各选项卡的链接。运行- 提供有关正在比较报告中的哪两个运行的详细信息。测试比较 - 提供有关正在比较的两个运行之间的性能衰退和改进的条形图详细信息。页面比较 - 提供测试运行中的各个页面上两个运行之间的条形图和百分比性能比较数据。计算机比较 - 提供基于所使用的计算机的两个运行之间的比较数据。错误比较 - 比较在两个运行中所遇到的错误类型以及出现的次数。提示为了获得更好的报告,支持更多报告的负载测试和 Web 性能测试提供了几个属性。页面请求具有两个呈现在报告中的属性:“目标”和“报告名称”。将针对目标来报告页面响应时间,并且在报告中将使用报告名称而不是 URL。在负载测试“运行设置”的“管理计数器集”下面,“计算机标记”属性呈现在报告计算机名称中。若要在报告中描述特定计算机的角色,这非常有用。使用Excel 生成负载测试趋势报告在生成报告之前,必须运行负载测试。有关更多信息,请参见运行负载测试。可采用两种方法创建 Excel 负载测试报告:在完成负载测试后,在 负载测试结果 页,在工具栏上选择 创建Excel 报告 按钮。说明如果“创建 Excel 报告”按钮在“Web 性能测试结果查看器”工具栏中处于禁用状态,可能需要运行一次 Microsoft Excel 才能启用该按钮。安装Visual Studio 旗舰版时,Visual Studio 旗舰版负载测试外接程序将会复制到您的计算机以便用于 Microsoft Excel;但是必须运行 Microsoft Excel 才能完成该外接程序的安装过程。Microsoft Excel 将打开“生成负载测试报告”向导。-或 -打开Microsoft Excel,选择 Office 功能区的选项 负载测试 然后选择 负载测试报告。此时将显示“生成负载测试报告”向导。在选择包含负载测试的数据库 页上,在 服务器名称下,键入包含的服务器名称负载测试结果。在的数据库名称 下拉列表中,选择包含的数据库负载测试结果。在要如何生成您的报告 页上,确认 创建报告 上选择并选择 下一个。在您希望生成哪种类型的报告 页上,确认 趋势 上选择并选择 下一个。在“输入负载测试报告详细信息”页上,在“报告名称”中键入报告的名称。选择负载测试要生成报表并选择 下一个。在为报告选择运行 页上,在 选择一个或多个要添加到报告中的运行下,选择负载测试要在报告中比较并选择 下一个的结果。在“为报告选择计数器”页上的“选择一个或多个要添加到报告中的计数器”下面,有一个可用于自定义报告的可扩展计数器列表。默认情况下,已为报告选择以下计数器:LoadTest:Page - Avg.(负载测试:页 - 平均)页面时间LoadTest:Request - Requests/Sec(负载测试:请求 - 每秒请求数)LoadTest:Scenario - User Load(负载测试:方案 - 用户负载)LoadTest:Test - Avg.(负载测试:测试 - 平均)Test Time(测试时间)LoadTest:Test - Total Tests(负载测试:测试 - 总测试次数)LoadTest:Transaction - Avg.(负载测试:事务 - 平均)Response Time(响应时间)LoadTest:Transaction - Total Transactions(负载测试:事务 - 事务总数)LoadTest:Transaction - Transactions/Sec(负载测试:事务 - 每秒事务数)Memory - Available MBytes(内存 - 可用的兆字节数)Network Interface - Bytes Total/sec(网络接口 - 每秒总字节数)PhysicalDisk - %Idle Time(物理磁盘 - 空闲时间百分比)Process - %Processor Time(进程 - 处理器时间百分比)Processor %Processor Time(处理器 - 处理器时间百分比)从报告中所选的测试运行中,选择要比较来进行趋势分析并选择 完成的计数器。将生成带有一个目录的报告,该目录包含指向报告中生成的各个 Excel 工作簿选项卡的链接。这些链接基于为趋势报告选择的计数器。例如,如果在步骤 7 中将默认计数器保留为选中状态,则报告所生成的数据将针对步骤 7 中列出的每个计数器,呈现在 Excel 中的各个选项卡上。针对每个计数器生成的数据呈现在趋势图中。
‘叁’ 如何提供oracle rac 检测报告
1 测试目的 测试目的, 在于验证多节点 RAC 的可用性、 稳定性,以及多节点 RAC 相对于普通的 Oracle 环境性能的提升情况 2 2.1 2.2 术语、定义和缩略语 术语、定义 无。 缩略语 本文件应用了以下缩略语: RAC Real Application Cluster Caps Call per Second Oracle 公司数据库集群软件 智能网名词,指每秒处理的呼叫数 3 测试环境描述 本次测试,由 4 台 IBM 小型机(2 台 B80、2 台 P630)搭建了一个内部网络,组成 4 节 点的 RAC 环境, 网络内的各个节点通过 10/100M 网卡相互访问, 包括 RAC 节点间的 heart beat 信息;RAC 数据库以裸设备方式建在共享磁阵上,各节点通过光纤交换机访问磁阵;呼叫测 试时,各节点上的智能网应用,则通过光纤交换机与模拟呼叫仪进行通讯。 硬件信息: 小型机:IBM B80 2 台,每台 2 颗 450M 主频的 POWER3 CPU 和1G 内存 小型机:IBM P630 2 台,每台 2 颗 1.2G 主频的 POWER4 CPU;2G 内存 存储: StorageTek 的 D240 磁阵, 块 72G 的硬盘, 6 其中 4 块做 RAID 0+1, 块为 HOT SPARE 2 光纤交换机:2 台,型号为 IBM 3534-F08 模拟呼叫仪:INET、MGTS 软件信息: 操作系统:IBM AIX 5.2 补丁级别 02 双机软件:IBM HACMP V5.1 补丁级别 04 RAC 版本:Oracle 9.2.0.5.0 智能网平台版本:V3.50.05.06_0_2004/08/23 业务版本:[email protected] 第 2 页 共 18 页 Oracle RAC 测试报告 4 测试过程描述 本次 RAC 的测试,主要是分成三个阶段,第一是 RAC 的性能测试,第二个阶段,则 主要是针对在性能测试中发现问题的处理,第三个阶段是 RAC 的功能测试、稳定性测试。 4.1 性能测试 由于受到模拟呼叫仪处理能力的限制,在性能测试过程中,4 节点的 RAC 中并没有所 有节点都同时使用的情况,大部分情况是启动其中的 2 个 instance,相当于两节点的 RAC。测试前提: 1. 智能网应用与 Oracle 的 instance 同时在同一台主机上运行 2. 智能网的数据库连接为指定连到本机的 instance,没有做 load balance 和 failover 3. 测试时业务表 s1cardinf 的记录数为 32 万 4. 双节点时测试时,每个节点上的应用分别处理不同的号段,无交叉现象 4.1.1 两台 B80 组成的单、双节点 RAC 性能测试 测试目的: 测试在 B80 上,两节点的RAC 相对于单机方式的性能提高情况 测试步骤: 1. 启动一台机器上的 oracle instance 和智能网应用 2. 根据应用的处理情况逐步提供呼叫仪的呼叫数,直到应用无法及时处理 3. 同时启动两台机器上的 oracle instance 和智能网应用 4. 根据应用的处理情况逐步提供呼叫仪的呼叫数,直到应用无法及时处理 测试结果: 单实例方式下,应用的最大呼叫处理能力可达到140caps,此时 CPU 达到 100%, 而应用出现消息积压的情况; 双节点方式下, 每个节点应用的最大处理能力为 140caps。 4.1.2 两台 P630 组成的单、双节点 RAC 性能测试 测试目的: 测试在 P630 上,两节点的 RAC 相对于单机方式的性能提高情况测试步骤: 1. 动一台机器上的 oracle instance 和智能网应用 2. 根据应用的处理情况逐步提供呼叫仪的呼叫数,直到应用无法及时处理 3. 同时启动两台机器上的 oracle instance 和智能网应用 4. 根据应用的处理情况逐步提供呼叫仪的呼叫数,直到应用无法及时处理 测试结果: 单实例方式下,应用的最大呼叫处理能力可达到 210caps,此时 CPU 达到 100%, 而应用出现消息积压的情况; 双节点方式下, 每个节点应用的最大处理能力为 210caps。 4.1.3 两台 B80 和一台 P630 组成的三节点 RAC性能测试 测试目的: 测试三节点的 RAC 的性能情况 测试步骤: 1. 同时启动两台 B90 和一台 P630 上的 oracle instance 和智能网应用 2. 根据应用的处理情况逐步提供呼叫仪的呼叫数,直到应用无法及时处理 第 3 页 共 18 页 Oracle RAC 测试报告 测试结果: 最终的处理结果是两台 B80 上的最大呼叫能力为 140caps,当时 CPU 为 100%,出 现消息积压情况;而受制于呼叫仪的处理能力,P630 上达到 160caps,而 cpu 占有率为 81%,消息处理正常。 4.2 功能测试 4.2.1 RMAN 备份和恢复测试 测试目的: 测试 RMAN 的备份 测试步骤: 1. 使用 rman,执行语句,进行整个数据库的备份 2. 使用 rman,执行语句,备份归档日志 测试结果: 按照预期的结果,生成了备份文件。 测试目的: 测试 RMAN 的恢复 测试步骤: 1. 使用 dd 破坏控制文件的设备/dev/rrcontrol1,使用 RMAN 恢复 2. 删除表空间 zxin_data,利用之前的备份,使用 RMAN 恢复 测试结果: 对于删除 control file 的测试, 恢复失败, 因为使用的是 rman nocatalog 进行的备份, 在 nocatalog 方式下,备份信息是存放在 control file 中的,现在 control file 损坏,无法通过 rman 进行恢复; oracle 建议在使用 nocatalog 方式备份时需将 control file 和 spfile 单独使用操 作系统命令进行备份。后者的表空间恢复正常。 4.2.2 exp 备份和 imp 恢复测试 测试目的: 验证 exp/imp 进行数据库的备份和恢复 测试步骤: 1. 使用 exp 进行整库备份 2. 删除用户 zxin,使用 imp 恢复 3. 删除表空间 zxin_data,使用 imp 恢复 测试结果: exp 备份正常,恢复测试同样没有问题。 4.2.3 正常呼叫时,smap 界面对数据的大批量查询和修改。 测试前提: 节点 zxin1 和 zxin2 上正常处理呼叫,呼叫量均为 100caps 测试步骤: 1. 查询某卡号段的信息 2. 另外同时通过 sqlplus,按照卡号段查询 s1cardinf 信息 测试结果: 第 4 页 共 18 页 Oracle RAC 测试报告 由于只使用了一个 smap 界面程序操作,因此看不出影响。 4.2.4 正常呼叫时,后台 cron 任务对数据的大批量查询和修改。 测试前提: 节点 zxin1 和 zxin2 上正常处理呼叫,呼叫量均为 100caps 测试步骤: 1. 利用 shell 通过 sqlplus,按照卡号段循环查询 s1cardinf 信息 2. 通过 sqlplus 修改 s1cardinf 信息,按照卡号段循环 update s1cardinf 信息 测试结果: 后台对同一个表的连续的大数据查询、修改,对呼叫影响很大,查询时 cpu 占有率 上升了 5%,如有多个同时运行的话,消息处理积压的现象将会非常明显。 4.2.5 大事务测试 测试目的: 测试在异常情况下数据的一致性、完整性 测试步骤: 在节点 zxin1 和 zxin2 上同时运行同一事务批量修改数据,数据有交叉 测试结果: 多次测试,数据更新正常。 测试步骤: 1. 在节点 zxin1 和 zxin2 上同时运行同一事务,在 zxin2 回滚事务 2. 在节点 zxin1 和 zxin2 上同时运行同一事务,在 zxin2 kill 该 session 测试结果: 测试结果正常,未见数据异常。 测试步骤: 在节点 zxin1 和 zxin2 上同时运行模拟程序,通过 sqlplus 连到数据库,批量更新数 据,然后退出重连;此过程循环一晚 测试结果: 根据处理的日志看,操作正常。 4.2.6 load balance 测试 测试目的: 验证 oracle 的负载均衡功能 测试前提: 1. 在 zxin1、zxin2 上启动实例 2. 修改 zxin2 上 tnsnames.ora,启用 load balance 测试步骤: 1. 在 zxin2 上运行 zxstart,建立 SDF 连接 2. 利用测试程序,每隔几秒通过 sqlplus 建立 10 个连接 测试结果: zxstart 多次测试的结果,12 个 SDF 连接基本是平均分布,有时则是 5 个在 zxin1 第 5 页 共 18 页 Oracle RAC 测试报告 上,7 个在 zxin2 上;而手工建立的 sqlplus 连接,则是完全平均分布的。 4.2.7 connetc-time failover 的测试 测试目的: 验证在客户端连接时的 failover 功能 测试前提: 1. 启动 zxin1、zxin2 上的实例 2. 关闭 zxin2 的 listener,zxin1 机器上的 listener 正常 3. 实例 zxin2 上的 tnsnames.ora 中配置 Address List= (ADDRESS = (PROTOCOL = TCP)(HOST = zxin2)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = zxin1)(PORT = 1521)) 测试步骤: 1. 在 zxin2 上启动 zxstart 2. 利用测试程序,在 zxin2 上每隔几秒通过 sqlplus 建立 10 个连接 测试结果: 两种方式下,数据库连接都在 zxin1 实例上 4.2.8 TAF 测试 测试目的: 验证 Transparent Application Failover 功能及切换时间 测试前提: 1. 实例 zxin1、zxin2 正常运行,listener 正常 2. 实例 zxin2 启用 Failover 功能 3. 主机 zxin1、zxin2 上的时间一致 测试步骤: 1. Zxin2 上运行 zxstart,启动平台程序 2. 启动模拟程序,不停通过 sqlplus 连接 zxin2,记录无法连接 zxin2 实例的时间 3. 通过正常、异常关闭 zxin2 实例,异常关闭 zxin2 主机进行测试 4. 在 zxin1 上查看 v$session 中各 SDF 连接及 logon_time 测试结果: zxin2 实例在正常、异常关闭或者 zxin2 主机被异常关闭之后,所有连到实例 zxin2 的数据库连接自动切换到了 zxin1,但是数据库连接的切换时间每次都不太一样,从 8 秒到 59 秒不等,维持在 1 分钟之内。 测试目的: 测试正常呼叫情况下 TAF 的切换时间 测试前提: 1. 实例 zxin1、zxin2 正常运行,listener 正常 2. 实例 zxin2 启用 Failover 功能 3. 主机 zxin1、zxin2 上的时间一致 测试步骤: 1. zxin2 上运行 zxstart,启动平台程序,有 100caps 的呼叫处理 2. 启动模拟程序,不停通过 sqlplus 连接 zxin2,记录无法连接 zxin2 实例的时间 3. 通过正常、异常关闭 zxin2 实例,异常关闭 zxin2 主机进行测试 第 6 页 共 18 页 Oracle RAC 测试报告 4. 在 zxin1 上查看 v$session 中各 SDF 连接及 logon_time 测试结果: zxin2 实例在正常、异常关闭或者 zxin2 主机被异常关闭之后,所有连到实例 zxin2 的数据库连接自动切换到了 zxin1,而且切换时间非常快,很多情况下都在 1-2 秒左右,没 有超过 10 秒的,可能跟呼叫有关,在有操作的情况下,zxin1 实例能够更快的获取 zxin2 实 例 down 的情况,从而更快的切换。 4.3 稳定性测试 4.3.1 模拟呼叫,保持 24 小时 测试目的: 测试 RAC在长时间的呼叫处理下是否正常 测试步骤: 1. 在节点 zxin1、zxin2 上启动数据库 2. 在节点 zxin1、zxin2 上分别启动平台程序,接受呼叫 3. 模拟呼叫仪接入,模拟 100caps 的呼叫量,连续呼叫 24 小时 测试结果: 系统运行正常,数据库访问正常,业务处理正常。 4.3.2 网线异常对实例的影响 测试目的: 测试公网 ip 异常对 RAC 的影响 测试步骤: 1. 实例 zxin1、zxin2 启动,在 zxin2 上启动平台程序 2. 使用 ifconfig en1 192.1.1.102 delete 删除 public ip 3. 拔掉 zxin2 上 public 网线 测试结果: zxin2 上建立的到数据库实例 zxin2 的 SDF 连接,进行 failover,切换到 zxin1 上, 客户端无法以 zx192_1_1_102 这个 connect string 连到实例 zxin2。待到重新加入 ip 或者插 上网线之后,恢复正常。 测试步骤: 测试私网 ip 异常对 RAC 的影响 测试步骤: 1. 实例 zxin1、zxin2 启动,在 zxin2 上启动平台程序 2. 使用 ifconfig en0 10.1.1.102 delete 删除 private ip 3. 拔掉 zxin2 上用于 RAC 节点间通讯的 private 网线 测试结果: 无论是删除 ip 还是拔掉网线,对于 Oracle 来说,效果一样。以其中一次测试的过 程为例:大概在 11:03 拔掉网线,然后在 oracle 日志显示,在实例 zxin1、zxin2 分别在 11: 09 和 11:08:45 进行 Communication recofiguration,zxin1 等待 split-brain resolution;10 分 钟之后,11:19 分,实例 zxin2 down 下来,zxin1 实例恢复正常。在多次测试的结果中,发 现在拔掉网线到实例进行 communication 重组之间、和实例等待 split-brain resolution 的过程 中,除了有一次能够通过访问 zxin1 而不能访问 zxin2 外,其他几次都无法通过 sqlplus 访问 第 7 页 共 18 页Oracle RAC 测试报告 zxin1、zxin2,而且这两个阶段的时间都固定为 5 分钟跟 10 分钟。 后来,发现第二个阶段等待 split-brain 的时间跟数据库中参数的设置有关,修改参 数_imr_splitbrain_res_wait 为 60 秒后, 等待时间由 10 分钟缩短为 1 分钟; 但是, comminucation 重组之前的超时判断无法缩短,可能跟 tcp 有关,修改了 rto_high 等几个参数设置后,时间 依然为 5 分钟左右,没有改变。
‘肆’ 数据库性能优化基准测试的度量指标有哪些
当前业界常见的服务器性能指标有:
TPC-C
TPC-E
TPC-H
SPECjbb2005
SPECjEnterprise2010
SPECint2006 及 SPECint_rate_2006
SPECfp2006 及 SPECfp_rate_2006
SAP SD 2-Tier
LINPACK
RPE2
一、TPC (Transaction Processing Performance Council) 即联机交易处理性能协会, 成立于1988年的非盈利组织,各主要软硬件供应商均参与,成立目标: 为业界提供可信的数据库及交易处理基准测试结果,当前发 布主要基准测试为:
TPC-C : 数据库在线查询(OLTP)交易性能
TPC-E : 数据库在线查询(OLTP)交易性能
TPC-H : 商业智能 / 数据仓库 / 在线分析(OLAP)交易性能
1.TPC-C测试内容:数据库事务处理测试, 模拟一个批发商的订单管理系统。实际衡量服务器及数据库软件处理在线查询交易处理(OLTP)的性能表现. 正规 TPC-C 测试结果发布必须提供 tpmC值, 即每分钟完成多少笔 TPC-C 数据库交易 (TPC-C Transaction Per Minute), 同时要提供性价比$/tpmC。如果把 TPC-C 测试结果写成为 tpm, TPM, TPMC, TPCC 均不属正规。
2.TPC-E测试内容:数据库事务处理测试,模拟一个证券交易系统。与TPC-C一样,实际衡量服务器及数据库软件处理在线查询交易处理(OLTP)的性能表现。正规TPC-E测试结果必须提供tpsE值,即每秒钟完成多少笔TPC-E数据库交易(transaction per second),同时提供$/tpsE。测试结果写成其他形式均不属正规。
对比:TPC-E测试较TPC-C测试,在测试模型搭建上增加了应用服务器层,同时增加了数据库结构的复杂性,测试成本相对降低。截止目前,TPC-E的测试结果仅公布有50种左右,且测试环境均为PC服务器和windows操作系统,并无power服务器的测试结果。除此之外,TPC官方组织并未声明TPC-E取代TPC-C,所以,说TPC-E取代TPC-C并没有根据。
‘伍’ mysql数据库性能测试
我理解的是你希望了解mysql性能测试的方法:
其实常用的一般:
选取最适用的字段属性
MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。
另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。
2、使用连接(JOIN)来代替子查询(Sub-Queries)
MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:
DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:
SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:
SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. CustomerID WHERE salesinfo.CustomerID IS NULL
连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
3、使用联合(UNION)来代替手动创建的临时表
MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用 UNION 来创建查询的时候,我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了,要注意的是所有 SELECT 语句中的字段数目要想同。下面的例子就演示了一个使用 UNION的查询。
SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM author
UNION
SELECT Name, Supplier FROM proct
4、事务
尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性。事物以BEGIN 关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。
BEGIN;
INSERT INTO salesinfo SET CustomerID=14;
UPDATE inventory SET Quantity=11
WHERE item='book';
COMMIT;
事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。
5、锁定表
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户
来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。
其实,有些情况下我们可以通过锁定表的方法来获得更好的性能。下面的例子就用锁定表的方法来完成前面一个例子中事务的功能。
LOCK TABLE inventory WRITE
SELECT Quantity FROM inventory
WHEREItem='book';
...
UPDATE inventory SET Quantity=11
WHEREItem='book';
UNLOCK TABLES
这里,我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操作。
6、使用外键
锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。例如,外键可以保证每一条销售记录都指向某一个存在的客户。在这里,外键可以把customerinfo 表中的CustomerID映射到salesinfo表中CustomerID,任何一条没有合法CustomerID的记录都不会被更新或插入到salesinfo中。
CREATE TABLE customerinfo
(
CustomerID INT NOT NULL ,
PRIMARY KEY ( CustomerID )
) TYPE = INNODB;
CREATE TABLE salesinfo
(
SalesID INT NOT NULL,
CustomerID INT NOT NULL,
PRIMARY KEY(CustomerID, SalesID),
FOREIGN KEY (CustomerID) REFERENCES customerinfo
(CustomerID) ON DELETECASCADE
) TYPE = INNODB;
注意例子中的参数“ON DELETE CASCADE”。该参数保证当 customerinfo 表中的一条客户记录被删除的时候,salesinfo 表中所有与该客户相关的记录也会被自动删除。如果要在 MySQL 中使用外键,一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型。该类型不是 MySQL 表的默认类型。定义的方法是在 CREATE TABLE 语句中加上 TYPE=INNODB。如例中所示。
7、使用索引
索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(), MIN()和ORDERBY这些命令的时候,性能提高更为明显。那该对哪些字段建立索引呢?一般说来,索引应建立在那些将用于JOIN, WHERE判断和ORDER BY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况,例如customerinfo中的“province”.. 字段,在这样的字段上建立索引将不会有什么帮助;相反,还有可能降低数据库的性能。我们在创建表的时候可以同时创建合适的索引,也可以使用ALTER TABLE或CREATE INDEX在以后创建索引。此外,MySQL
从版本3.23.23开始支持全文索引和搜索。全文索引在MySQL 中是一个FULLTEXT类型索引,但仅能用于MyISAM 类型的表。对于一个大的数据库,将数据装载到一个没有FULLTEXT索引的表中,然后再使用ALTER TABLE或CREATE INDEX创建索引,将是非常快的。但如果将数据装载到一个已经有FULLTEXT索引的表中,执行过程将会非常慢。
8、优化的查询语句
绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。下面是应该注意的几个方面。首先,最好是在相同类型的字段间进行比较的操作。在MySQL 3.23版之前,这甚至是一个必须的条件。例如不能将一个建有索引的INT字段和BIGINT字段进行比较;但是作为特殊的情况,在CHAR类型的字段和VARCHAR类型字段的字段大小相同的时候,可以将它们进行比较。其次,在建有索引的字段上尽量不要使用函数进行操作。
例如,在一个DATE类型的字段上使用YEAE()函数时,将会使索引不能发挥应有的作用。所以,下面的两个查询虽然返回的结果一样,但后者要比前者快得多。
SELECT * FROM order WHERE YEAR(OrderDate)<2001;
SELECT * FROM order WHERE OrderDate<"2001-01-01";
同样的情形也会发生在对数值型字段进行计算的时候:
SELECT * FROM inventory WHERE Amount/7<24;
SELECT * FROM inventory WHERE Amount<24*7;
上面的两个查询也是返回相同的结果,但后面的查询将比前面的一个快很多。第三,在搜索字符型字段时,我们有时会使用 LIKE 关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。例如下面的查询将会比较表中的每一条记录。
SELECT * FROM books
WHERE name like "MySQL%"
但是如果换用下面的查询,返回的结果一样,但速度就要快上很多:
SELECT * FROM books
WHERE name>="MySQL"and name<"MySQM"
最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。
‘陆’ 腾讯云服务器IO性能测试报告
测试方法:
1、 dd bs=64k count=4k if=/dev/zero of=test
没有加任何参数,dd默认的方式不包括“同步(sync)”命令。也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。所以以上命令只是单纯地把这128MB的数据读到内存缓冲当中(写缓存[write cache])。所以你得到的将是一个超级快的速度。因为其实dd给你的只是读取速度,直到dd完成后系统才开始真正往磁盘上写数据,但这个速度你是看不到了。所以如果这个速度很快,没有什么作用。
2、dd bs=64k count=4k if=/dev/zero of=test oflag=dsync
加入这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取64k后就要先把这64k写入磁盘,然后再读取下面这64k,一共重复128次。这可能是最慢的一种方式了,因为基本上没有用到写缓存(write cache)。这种方法是最严格的,可以模拟数据库的插入操作,所以很慢,也是用来测试vps硬盘性能标准的一条标杆,一般来说测试结果,如果超过10M,对正常建站就无影响。超过50M,就是非常给力状态。
腾讯云
[root@VM_37_104_centos ~]# time dd if=/dev/zero of=test.dbf bs=8k count=300000
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 9.98703 s, 246 MB/s
real 0m10.027s
user 0m0.071s
sys 0m4.413s
[root@VM_37_104_centos ~]# time dd if=/dev/zero of=test bs=64k count=16k oflag=dsync
16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB) copied, 20.3013 s, 52.9 MB/s
real 0m20.308s
user 0m0.014s
sys 0m2.724s
天互数据 为你解答,希望能帮到你
‘柒’ Speak WordCount性能测试报告怎么书写
给你看个范例:
测试环境: DELL 2.4G memory 512M RH9.0 MySQL 3.23.54测试使用的是mysql缺省参数,用mysql提供的API用C编写测试程序测试程序共启动40个线程进行数据库操作,查找、插入、修改、删除各10个,每个线程独立与Sql Server连接。数据库结构,单表,表结构如下: toheader 100byte 主键 contactheader 100byte called 50byte cseq 100byte hashval int timestamp int 次键
‘捌’ mysql 性能测试报告怎么写
给你看个范例:
测试环境:
DELL2.4Gmemory512M
RH9.0MySQL3.23.54
测试使用的是mysql缺省参数,用mysql提供的API用C编写测试程序
测试程序共启动40个线程进行数据库操作,查找、插入、修改、删除各10个,每个线程独立与SqlServer连接。
数据库结构,单表,表结构如下:
toheader100byte主键
contactheader100byte
called50byte
cseq100byte
hashvalint
timestampint次键
对主次键分别建了索引。分别在5万、10万、50万用户环境做测试,结果如下:
查找100次
插入100次
修改100次
删除100次
5万
100-300ms
100-300ms
100-300ms
100-300ms
10万
500ms-1s
500ms-1s
500ms-1s
500ms-1s
50万
3s-5s
3s-5s
3s-5s
3s-5s
从此数据看性能是很不错的,因为mysql能保证每个操作是原子的,所以不用考虑线程间的同步。
但有一个问题:即mysql的每个操作是原子的,所以做每个操作时,其它线程是阻塞的,在大数据量查询时,花的时间较长,会对其它线程有影响。我在保持其它线程工作不变的情况下,将每个查找线程改为做一次对所有记录的查询,在5万和10万记录时表现不错,分别为250ms和450ms,但在50万记录时,这个数值达到了22秒。而且在50万用户时,通过条件查找部分数据也很慢,如查询结果为10万记录时用11秒。
怀疑是sqlserver的参数影响,按数据库说明修改了几个缓冲区的参数,但没有效果。
由于首次同步发生的频率很低,象250ms和450ms这样的数据还是可以接受的,但22秒太离谱了。支持50万用户在线,需要考虑一个解决办法,现在有一个办法是建一个备份表,写备份表的请求放到一个队列里由一个单独线程处理,这样阻塞不会影响正常业务处理了。但这个线程的缓冲区要足够容纳30秒内发生的操作。
本来担心数据量大了mysql的缓冲区不够会出错或丢数据,但测试发现,一次查询最多读了50M数据,没有出现问题,经测算我们首次同步的数据不会超过10M。
在MySQL中启动了innoDB引擎后,可以实现真正的行级锁,select和update操作可以并发,这样在全表查询进行中间可以进行其它的select和update操作,但insert和delete不行。
性能也有很大提高,50万记录时100次操作300ms,全表查询11秒多
常用参数[options]详细说明:--auto-generate-sql,
-a自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-load-type=type测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--auto-generate-sql-add-auto-increment代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。--number-char-cols=N,
-xN自动生成的测试表中包含多少个字符类型的列,默认1--number-int-cols=N,-yN自动生成的测试表中包含多少个数字类型的列,默认1--number-of-queries=N总的测试查询次数(并发客户数×每客户查询次数)
--query=name,-q使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。--create-schema代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。--commint=N多少条DML后提交一次。
--compress,-C如果服务器和客户端支持都压缩,则压缩信息传递。--concurrency=N,-cN表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:
--concurrency=100,200,500。
--engine=engine_name,-eengine_name代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。--iterations=N,-iN测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
--only-print只打印测试语句而不实际执行。--detach=N执行N条语句后断开重连。--debug-info,-T打印内存和CPU的相关信息。说明:测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。各种测试参数实例(-p后面跟的是mysql的root密码):单线程测试。测试做了什么。
#mysqlslap-a-uroot-p123456多线程测试。使用–concurrency来模拟并发连接。#mysqlslap-a-c100-uroot-p123456迭代测试。用于需要多次执行测试得到平均值。#mysqlslap-a-i10-uroot-p123456#mysqlslap---auto-generate-sql-add-autoincrement-a-uroot-p123456#mysqlslap-a--auto-generate-sql-load-type=read-uroot-p123456#mysqlslap-a--auto-generate-secondary-indexes=3-uroot-p123456#mysqlslap-a--auto-generate-sql-write-number=1000-uroot-p123456#mysqlslap--create-schemaworld-q"selectcount(*)fromCity"-uroot-p123456#mysqlslap-a-einnodb-uroot-p123456#mysqlslap-a--number-of-queries=10-uroot-p123456测试同时不同的存储引擎的性能进行对比:#mysqlslap-a--concurrency=50,100--number-of-queries1000--iterations=5--engine=myisam,innodb--debug-info-uroot-p123456执行一次测试,分别50和100个并发,执行1000次总查询:#mysqlslap-a--concurrency=50,100--number-of-queries1000--debug-info-uroot-p12345650和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:#mysqlslap-a--concurrency=50,100--number-of-queries1000--iterations=5--debug-info-uroot-p123456
‘玖’ 如何在性能测试中手工生成AWR报告完成数据库性能分析
如何在性能测试中手工生成AWR报告完成数据库性能分析
网络文库:http://wenku..com/link?url=_X91Ua_9wnwZJ42hazbEDNOtAocN8GFsN-