标题：基准程序
概述
基准程序准备
在开始性能基准程序测试之前，完成应用程序对其运行的数据库的逻辑设计。设置并填充表、视图和索引。规范化表，绑定应用程序程序包并用实际数据填写表。
您还应该已确定了数据库的最终物理设计。将数据库管理器对象放在其最终磁盘位置，接大小排列日志文件，以确定工作文件和备份的位置，并测试备份过程。此外，检查程序包，以确保在可能时启用性能选项，如行分块。
您应该已在应用程序编程和测试阶段达到这样一个时候，即，将允许您创建基准程序。尽管在基准程序测试期间，可能会暴露应用程序的实际限制，但是，此处描述的基准程序的目的是测量性能，而不是检测故障或异常结束。
基准程序测试程序需要在尽可能接近于最终生产环境的条件下运行。理论上，它应该在具有相同内存和磁盘配置的同一种型号的服务器上运行。当该应用程序最终将涉及大量用户和大量数据时，这一点尤其重要。操作系统本身和基准程序直接使用的任何通信或文件服务工具也应已调整好。
确保使用生产大小的数据库运行基准程序测试。单个SQL语句返回的数据量以及需要的排序量应与在生产环境中相同。此规则确保应用程序将测试典型的内存需求。
要进行基准程序测试的SQL语句应该是典型的或恶劣的，如下所述：
典型的SQL
典型的SQL包括在对应用程序的典型操作进行基准程序测试期间执行的那些语句。选择的语句将取决于应用程序的性质。例如，数据输入应用程序可能要测试INSERT语句，而银行业务事务可能会测试FETCH、UPDATE和多个INSERT。考虑选择平均值的语句的执行频率和处理的数据量。如果该数据量过大，则即使这些语句是典型的SQL语句，也将它们归为恶劣类别考虑。
恶劣的SQL
归入此类别的语句包括：
频繁执行的语句。
处理大量数据的语句。
与时间密切相关的语句。
例如，当接收到客户的电话时运行的应用程序，而当客户等待时，必须运行语句以检索和更新客户信息。
要连接最大数量的表的语句，或含有应用程序中最复杂的SQL的语句。
例如，银行业务应用程序，它针对所有不同类型的帐户生成每月活动的综合客户报表。一个公用表可能会列示客户地址和帐户；但是，还必须合并其他几个表，以处理和集成所有需要的帐户事务信息。处理一个帐户所需的工作量乘以同一个周期内必须处理的几千个帐户，在这种情况下，可能节省的时间迫使提高性能要求。
有不良访问路径的语句，如不经常执行的且为涉及的表创建的索引不支持的语句。
耗时长的语句。
只在应用程序初始化时才执行但有不适当的资源需求的语句。
例如，生成当天必须处理的帐户工作列表的应用程序。当启动该应用程序时，第一个主SQL语句产生7路合并，这为此应用程序用户负责的所有帐户创建了一个非常大的列表。该语句可能每天只运行几次，但是如果未将它调整好就会耗费数分钟来运行。
基准程序测试
基准程序测试是应用程序开发生命周期的一个常规部分。它是由应用程序开发人员和数据库管理员（DBA）等小组成员参与的工作，应对您的应用程序执行它，以确定当前性能并提高性能。如果已将应用程序代码编写得尽可能效率高，那么要想再改善性能，可调整数据库和数据库管理器配置参数。甚至可以调整应用程序参数来更好地满足应用程序的需求。
运行不同类型的基准程序测试来发现特定种类的信息：
每秒事务数基准程序确定在某些有限的实验室条件下数据库管理器的吞吐量能力。
应用程序基准程序测试与生产条件接近的条件下的相同吞吐量能力。
调整配置参数的基准程序测试基于这些“现实世界”条件，并需要使用各种参数值反复运行从您的应用程序中获取的SQL，直到应用程序运行得尽可能有效率为止。
此处所描述的基准程序测试方法基于调整配置参数。但是，该基本技术同样可以用于调整影响性能的其它因素，如：
SQL语句
索引
表空间配置
应用程序代码
硬件配置
基准程序测试有助于了解数据库管理器在各种条件下是如何响应的。可以创建多个方案来测试死锁处理、实用程序性能、装入数据的不同方法以及当添加更多的用户时事务执行速率的特征，甚至还可测试使用该产品的新发行版对应用程序产生的影响。
基准程序测试基于可重复的环境，因此在相同条件下运行的相同测试将产生可以合理比较的结果。
可通过在一个正常的环境中运行测试应用程序来开始基准程序测试。随着您缩小性能问题的范围，可以开发专用的测试用例，以限制正测试的功能的作用域。这些专用测试用例不需要仿真整个应用程序来获取有价值的信息。从简单的评估开始，仅在必要时才增加复杂程度。
好的基准程序测试或评估应包括以下特征：
测试是可重复的。
测试的每次迭代在相同系统状态下开始。
除非方案包括系统中执行的一定量的其它活动，否则，系统中的其它功能或应用程序是不活动的。
注:
已启动的应用程序即使是在最小化或空闲时也会占用内存。这样增大了页面调度将使基准程序的运行结果产生偏差和违反可重复性规则的概率。
用于基准程序测试的硬件和软件与您的生产环境匹配。
对于基准程序测试，创建一个方案，然后在此方案中创建几次应用程序，以在每次运行期间捕获关键信息。在每次运行之后捕获关键信息在确定可以提高应用程序和数据库的性能的更改方面具有主要的重要性。
基准程序-基准程序测试创建    
当设计和实现基准程序时，考虑各种因素。由于该程序的主要目的是模拟用户应用程序，所以程序的总体结构是变化的。可以将整个应用程序用作基准程序，只需引入某种方法来对要分析的SQL语句进行计时。对于大的或复杂的应用程序，只包括包含重要语句的块可能更实用。
要测试特定SQL语句的性能，可以将这些语句以及必需的CONNECT、PREPARE、OPEN和其它语句以及计时机制一起单独包括在该基准程序中。
另一个要考虑的因素是要使用的基准程序的类型。一个选择是在一个时间间隔内重复运行一组SQL语句。执行的语句数量与此时间间隔的比率就是该应用程序的吞吐量。另一个选择是只确定执行个别SQL语句所需的时间。
对于所有基准程序测试，需要一个高效率的计时系统来计算个别SQL语句或整个应用程序的运行经过时间。要模拟个别SQL语句单独执行所在的应用程序，重点是跟踪CONNECT、PREPARE和COMMIT语句的时间。但是，对于处理多个不同语句的程序，或许只有单个CONNECT或COMMIT是需要的，而可能会优先测试个别语句的执行时间。
尽管每个查询的经过时间是性能分析中的一个重要因素，但可能不必暴露瓶颈。例如，有关CPU使用、锁定和缓冲池I/O的信息可能显示该应用程序达到I/O限制，而不是CPU的使用达到满负荷。基准程序应该允许您获取此类数据，以便在需要时进行更详细的分析。
并非所有的应用程序都将从查询检索到的整组行发送至某个输出设备。例如，整个回答集可能是另一个程序的输入，因此，不发送第一个应用程序的任何行作为输出。格式化屏幕输出的数据常常产生很高的CPU成本，且可能无法反映用户需要。要提供准确的模拟，基准程序应该反映特定应用程序的行处理。如果将行发送至输出设备，则效率不高的格式化可能消耗大量的CPU处理时间，并会误报SQL语句本身的实际性能。
db2batch基准程序工具：在您的实例sqllib目录的bin子目录中提供了一个基准程序工具（db2batch）。此工具使用许多准则，以用于创建基准程序。此工具可以从平面文件或标准输入读取SQL语句，动态地描述和准备这些语句，并返回回答集。它还允许控制回答集的大小以及从此回答集发送至输出设备的行数。
可以指定提供的与性能相关的信息的级别，包括经过时间、CPU和缓冲池的使用情况、锁定和从数据库监视器收集的其它统计信息。如果正在对一组SQL语句进行计时，则db2batch也汇总性能结果，并提供算术和几何平均数。对于语法和选项，在命令行上输入db2batch-h。
此基准程序测试工具也有一个CLI选项。使用此选项，可以指定高速缓存的大小。在下列示例中，db2batch以CLI方式运行，其高速缓存大小为30个语句：
db2batch-dsample-fdb2batch.sql-cli30可以在远程运行db2batch。若使用基准程序工具的
-f或
-o命令参数，则：
控制选项
perf_detail和
-p（指定要返回的性能信息级别）当设置为大于1时不受支持（在远程运行时）。
除了这两项以外，
perf_detail和
-p在所有“DB2(R)通用数据库”平台上都受支持且有效。
基准程序-基准程序测试执行    
对于一种类型的数据库基准程序，选择一个配置参数并使用该参数的不同值运行该测试，直至达到最佳效果。单个测试应该包括通过相同参数值的多次迭代（例如，20或30次）来执行该应用程序以获取平均计时，这可以更清楚地显示参数更改所产生的影响。
当运行基准程序时，应该将第一次迭代（称为热身运行）视为不同于后续迭代（称为正常运行）的一种特殊情况。因为热身运行包括某些启动活动（例如，初始化缓冲池），因此，花费的时间比正常运行要稍微长一些。虽然来自热身运行的信息可能实际上是有效的，但从统计角度来说是无效的。当计算一组特定参数值的平均计时或CPU时，仅使用来自正常运行的结果。
可以考虑使用“配置顾问程序”来创建基准程序的热身运行。“配置顾问程序”问到的问题可以涉及到在进行基准程序活动期间为正常运行调整环境配置时要考虑的若干事宜。可以从“控制中心”或通过带适当选项执行db2自动配置命令来启动“配置顾问程序”。
如果基准程序测试使用单个查询，则通过刷新缓冲池来确保最小化先前查询的潜在影响。要刷新缓冲池，读取与查询无关的大量的页来填充该缓冲池。
在完成单组参数值的迭代之后，可以更改单个参数。但是，在每个迭代之间，执行下列任务，以便将基准程序的环境复原至它的初始状态：
.如果由于测试的需要更新了目录统计信息，则要确保每个迭代都使用相同的统计值。
如果测试更新了测试中使用的数据，则此数据必须保持一致。为此：
使用RESTORE实用程序来复原整个数据库。数据库的备份副本包含它的先前状态，即已准备好进行下次测试。
使用IMPORT或LOAD实用程序来复原该数据的导出副本。此方法只允许复原受影响的数据。应对包含此数据的表和索引运行REORG和RUNSTATS实用程序。
要将应用程序返回至它的原始状态，将应用程序重新绑定至数据库。
概括起来，遵循以下步骤或迭代来对数据库应用程序执行基准测试：
第一步
除下列参数外，将数据库和数据库管理器的其他调整参数保持为它们的缺省值：
对于测试的工作负载和目标很重要的那些参数。（您很少有足够的时间执行基准程序测试以调整所有参数，所以可能需要使用某些参数的最佳推测值并从该点上开始调整。)
日志大小，它应在应用程序的单元测试和系统测试期间确定。
为了使应用程序能够运行而必须更改的参数（即，为防止出现语句堆内存用完这类事件而导致产生负的SQL返回码所需的更改）。
对此初始情况运行一组迭代，然后计算平均计时或CPU。
第二步
选择一个且唯一一个调整参数来测试，并更改它的值。
第三步
运行另一组迭代，然后计算平均计时或CPU。
第四步
根据基准程序测试的结果，执行下列其中一项操作：
如果性能提高，则更改同一个参数的值并返回至第三步。继续更改此参数，直到产生最大效益为止。
如果性能降低或保持不变，则将该参数返回至其原来的值，返回至第二步，并选择新的参数。重复此过程，直到所有的参数都已被测试为止。
注:
如果您想将该性能结果绘制成图表，则要查找曲线开始上升或下降的点。
可以编写一个驱动程序，以帮助您进行基准程序测试。可使用REXX之类的语言来编写此驱动程序，或者对于基于UNIX的平台，使用shell脚本。
此驱动程序将执行基准程序，将适当的参数传送给它，通过多次迭代驱动该测试，将环境复原至一致的状态，使用新的参数值设置下一个测试，以及收集/合并测试结果。这些驱动程序可以很灵活，它们可用于运行一整套基准程序测试，分析结果，并为给定测试提供一个最终和最优参数值报告。
基准程序-基准程序评测方法    
基准程序评测方法是微处理器性能评价的重要尺度。本文在介绍基准测试程序的基础上，重点对CPU基准测试、嵌入式处理器和媒体处理器基准程序测试进行了分析，并给出了Tensilica微处理器与其它几款当今重要的微处理器的EEMBC和BDTI评测结果。
嵌入式和媒体基准测试程序包括EDN嵌入式微处理器测试程序组EEMBC(嵌入式微处理器基准测试协会)、BDTI基准测试程序组、MediaBench测试程序组以及MiBench基准测试程序组。其中，EEMBC、BDTI已经称为嵌入式处理器和媒体处理器评测事实上的标准。
EEMBC主要是开发和验证现实世界的基准测试和基准测试得分，帮助设计师选择与系统适用的嵌入式处理器。提交EEMBC进行基准测试的所有处理器都需要进行代表不同载荷和性能参数的多项测试，如通信、网络、消费、办公自动化、汽车/工业、嵌入式Java和微控制器相关的应用。EEMBC的成员包括领先的半导体、IP供应商和编译器公司，EEMBC建立了基准测试标准，并通过EEMBC验证实验室(ECL)提供通过了验证的基准测试结果。
BDTI基准测试程序组由BDTI(BerkeleyDesignTechnology)公司开发，该公司从1991年开始致力于数字信号处理器的评测工作。BDTI提供业界标准的BDTI基准测试程序，用于测试DSP处理器。BDTI还开发了用户定制的基准测试程序，专门用于某些应用领域的测试。BDTI测试程序包括FIR滤波器、IIR滤波器、FFT、向量点积和Viterbi译码。
MediaBench基准测试程序主要来自图像处理、通信和DSP应用领域。例如JPEG、MPEG、GSM、G.721话音压缩、Ghostscript和ADPCM。JPEG主要是图像压缩，MPEG用于视频传输中的编解码。Ghostscript是Postscript语言解释器，ADPCM用于自适应差分脉冲编码调整。
MiBench是一个自由的嵌入式基准测试程序组，同EEMBC类似。由于EEMBC不对专用研究人员自由开发，故密执安的研究人员对35个嵌入式程序进行编译，形成了MiBench基准测试程序组。以EEMBC为模型，MiBench分成6类：汽车电子、消费类电子、网络、办公自动化、信息安全和电信。所有程序均采用C语言写成。MiBench可以和任何嵌入式平台接口，因为所有测试均是源码开放的。[1]