【问题标题】:Performance hit on DB2 transactional database after linking to SQL Server 2005链接到 SQL Server 2005 后 DB2 事务数据库的性能受到影响
【发布时间】:2014-02-04 09:44:55
【问题描述】:

我们有一个 AS400 大型机运行我们的 DB2 事务数据库。我们还有一个 SQL Server 设置,它每晚都会加载来自 AS400 的数据。 SQL Server 设置用于报告。

我可以链接两个数据库服务器,但是,有人担心来自 SQL Server 的查询会对 DB2 造成多大的性能影响。

基本上,担心的是,如果我们开始使用来自 SQL Server 的查询来访问 DB2,我们将陷入事务系统并搞砸订单和运输。

在此先感谢您提供任何可以分享的知识。

【问题讨论】:

  • 当前 IBM i 机器配置是什么?硬件型号、主存和磁盘大小(尤其是臂数)?每小时有多少额外的交易?每个事务的宽度(即您将获得每行 1000 个字节还是 100 个字节)决定了网络带宽以及磁盘负载。顺便说一句,考虑将更改从 DB2 推送到 SQL Server,而不是尝试从 SQL Server 中提取,因为那样只会将更改移动到 SQL Server。
  • 我没有这些细节,但你的问题似乎已经表明这个问题没有合适的答案。基本上有一个文化问题,即害怕任何新事物,并且经理会说新想法会破坏系统的性能(例如,我们的任何 SQL Server 表上都没有一个索引,因为“索引使数据库运行缓慢” .
  • 我们正在尝试做的事情是获取报告(导出到 Excel)以实时(或非常接近实时)生成。该报告大约有 1,000 行,大约 16 个字段,来自大约 5 个文件。
  • 在 IBM i 人员正在监视和监视的同时,您是否有机会执行查询以从 5 个文件中获取 16 个字段的 1,000 行?如果您的查询的影响可以忽略不计,并且我的人可以看到这一点,那么让您将查询设置为按需运行也许他们会更舒服。

标签: sql-server-2005 db2 ibm-midrange linked-server transactional-database


【解决方案1】:

任何对性能问题有正确答案的人都是错误的 :-) 适当的答案是总是“视情况而定”。性能调优最好通过测量来完成,改变一个变量,重复。

DB2 for i 甚至不会注意到有人执行了 1,000 行的 SELECT 语句。接受 Benny 的建议,在 IBM i 旁观时运行一个。如果他们需要提示,请使用 WRKACTJOB 并在 Int 列上排序。这代表交互式响应时间。我猜想查询将在他们有时间注意到它处于活动状态之前完成。

如果管理层认为这不可接受,那么可能会提议在几个小时之前或之后对其进行测试,因为它不可能影响交互性能。

顺便说一句,RPG 开发人员也可以即时创建 Excel 电子表格。 Scott Klement 在 Java POI/HSSF 类上发布了一些 RPG 包装器。此外,Easy400.net 的 Giovanni Perrotti 提供了一些从网页提供 Excel 电子表格的示例。

【讨论】:

  • 完全同意你的观点,巴克。我还会提到DBG/400 软件,它可以快速轻松地创建 CSV 文件。显然 CSV 不是真正的 Excel 电子表格,但我的一位客户已经对它们感到满意十多年了 :-)
  • 感谢大家的投入——关于性能的最佳答案绝对是“视情况而定”。不幸的是,没有机会测试任何东西,因为问题已经转移到“不要在我们的舒适区之外做任何事情”的程度。我可能会像一个红头发的继子一样打 DB2,他们不会知道,但我还有其他的战斗要打。
  • 回复:Excel 文件。虽然一个 1000 行的查询,即使是来自多个文件(表)的查询,即使对于一个普通的 i 服务器来说也应该毫不费力,相比之下,生成一个 16 列的 1000 行 Excel 文件非常非常慢。并且使用来自 RPG 的重复 Java 调用(这是 Scott 的东西所做的,而 Giovanni 的东西似乎只是 Scott 的包装器的包装器)这样做是非常慢。斯科特会亲自告诉你。
  • 回复:回复:Excel 文件。也就是说,它仍然可能足够快。还有其他选项可以直接在 i 上生成 Excel 文件。 PHP 和 Python 是最好的例子,它们都可能比 RPG-to-POI 界面更容易使用,尤其是在混合平台商店中,就像 OP 一样。
【解决方案2】:

我基本同意 Buck,1000 行的结果集没什么大不了的......

当然,除非系统正在查看数百个表中的数十亿行以获得您感兴趣的 1000 行。

假设存在有用的索引,1000 行应该没什么大不了的。如果您安装了 IBM i Access for Windows,则 System i Navigator 有一个名为“Run SQL Scripts”的组件,其中包括提供查询执行计划的可视化解释的“Visual Explain”。查看您可以确保正在使用索引。

在关键的事情上,确保工作正在 i 上完成。当使用标准链接表时,MS SQL Server 将尝试拉回所有行,然后执行它自己的“位置”。

从 MYLINK.MYIBMI.MYLIB.MYTABE 中选择 *,其中 MYKEYFLD = '00335';

而这种格式将语句发送到远程服务器进行处理并返回结果:

select * from openquery(MYLINK, 'select * from mylib.mytable where MYKEYFLD = ''00335''');

或者,您可以要求 i 伙计们为您构建一个存储过程,您可以调用该存储过程来取回您正在寻找的结果。就个人而言,这是我的首选方法。

查尔斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多