调优联邦查询

DB2 Magazine是一种专门针对数据库管理员、分析员、程序员、设计师、顾问以及MIS/DP经理的季刊,其内容涵盖了所有DB2平台(包括IBM AIX、Hewlett-Packard HP-UX、Sun Solaris、SCO UnixWare、Linux、Microsoft Windows NT、Microsoft Windows 95、Microsoft Windows 98、IBM OS/2、IBM OS/400、IBM MVS、IBM OS/390、IBM VM 和 IBM VSE)的各种主题。

为了从DB2 Information Integrator获得最佳性能,DBA需要知道哪些东西。

大多数DBA都知道,对于性能低下的SQL查询,为了发现、评估和实施有助于改善其性能的改进方法,需要完成哪些任务。然而对于联邦查询,DBA 必须学习新的技巧,拓宽一般情况下的查询调优任务列表,以便处理由DB2 Information Integrator (DB2 II) 提供的新功能。

DB2 II 支持跨多种数据源的联邦查询,这些数据源包括 SQL Server、Oracle、Informix、Sybase 和 DB2 Universal Database (UDB) for z/OS,以及 iSeries、Linux、Unix 和 Window。DB2 II 产品是一个中间件,其中包含的优化和数据访问技术,充分调动了底层数据源的能力,并为这些不同的源提供一种统一访问语言(SQL)。

DB2 II 产品已经为那些之前不能访问或者不易访问的信息源敞开了大门。尽管如此,随着每一项新的数据支持技术的出现,新的调优机会也应运而生。使用 DB2 II 并不确保最优执行每一个查询。DBA 要做的工作,仍然是发现和调优性能低下的查询。

联邦对象带来了新的挑战。在这一期,我将解释调优联邦查询时所需的任务和工具。本文假设您对 DB2 II 有一个基本的了解。您可以通过在参考资料小节中列出的文章,或者通过 ibm.com/software/data/integration 温习 DB2 II 方面的知识。如果您想了解 Merrill Lynch(我的雇主),是如何利用 DB2 II 解决现实生活中的业务问题的,请参阅文章 "Taming the Beast"。

基本调优任务

对任何性能低下的 SQL 语句进行调优都需要一种有条不紊的方法。毫无计划地更改参数只能让每一次做出的更改难于判断效果。如果某一次更改对性能起了反作用,那么您需要知道应该退回到哪一次更改。

不管调优什么 SQL,都应该执行以下任务:

评估当前性能,并记录到文档。

与创建查询的人会谈,并得出合理的性能预期。

建立查询的业务目标。

对于来自生产系统的查询,获得一个 Explain 计划。

如果可行的话,在测试系统上重建环境,并重新运行查询。

对于与查询相关的所有表,确信最近在这些表上执行了 Runstats 或与之等价的远程命令。

确保各个表的重组,以匹配它们的集群索引。

查找 WHERE 子句中索引列上的 SQL 函数,这些函数可能导致优化器忽略了索引。

确保在 WHERE 子句中尽可能使用索引列。

查找笛卡儿积(Cartesian products)。

跟踪每一项更改的效果,每次跟踪一项。

联邦调优任务

由于联邦查询连接到了不同的数据源,调优的第一步是将查询分解为两部分:本地和远程。本地部分使用驻留在 DB2 II 服务器上的对象,而远程部分使用驻留在远程主机上的对象。通过这种方式划分联邦查询,有助于判断影响性能问题的根源。

DB2 II 服务器中的所有联邦对象在 syscat.tables 编目表中都是以昵称(TYPE=N)的形式标识的。也可以通过 EXPLAIN 命令识别查询中的联邦对象,该命令将显示 DB2 II 引擎选择的全局访问计划。EXPLAIN 命令的输出是判断优化器是否将为查询使用“叠加(push-down)”处理(即在远程服务器上执行的处理)的惟一途径。DB2 II 使用来自包装器、服务器和昵称对象的信息,来判断什么任务可以叠加到远程服务器。

清单 1 展示了一个存储在 db2ii-query.sql 文件中的联邦查询的实例。以粗体标记的表(mids.tbacct 和 mids.tbacct -hldr)上的查询引用了远程对象。而表 table hjg.iitbl 则是在 DB2 II 服务器本地。Explain 将把这个查询分解成几个部分。对于将要使用叠加处理的部分,以 ship 这个词标记。清单 2 展示了 Explain 输出的一个缩节本。优化器将子查询 #1 标记为“shipable”。

清单 1. 联邦 SQL 查询

db2expln -d dbdsdr -stmtfile db2ii-query.sql -o db2ii-query.out -terminator ";" -g
select a.dsssca-no
, a.dssas-ty-cd
, imlp-1st-nm
, imlp-lst-nm
, mlp-st-cd
ac-eom-ast-am
from mids.tbacct a
, mids.tbacct-hldr ah
,hjg.iitbl
where a.dsssca-no =ah.dsssca-no
and ac-eom-ast-am > 1000000
and st-cd =mlp-st-cd and-mlp-st cd ='ny'
fetch first 1 rows only

清单 2. Explain 输出,其中标记了要做叠加处理的查询

| Ship Distributed Subquery #1
| | #Columns = 6
Return Data to Application
| #Columns = 6

查询的这个部分由优化器生成,其中只包含那些访问远程数据源的对象。清单 3 展示了 Explain 输出的一部分,其中有重写后的查询。这个清单中的输出含有关于查询的信息,包括将被发送到远程数据源的 SQL、使用的昵称以及远程服务器的名称及相关版本(在这里是 MIDASP)。如果您对完整的 Explain 输出有兴趣的话,请下载文件: IBM DB2 Universal Database SQL Explain Tool (DOC, 30K)。

