| 免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版 |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
测试环境中生产工作负载的重放有助于 DBA 识别与 DB2 环境中的变更相关的潜在健壮性和性能问题。这些变更的示例如下:
- DB2 引擎的迁移或升级
- 表和索引统计的刷新
- 新安全插件的安装
- 应用程序服务器的调整
测试系统和生产系统通常不一样。比如,测试系统的内存可能比较小。为了在测试系统上逼真地模拟生产环境的工作负载,您需要扩大用户数量、实例内存个数以及内存相关参数的值。
下一节将定义用于形式化扩展的变量。然后,再讨论 用户数量和实例内存大小 的扩展。最后,本文将介绍 其他内存相关参数 和 自动化样例脚本 的扩展。
下列定义了 7 个变量将被用于本文后续部分以形式化扩展流程
- Ip:生产系统中
INSTANCE_MEMORY参数的大小 - It:测试系统中
INSTANCE_MEMORY参数的大小
- Up:生产系统中用户数量
- Ut:测试系统中用户数量
- N:内存相关参数的总量
- Mi,p:生产系统中第 i 个内存相关参数的大小
- Mi,t:测试系统中第 i 个内存相关参数的大小
本小节介绍生产系统和测试系统上的用户数量和实例内存之间的关系。为了确保一致性,分配到给定用户的内存数量在生产系统和测试系统上均保持一致。
如果 It 是固定的,那么测试系统上的最大用户数量应该通过公式 Ut = It × Up ÷ Ip 计算得出结果。
考虑以下示例。假设 Ip = 100Mb,Up = 10 个用户,而 It = 70Mb。那么测试系统上的最大用户数应该等于 Ut = 70 × 10 ÷ 100 = 7 个用户。
如果您想要在测试系统上模拟一个具体的用户数量,那么您可以计算测试系统上的实例内存大小,使用公式 It = Ut × Ip ÷ Up,这对于完成这一任务是必需的。
例如,如果您想要在测试系统上模拟 5 个用户 (Ut = 5),并且 Ip = 100Mb、Up= 10 用户,那么 It = 5 × 100 ÷ 10 = 50Mb。
用户和实例内存大小确定后,就可以确定其他内存配置参数的大小了。
可以通过下列方法之一来确定其他内存配置参数。
- 约束方法:这使得生产和测试系统上所有 内存相关的配置参数值比例保持一致。该方法可用来模拟一个具有固定内存相关参数值或者具有统一工作负载的生产系统。
- 轻松方法:这使得生产和测试系统上一些 内存相关的配置参数值比例保持一致。该方法可用来测试一个通过 DB2 引擎管理且带有内存相关参数的生产系统。
如果生产系统上的所有内存配置参数是固定的,那么约束方法是最理想的。保存内存参数值比率将生成一个逼真的测试系统。如果将其中一些参数设置为 AUTOMATIC 和/或由 Self-Tuning Memory Management (STMM) 管理,那么参数值可能随着工作负载变更而波动。这意味着固定参数值不能生成一个逼真图片。这个规则存在一个例外。如果您的工作负载是统一的,那么参数值则稳定。这意味着即使将它设置为 AUTOMATIC,该值也将不可能改变。在此用例中,即使一些参数是自动管理的,约束方法仍将生成一个很好的结果。
如果一些内存参数是自动管理的、且易变的,那么轻松方法将提供一个更为逼真的解决方案。然而,因为测试系统和生产系统上的内存实例大小是不同的,自动内存管理行为在各系统上也不相同,因此,不能总是生成完美的扩展结果。
一个综合技术,约束方法和放松方法混合,用于在生产系统上的不同工作负载下捕获参数值集合,然后在测试系统上使用每个参数集合的扩展参数值运行类似的扩展负载。
本文其余小节结构如下。首先,提供附加细节用于约束 和放松 方法实现。然后,自动化样例脚本 部分将介绍一个 Perl 脚本样例,自动执行这些方法的实现。
为了使测试系统上的所有内存参数比率保持一致,您应该禁止 STMM 并将 AUTOMATIC 设置为固定值。在测试系统上应用同生产系统相同的内存参数比率。该进程可概括如下。
Disable STMM on the test system by executing "UPDATE DB CFG USING self_tuning_mem OFF" For i = 1 .. N Set Mi,t = It × Mi,p ÷ Ip Execute "UPDATE [DB|DBM] CFG USING i-th_config_keyword Mi,t" |
轻松方法实现在本质上与约束方法相似。然而,您可以允许测试系统管理内存参数,然而在生产系统上这是自动管理的。您需要启动 STMM 并初始化有扩展值的内存参数。如果该值在生产系统上是自动管理的,那么让它们在测试系统上也自动管理,否则您应该进行手工管理。
该流程可以通过下列算法概括。
Enable STMM on the test system by executing "UPDATE DB CFG USING self_tuning_mem ON" For i = 1 .. N Set Mi,t = It × Mi,p ÷ Ip If the i-th parameter was set to AUTOMATIC on the production machine Then Execute "UPDATE [DB|DBM] CFG USING i-th_config_keyword Mi,t AUTOMATIC" Else Execute "UPDATE [DB|DBM] CFG USING i-th_config_keyword Mi,t" |
本文附带一个名为 memscaling.pm 的 Perl 样例脚本,可自动执行 约束 和 放松 方法的算法。该脚本可计算比例因子并输出测试系统的 "update [DB|DBM] cfg" 语句到一个文本文件。
捕抓数据完毕后,就可在任何电脑上执行 memscaling.pm,提供下列选项。
-
--approach_type or -a <c|r> - 内存扩展方法类型:'c',约束的,或者 'r',轻松的。
-
--db_cfg or -db <file containing db config> - 包含数据库配置的文件的名称。
-
--dbm_cfg or -dbm <file containing dbm config> - 包含数据库管理配置的文件的名称。
-
--output or -o <output file> - 输出配置文件的名称。
-
--param or -p <file containing parameters of interest> - 包含有兴趣扩展的内存相关配置参数的文件的名称。
-
--test_inst_mem_sz or -s <test instance memory size> - 在一个 4k 页的测试系统上可用于 DB2 实例的内存型号。
-
--help or -h - 提供其他文档。
若要使用脚本,您需要在文本文件中存储生产系统上的数据库和数据库管理配置,例如。您可以使用下列命令。
$db2 GET DB CFG > db.cfg $db2 GET DBM CFG > dbm.cfg |
包含内存相关配置参数的文件应该有如下格式:每行一个参数(即在 "get DB | DBM
cfg" 输出中用括号括起来的关键字),没有特定的顺序,如下示例所示。
instance_memory db_memory mon_heap_sz |
本文基于 DB2 for Linux, UNIX, and Windows 生产系统的配置,介绍如何扩展测试系统上的用户数量、DB2 实例内存以及内存相关配置参数。这些信息可以帮助您模拟生产系统创建出逼真的测试环境,从而提高对测试环境中变更的分析。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| 自动化算法的 Perl 脚本样例 | memscaling.zip | 4KB | HTTP |
学习
- 访问 DB2 V9.7 信息中心 阅读 DB2 配置参数摘要。
- 阅读 DB2 V9.7 信息中心的 自动调整内存功能概述。
- 访问 DB2 V9.7 信息中心,获取
get DB cfg命令的描述。 - 访问 DB2 V9.7 信息中心,获取
get DBM cfg命令的描述。 - 加入 讨论论坛。
- 在 developerWorks 中国网站 Information Management 专区 获取提高您 IBM Information Management 产品技能所需的资源。
- 在 developerWorks 中国网站 Information Management 专区 了解关于信息管理的更多信息,获取技术文档、how-to 文章、培训、下载、产品信息以及其他资源。
- 在 Twitter 上关注 developerWorks。
- 观看 developerWorks 演示中心,包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
获得产品和技术
- 使用 IBM 产品评估试用版软件,构建您的下一个开发项目,可直接从 developerWorks 下载,或者花费几个小时在 IBM SOA 人员沙箱 学习如何高效实现 Service Oriented Architecture。
讨论
- 参与论坛讨论。
- 查看 developerWorks 博客 并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

Enzo Cialini 是 IBM 多伦多实验室 IBM Information Management Software 部门的一名资深技术研究员。他目前是 Quality Assurance Architect 主管,负责 DB2 LUW Engine(Warehouse 和 OLTP)和 Customer Operational Profiling 的管理和技术测试策略。Enzo 于 1991 年加入 IBM,并于 1992 年开始在 DB2 开发团队工作。他拥有 20 年的软件开发、测试和支持经验。Enzo 积极致力于客户管理,以及 OLTP 和 Warehouse 开发领域,并著有 The High Availability Guide for DB2 一书,在 DB2 和集成方面拥有许多专利和出版物。