清单 3. 优化器重写的访问远程对象的查询。Distributed Substatement #1:

Server: MIDASP (DB2/UDB 7.1)
SQL Statement:
SELECT A0."DSSSCA-NO", A0."AC-EOM-AST-AM", A0."DSSAS-TY-CD", A1."MLP-ST- CD", A1."IMLP-1ST-NM", A1."IMLP-LST-NM"
FROM "MIDS"."TBACCT" A0, "MIDS"."TBACCT-HLDR" A1
WHERE (1000000 < A0."AC-EOM-AST-AM") AND (A1."MLP-ST-CD" ='NY') AND (A0."DSSSCA-NO" =A1."DSSSCA-NO") FOR READ ONLY
Nicknames Referenced:
MIDS.TBACCT-HLDR ID = 33125
Base = MIDS.TBACCT-HLDR
MIDS.TBACCT ID = 33124
Base = MIDS.TBACCT

时间: 2024-12-31 19:31:48

调优联邦查询的相关文章

SQL Server 性能调优之查询从20秒至2秒的处理方法

一.需求 需求很简单,就是需要查询一个报表,只有1个表,数据量大约60万左右,但是中间有些逻辑. 先说明一下服务器配置情况:1核CPU.2GB内存.机械硬盘.Sqlserver 2008 R2.Windows Server2008 R2 SP1和阿里云的服务器,简单说就是阿里云最差的服务器. 1.原始表结构 非常简单的一张表,这次不讨论数据冗余和表字段的设计,如是否可以把Project和Baojian提出成一个表等等,这个是原始表结构,这个目前是没有办法改变的. 2.查询的sql语句为 sele

数据库性能调优技术

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

LAMP系统性能调优之MySQL服务器调优

如今,开发人员不断地开发和部署使用LAMP(Linux.Apache.MySQL 和 PHP/Perl)架构的应用程序.但是,服务器管理员常常对应用程序本身没有什么控制能力,因为应用程序是别人编写的.本文重点讨论为实现最高效率而对数据库层进行的调优. 关于 MySQL 调优 有3 种方法可以加快 MySQL服务器的运行速度,效率从低到高依次为: 替换有问题的硬件. 对MySQL进程的设置进行调优. 对查询进行优化. 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源.不过这种解

oracle数据库性能调优技术:索引调优

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

如何对MySQL服务器进行调优

如今,开发人员不断地开发和部署使用LAMP(Linux?.Apache.MySQL 和 PHP/Perl)架构的应用程序.但是,服务器管理员常常对应用程序本身没有什么控制能力,因为应用程序是别人编写的.本文重点讨论为实现最高效率而对数据库层进行的调优. 有3种方法可以加快MySQL服务器的运行速度,效率从低到高依次为: 替换有问题的硬件.对MySQL进程的设置进行调优.对查询进行优化. 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源.不过这种解决方案也就仅限于此了.实际上,

mysql服务器的几个调优技巧,让 MySQL 服务器飞速运行

关于 MySQL 调优 有 3 种方法可以加快 MySQL 服务器的运行速度,效率从低到高依次为: 替换有问题的硬件. 对 MySQL 进程的设置进行调优. 对查询进行优化. 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源.不过这种解决方案也就仅限于此了.实际上,您通常可以让中央处理器(CPU)或磁盘速度加倍,也可以让内存增大 4 到 8 倍. 第二种方法是对 MySQL 服务器(也称为 mysqld) 进行调优.对这个进程进行调优意味着适当地分配内存,并让 mysqld

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.4 支持窗口函数的查询元素

1.4 支持窗口函数的查询元素 T-SQL性能调优秘笈--基于SQL Server 2012 窗口函数 并不是所有的查询子句都支持窗口函数,相反,仅仅SELECT和ORDER BY子句支持窗口函数.为了帮助大家理解这个约束的原因,我首先要解释查询逻辑处理的概念.然后,我会介绍支持窗口函数的子句,最后,解释如何在其他子句中避开约束. 1.4.1 查询逻辑处理 查询逻辑处理从概念性的角度描述SELECT查询是如何根据逻辑语言的设计进行判断的.它描述了怎样由查询的输入表,经由一系列步骤和阶段,直到查询

SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行)

原文:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 前言 前面几篇我们分析了关于SQL Server关于性能调优的一系列内容,我把它分为两个模块. 第一个模块注重基础内容的掌握,共分6篇文章完成,内容涵盖一系列基础运算算法,详细分析了如何查看执行计划.掌握执行计划优化点,并一一列举了日常我们平常所写的T-SQL语句所会应用的运算符.我相信你平常所写的T-SQL语句在这几篇文章中都能找到相应的分解运算符. 第二个模块注重SQL Server执行T-SQL语句的时候

我如何调优SQL Server查询

原文:我如何调优SQL Server查询 我是个懒人,我只想干尽可能少的活.当我干活的时候我不想太多.是,你没看错,这看起来很糟糕,作为一个DBA这很不合格.但在今天的文章里,我想给你展示下,当你想对特定查询创建索引设计时,你如何把你的工作和思考过程传达给查询优化器.听起来很有意思?嗯,那就进入我的索引调优世界吧! 有问题的查询 我们来看下列查询: 1 DECLARE @i INT = 999 2 SELECT 3 SalesOrderID, 4 SalesOrderDetailID, 5 Ca