跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

Informix 数据仓库加速器原理与实践,第 3 部分: IWA 数据集市部署、装载及使用方法与实践

张光业, 技术支持工程师, IBM
张光业,目前在 IBM 软件部工作,主要负责开发商在数据库和数据仓库方面产品的技术支持和培训,在 IT 行业有丰富的工作经验。是 IBM 认证的 DB2 UDB 高级技术专家。

简介: 本文,作为“Informix 数据仓库加速器原理与实践”系列文章的第三部分,具体为大家介绍了 Informix 数据仓库加速器 IWA(Informix Warehouse Aaccelerator) 创建数据集市、部署及装载数据集市的基本方法,并为大家介绍使用 Informix 数据仓库加速器 IWA(Informix Warehouse Aaccelerator) 加速查询的使用方法。望能够帮助大家快速掌握利用 Informix 数据仓库加速器 IWA 优化分析应用的基本方法。

查看本系列更多内容

发布日期: 2012 年 2 月 09 日
级别: 初级
访问情况 : 514 次浏览
评论: 


免费下载:IBM® Informix® 11.7 试用版(包括 Ultimate Edition、Developer Edition 和 Innovator-C Edition)
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

在“Informix 数据仓库加速器原理与实践”系列文章的第二部分中,我们为大家介绍了 Informix 数据仓库加速器 IWA(Informix Warehouse Aaccelerator) 使用的具体场景、安装及部署的基本方法与要求、IWA 配置的基本方法。在本文中,我们会为大家介绍 Informix 数据仓库加速器 IWA(Informix Warehouse Aaccelerator) 创建数据集市、部署及装载数据集市的基本方法,并为大家介绍使用 Informix 数据仓库加速器 IWA(Informix Warehouse Aaccelerator) 加速查询的使用方法,希望能够帮助大家快速掌握利用 Informix 数据仓库加速器 IWA 优化分析应用的基本方法。

创建数据集市

首先,我们需要设计一个高效的数据集市。数据集市是数据仓库的子集,主要针对某一主题或某一部门分析应用来设计,数据集市通常是基于星型模型或雪花型模型进行设计。我们可以通过分析用户特定查询需求、用户查询语句来设计合理的数据集市,来满足用户的查询分析需求。有时,我们对用户的查询语句不太了解,我们也可以通过使用 SQLTRAC 语句来分析用户查询负载来帮助我们设计合理的数据集市。 为了提高查询性能,在数据集市定义时,我们会设计合理数量的维表以及维表中的字段。

在我们设计数据集市时,并不要求事实表一定和 Informix 数据仓库中的事实表相同。默认情况下,在使用 Informix 数据仓库加速器管理工具 IBM Smart Analytics Optimizer Studio 定义数据集市时,会将数据集市中最大的表设置为事实表,我们也可以自己指定数据集市中的事实表。

在本次示例中,我们设计了 WebSales_Mart 数据集市,如下图所示,它包括了 web_sales 事实表及 time_dim、web_page、date_dim、iyem、customer、promotion、warehouse、website、ship_mode 等维表。


图 1. WebSales_Mart 数据集市星型模型
图 1.  WebSales_Mart 数据集市星型模型

设计好数据集市之后,我们需要在 Informix 数据仓库加速器管理工具 IBM Smart Analytics Optimizer Studio 中创建数据集市的定义。数据集市定义信息保存在 XML 文件中,它描述了数据集市中定义的表、字段以及表和表之间的关系。XML 文件只保存数据集市的定义信息,但不包含用户实际数据。 当部署数据集市时,数据集市定义信息被传送给 IWA,数据集市成功部署后,IWA 会将数据集市定义信息以 SQL 语句形式返回给 Informix 数据库并在 Informix 数据库系统表中创建 accelerated query table or AQT,当用户发出查询请求后,Informix 优化器会将用户查询语句同 AQT 进行匹配,满足条件的查询语句会被重路由到 IWA 中来加快查询速度。

在 IWA 中,我们可以采用两种方法来创建数据集市的定义:使用 IBM Smart Analytics Optimizer Studio 图形管理工具或通过工作负载分析来创建数据集市。

使用 IBM Smart Analytics Optimizer Studio 创建数据集市

首先,我们要在 IBM Smart Analytics Optimizer Studio 中创建一个 accelerator 工程。如下图所示,在本次示例中,我们创建了 IWADEMO 工程。


图 2. 创建 IWADEMO 工程
图 2.  创建 IWADEMO 工程

接下来,我们在 IWADEMO 工程中使用 New Data Mart wizard 创建 WebSales_Mart 数据集市,如下图所示。


图 3. 创建 WebSales_Mart 数据集市
图 3.  创建 WebSales_Mart 数据集市

并添加 dwa_ds.web_site 事实表及相关维表到 WebSales_Mart 数据集市,如下图所示,我们选择 dwa_ds.web_site 作为事实表,并通过参照完整性约束来添加相关的维表。我们也可以自己定义数据集市中事实表以及维表之间的连接。


图 4. 添加事实表及相关维表到 WebSales_Mart 数据集市
图 4. 添加事实表及相关维表到 WebSales_Mart 数据集市

如下图所示,我们选择了 dwa_ds.web_site 事实表及相关维表添加到 WebSales_Mart 数据集市中。


图 5. 添加 dwa_ds.web_site 事实表及相关维表添加到 WebSales_Mart
图 5. 添加 dwa_ds.web_site 事实表及相关维表添加到 WebSales_Mart

同时,我们要为数据集市中的每一张表选择需要装载数据的字段。如下图所示,在本次示例中,数据集市中的每一张表都选择了所有字段。当选择好表中的数据装载字段后,IBM Smart Analytics Optimizer Studio 会为数据集市定义中的事实表及维表估算空间大小,我们可以以此来估算整个数据集市的空间大小。


图 6. 选择字段信息
图 6. 选择字段信息

我们可以在 IBM Smart Analytics Optimizer Studio 工具的 Project Explorer 窗口中查看我们定义的数据集市定义信息。如下图所示,在 IWADEMO 工程中,我们定义了 WebSales_Mart 数据集市。当我们在 IBM Smart Analytics Optimizer Studio 工具中定义好数据集市后,数据集市定义信息会以 XML 文件形式保存在项目工作空间中。


图 7. 数据集市定义信息
图 7. 数据集市定义信息

在定义好数据集市后,我们需要对创建的数据集市定义进行完整性验证,如下图所示,我们在 WebSales_Mart 数据集市上点击右键选择 Validate 对 WebSales_Mart 数据集市进行完整性验证。


图 8. 验证 WebSales_Mart 数据集市
图 8. 验证 WebSales_Mart 数据集市

通过工作负载分析来创建数据集市

从 Informix 11.7xC3 开始,我们支持通过工作负载分析来创建数据集市。当我们对数据库表结构及应用查询语句不太了解,或者数据库包含太多表时,我们可以采用通过工作负载分析来创建数据集市。当我们采用通过工作负载分析来创建数据集市时,我们访问的数据库必须是本地数据库,并且设置了默认的智能大对象表空间 (smart blob space)。

通过工作负载分析来创建数据集市主要包括 2 个步骤:查询探寻 (query probing) 及数据分析 (data analysis)。

查询探寻用于收集有关查询工作负载的信息,数据分析用来将收集到的查询工作负载信息及数据库表结构信息进行分析,并最终生成数据集市定义信息。

首先,我们需要执行 update statistics low 命令来收集数据库最基本的统计信息。如下边所示。

接下来,我们通过执行 set environment use_dwa 'probe start'命令来启动数据探寻功能。我们可以在应用程序中或者通过使用 sysdbopen() 过程来运行该命令。当启动数据探寻功能后,我们就可以开始收集用户执行的所有查询语句信息。我们还可以通过使用 SQL tracing 功能来为收集到的每一条查询语句指定一个 statement ID,并根据我们所关心的部分查询语句来生成数据集市定义,比如说,我们可以基于查询时间大于 5 秒的查询语句来生成数据集市定义。有关 SQL tracing 功能的具体使用方法,大家可以参考 Informix 相关手册。收集到的探寻数据将保存在内存中。

我们还可以在执行用户查询语句之前执行 set explain on avoid_execute 语句来加快数据探索的过程,如下边所示,当我们执行 set explain on avoid_execute 语句后,用户的所有查询语句将会被编译,探寻的数据将会被收集,但用户的查询语句不会被执行,数据探索的过程会大大加快。

在本次示例中,为了提高数据探索的过程的速度,我们执行了 set explain on avoid_execute 语句。

接下来的 SQL 语句用来模拟用户的查询工作负载,并通过分析用户的这些查询语句来生成数据集市的定义。数据探寻过程需要确定查询的事实表。我们可以通过 +FACT 提示来指定事实表,如果没有指定,数据量最大的表将被确定为事实表。


清单 1. 通过分析查询工作负载生成数据集市定义
				
 informix@informixva[demo_on]:~/scripts$vi workload_analysis.sql
 update statistics low; 
 set environment use_dwa 'probe start'; 
 set explain on avoid_execute; 
 select {+FACT(web_sales)} first 100 sum(ws_net_paid) as total_sum, i_category, i_class 
 from web_sales, date_dim d1, item 
 where d1.d_year = 2002 and d1.d_date_sk = ws_sold_date_sk and i_item_sk = ws_item_sk 
 group by 2,3 order by 2,3; 

 select  {+FACT(web_sales)} first 1000 a.ca_state state, count(*) cnt 
 from customer_address a, customer c, web_sales s, date_dim d, item i 
 where a.ca_address_sk = c.c_current_addr_sk and c.c_customer_sk = s.ws_bill_customer_sk 
 and s.ws_sold_date_sk = d.d_date_sk and s.ws_item_sk = i.i_item_sk 
 and d.d_month_seq >= 2 and i.i_current_price > 50.00 
 group by a.ca_state having count(*) >= 10 order by cnt; 

 select  {+FACT(web_sales)} first 1000 i_item_id, avg(ws_quantity) agg1, 
 avg(ws_list_price) agg2, avg(ws_coupon_amt) agg3,avg(ws_sales_price) agg4 
 from web_sales, customer_demographics, date_dim, item, promotion 
 where ws_sold_date_sk = d_date_sk and ws_item_sk = i_item_sk and 
 ws_bill_cdemo_sk =cd_demo_sk and ws_promo_sk = p_promo_sk and cd_gender = 'F' and 
 cd_marital_status = 'M' and cd_education_status = 'College' and 
 (p_channel_email = 'N' or p_channel_event = 'N') and d_year = 2001 
 group by i_item_id 
 order by i_item_id,agg1,agg2,agg3,agg4; 

当收集到用户查询语句后,我们可以通过执行 onstat -g probe 语句或通过查询 sysprobetables、sysprobecolumns、sysprobejds 及 sysprobejps 系统表来查看收集到的查询语句信息。如下边所示,我们通过执行 onstat -g probe 语句来查看收集到的查询信息。


清单 2. 执行 onstat -g probe 语句来查看收集到的查询信息
				
 informix@informixva[demo_on]:~/scripts$onstat -g probe
 IBM Informix Dynamic Server Version 11.70.FC3 -- On-Line -- Up 01:44:36 -- 190288 Kbytes 
 DWA probing data for database ds2: 
 statement -1: 
 columns: tabid[colno,...] 
     102[1,9] 
     103[1,2,3,4] 
     104[1,4,7] 
     110[1,2,6,11,13] 
     113[1,5] 
     118[1,10,15] 
     123[1,4,5,6,17,19,21,22,28,30] f 
 joins:   tabid[colno,...] = tabid[colno,...] (type) {u:unique} 
     123[17] = 118[1] (inner) u 
     123[6] = 103[1] (inner) u 
     113[5] = 102[1] (inner) u 
     123[5] = 113[1] (inner) u 
     123[4] = 110[1] (inner) u 
     123[1] = 104[1] (inner) u 

其中,tabid 表示收集到的表信息,colno 表示该表中所包含的字段信息,f 表示它所在的表为事实表,joins 表示表和表之间的连接关系,(inner) 表示表和表采用内连接方式,118[1] (inner) u 表示 tabid 为 118 表的第一个字段上有唯一索引。

接下来,我们需要创建一个新的带日志的数据库来保存数据集市定义信息,它必须是一个单独的数据库,不能使用已有的数据仓库数据库。如下边所示,在本次示例中,我们创建了 marts_stores 数据库。

我们通过执行 execute procedure probe2mart('ds2','WebSales_Mart') 语句将从 ds2 数据库中收集到的查询语句信息转换为 WebSales_Mart 数据集市定义信息并保存到 marts_stores 数据库中的一系列表中。我们也可以使用 SQL tracing 功能基于收集到的部分查询语句来生成数据集市定义,如:执行下边语句来选择执行时间大于 10 秒的语句来生成数据集市定义。


清单 3. 选择执行时间大于 10 秒的语句来生成数据集市定义
				
 SELECT probe2mart( ‘ ds2 ’ , ’ WebSales_Mart ’ ,sql_id) 
 FROM sysmaster:syssqltrace 
 WHERE sql_runtime > 10; 

我们通过执行 execute function lotofile(genmartdef('WebSales_Mart'),'WebSales_Mart.xml!','client') 语句生成 XML 形式的 WebSales_Mart 数据集市定义信息,并将其保存在客户端的 WebSales_Mart.xml 文件中。

最后,我们要将创建的 WebSales_Mart 数据集市定义文件导入到 IBM Smart Analytics Optimizer Studio。我们先要在 IBM Smart Analytics Optimizer Studio 中创建一个 accelerator 工程,在本次示例中,我们创建了 IWADEMO 工程,并在 IWADEMO 工程上点击右键选择 Import-> Data Mart Import,将我们创建的 WebSales_Mart.xml 文件导入 IBM Smart Analytics Optimizer Studio。


清单 4. 将 WebSales_Mart.xml 文件导入 IBM Smart Analytics Optimizer Studio
				
 informix@informixva[demo_on]:~/scripts$ dbaccess ds2 -
 Database selected. 
 > create database marts_stores with log;
  Database closed. 
  Database created. 
 > connect to 'marts_stores';
  Disconnected. 
  Connected. 
 > execute procedure probe2mart('ds2','WebSales_Mart');
  Routine executed. 
 > execute function lotofile(genmartdef('WebSales_Mart'),'WebSales_Mart.xml!','client'); 
  (expression)  WebSales_Mart.xml 
  1 row(s) retrieved. 

另外,如下边所示,我们可以通过在 ds2 数据库中执行 set environment use_dwa 'probe cleanup'语句清除收集到的查询语句信息。


清单 5. 执行'probe cleanup'语句清除收集到的查询语句信息
				
 informix@informixva[demo_on]:~/scripts$ dbaccess ds2 -
 Database selected. 
 > set environment use_dwa 'probe cleanup';
  Environment set. 


部署并装载数据集市

当我们生成好 XML 形式的数据集市定义信息后,我们需要将其部署到 IWA 中。当部署数据集市时,数据集市定义信息被传送给 IWA,数据集市成功部署后,IWA 会将数据集市定义信息以 SQL 语句形式返回给 Informix 数据库并在 Informix 数据库系统表中创建 accelerated query table or AQT 来匹配用户的查询语句。我们可以采用 IBM Smart Analytics Optimizer Studio 工具或 java CLI 来部署数据集市。

当数据集市成功部署后,数据集市处于 LOAD PENDING 状态,并且不可用,直到数据装载完成后,该数据集市才可以使用。

在数据装载过程中,Informix 数据库中相关的数据自动装入数据集市中,装载完成后,数据集市可以使用并处于活动状态。我们也可以将数据技术设置为不可用,这样,该数据集市将不会被查询语句所使用。同样,我们可以采用 IBM Smart Analytics Optimizer Studio 工具或 java CLI 来装载数据集市。

使用 IBM Smart Analytics Optimizer Studio 部署并装载数据集市

如下图所示,我们在 IBM Smart Analytics Optimizer Studio 工具中的 Data Source Exploer 选择 IWADEMO 加速器实例,在其属性栏中,选择 Data Marts,并点击 Deploy 按钮来部署数据集市:


图 9. 部署数据集市
图 9. 部署数据集市

在数据集市部署界面,我们可以选择部署 Accelerator 工程中的数据集市,或者部署数据集市 XML 文件,在本次示例中,我们选择部署 IWADEMO 工程中的数据集市 WebSales_Mart。同时,我们可以选择在部署完数据集市后,自动装载该数据集市。如下图所示。


图 10. 部署并装载 WebSales_Mart 数据集市
图 10. 部署并装载 WebSales_Mart 数据集市

在装载数据集市时,我们可以选择是否要对数据库中的表上锁,根据我们的业务需求,可以采用如下 3 种数据装载方式:


表 1. 数据装载的选项:
选项说明
NONE在数据装载过程中不对表加锁,数据读取方式类似于“脏读”。在数据装载过程中,其它用户会话可以修改表中的数据,会造成装载的数据不一致的情况。如果数据集市主要用于统计分析或进行趋势分析而不是查找具体数据值,这种数据不一致的现象是可以接受的。
TABLE在数据加载过程中,读取每一张表中的数据时,都会对该表加锁,这样,可以保证该表数据的一致性,但不能保证多表之间的数据一致性。
MART在数据加载过程中会对数据集市中的所有表加锁,这样可以保证数据集市中的所有表数据的一致性。但是,在数据加载过程中,其它用户会话的更新操作会被阻止。

在本次示例中,我们选择了 NONE 装载方式。

当数据集市部署并装载成功后,数据集市 WebSales_Mart 可用,并且其状态为 Active。如下图所示。这样,该数据集市就可以使用了。


图 11. 数据集市 WebSales_Mart 状态
图 11. 数据集市 WebSales_Mart 状态

同时,我们也可以在 ds2 数据库中查看到数据集市 WebSales_Mart 部署成功后所创建的 aqt49c6c50b-f25d-48c1-93fa-ec44adc4ebbe 视图,如下边所示。


清单 6. aqt49c6c50b-f25d-48c1-93fa-ec44adc4ebbe 视图信息
				
 informix@informixva[demo_on]:dbaccess ds2 -
 Database selected. 
 > select * from systables;
  tabname          aqt49c6c50b-f25d-48c1-93fa-ec44adc4ebbe 
  owner            dwa 
  partnum          0 
  tabid            206 
  rowsize          5974 
  ncols            647 
  nindexes         0 
  nrows            0.00 
  created          08/09/2011 
  version          0 
  tabtype          V 
  locklevel        B 
  npused           0.00 
  fextsize         0 
  nextsize         0 
  flags            128 
  site             IWADEMO 
  dbname           WebSales_Mart 
  type_xid         0 
  am_id            0 
  pagesize         0 
  ustlowts         
  secpolicyid      0 
  protgranularity  
  statchange       0 
  statlevel        

使用 java CLI 工具部署并装载数据集市

我们也可以通过 java CLI 工具部署并装载数据集市 WebSales_Mart,如下图所示:

使用 java createMart IWADEMO WebSales_Mart.xml 命令部署数据集市 WebSales_Mart。


清单 7. java CLI 工具部署数据集市 WebSales_Mart
				
 informix@informixva[demo_on]: java createMart IWADEMO WebSales_Mart.xml
 createMart IWADEMO WebSales_Mart.xml 
 --------------------------------------------------------------------------- 
 result message: 
 <dwa:messageOutput xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
	<message severity="informational" reason-code="AQT10000I">
              <text>The operation was completed successfully.</text>
	</message></dwa:messageOutput>
			

使用 java loadMart IWADEMO WebSales_Mart NONE 命令装载数据集市 WebSales_Mart。


清单 8. java CLI 工具装载数据集市 WebSales_Mart
				
 informix@informixva[demo_on]:~/scripts$ java loadMart IWADEMO WebSales_Mart NONE
 loadMart IWADEMO WebSales_Mart NONE 
 --------------------------------------------------------------------------- 
 result message: 
 <dwa:messageOutput xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
		<message severity="informational" reason-code="AQT10000I">
                      <text>The operation was completed successfully.</text>
	        </message></dwa:messageOutput>
			

同样,我们可以使用 java listMarts IWADEMO 命令查看 IWADEMO 实例中的数据集市信息。


清单 9. java CLI 工具查看数据集市 WebSales_Mart
				
 informix@informixva[demo_on]:~/scripts$ java listMarts IWADEMO
 listMarts IWADEMO 
 --------------------------------------------------------------------------- 
 result message: 
 <dwa:messageOutput xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
		<message severity="informational" reason-code="AQT10000I">
                      <text>The operation was completed successfully.</text>
		</message></dwa:messageOutput>
 --------------------------------------------------------------------------- 
 mart list: 
      
 mart name=" WebSales_Mart " status="Active" memoryConsumptionInMB="208" 
 lastLoadTimestamp="2011-08-13T17:34:46.005445Z" 



SQL 查询语句加速

当数据集市装载成功后,我们就可以利用数据集市来加速数据查询。如下边所示,在利用数据集市加速数据查询时,我们首先需要对数据库执行 UPDATE STATISTICS LOW 命令来收集最新的数据库统计信息。Informix 数据库优化器会根据该统计信息来评估用户查询语句的事实表是否和 AQT 中的事实表相同,如果不相同,该查询语句就不会重定向到 IWA 中去运行。接下来,我们需要设置 PDQPRIORITY 变量,这样,Informix 优化器将会考虑 star join plan,并且可以正确选择事实表。我们还需要设置 use_dwa 变量。我们可以通过设置 use_dwa 变量来告诉 Inforix 优化器是否使用 IWA 来加速数据查询。如果我们将 use_dwa 参数设为 0,或者不进行设置,用户的查询语句将不会重定向到 IWA 来加速。如果将 use_dwa 变量设置为 1,用户的查询语句将被重定向到 IWA 来加速。use_dwa 变量具体设置,可详见如下表格:


表 2. USE_DWA 环境变量可选值:
作用描述
0禁用 IWA 查询加速功能。即使查询语句符合查询加速的条件,查询语句也不会发送给数据仓库加速器。这是 USE_DWA 的默认值。
1启用查询加速功能。这是 USE_DWA 的建议值。如果查询语句符合加速查询表 (AQTs) 的查询条件,该查询会被发送到数据仓库加速器进行处理,极速提高查询的效率。
3启用查询加速功能,并将调试信息发送到日志文件中。如果查询语句符合加速查询表 (AQTs) 的查询条件,该查询会被发送到数据仓库加速器进行处理,极速提高查询的效率。同时,将调试信息保存到 Informix 的消息文件中。

我们可以在 sysdbopen() 存储过程中设置 use_dwa 变量值,这样可以避免修改应用程序,我们也可以在客户端手工设置该变量。如下边所示,在本次示例中,我们通过 set environment use_dwa '1'命令设置该变量,并允许查询语句被重定向到 IWA 来加速查询。

为了能够更好地查看用户查询语句是否被重定向到 IWA,在示例中,我们对执行的 SQL 语句收集其执行计划,但不执行该语句。这样,我们可以通过查看 SQL 语句的执行计划来检查 SQL 语句是否被重定向到 IWA 来加速查询。


清单 10. query1_iwa.sql 查询语句
				
 informix@informixva[demo_on]: cat query1_iwa.sql
 set explain file to '/tmp/query1_iwa.out'; 
 set explain on avoid_execute; 
 set environment use_dwa '1'; 
 set PDQPRIORITY 100; 
 select first 100 sum(ws_net_paid) as total_sum ,i_category,i_class 
 from web_sales,date_dim d1,item 
 where d1.d_year = 2002 and d1.d_date_sk = ws_sold_date_sk 
 and i_item_sk = ws_item_sk 
 group by 2,3 order by 2,3; 
 set explain off; 

通过执行上边语句,如下边所示,我们收集到该查询语句的执行计划:


清单 11. 运行 query1_iwa.sql 查询语句
				
 informix@informixva[demo_on]: dbaccess ds2 query1_iwa.sql
 Database selected. 
 Explain set. 
 Explain set. 
 Environment set. 
 PDQ Priority set. 
 No rows found. 
 Explain set. 
 Database closed. 

通过查看该查询语句的执行计划,如下边所示,我们可以看到,Informix 优化器选择了 ds2@IWADEMO:dwa.aqt49c6c50b-f25d-48c1-93fa-ec44adc4ebbe: REMOTE PATH,也就意味着该查询语句被重定向到 IWA 来加速查询。


清单 12. 查询 query1_iwa.sql 语句执行计划
				
 informix@informixva[demo_on]:/tmp$ cat query1_iwa.out
 QUERY: (ISAO-Avoid_Execute)(OPTIMIZATION TIMESTAMP: 08-09-2011 10:20:07) 
 ------ 
 select first 100 sum(ws_net_paid) as total_sum,i_category,i_class 
 from web_sales,date_dim d1,item 
 where d1.d_year = 2002 and d1.d_date_sk = ws_sold_date_sk and i_item_sk = ws_item_sk 
 group by 2,3 
 order by 2,3 

 Estimated Cost: 115978 
 Estimated # of Rows Returned: 110 
 Maximum Threads: 0 

 1) ds2@IWADEMO:dwa.aqt49c6c50b-f25d-48c1-93fa-ec44adc4ebbe: REMOTE PATH 

 Remote SQL Request: 
 {QUERY {FROM  dwa.aqt49c6c50b-f25d-48c1-93fa-ec44adc4ebbe} {WHERE 
 (({= COL570 2002 } {ISNOTNULL COL564 } ){ISNOTNULL COL104 } )} 
 {SELECT {SUM COL186 } {SYSCAST COL116 AS CHAR 50 819} {SYSCAST 
 COL114 AS CHAR 50 819} } {GROUP COL116 COL114 } {ORDER COL116  ASC 
 NULLSFIRST COL114  ASC  NULLSFIRST } {NUMROWS 100 } } 
 QUERY: (IDS-Avoid_Execute)(OPTIMIZATION TIMESTAMP: 08-09-2011 10:20:07) 

 ------ 
 select first 100 sum(ws_net_paid) as total_sum,i_category,i_class 
 from web_sales,date_dim d1,item 
 where d1.d_year = 2002 and d1.d_date_sk = ws_sold_date_sk and i_item_sk = ws_item_sk 
 group by 2,3 
 order by 2,3 

 Estimated Cost: 115978 
 Estimated # of Rows Returned: 110 
 Maximum Threads: 0 
 Temporary Files Required For: Group By 

 1) informix.d1: INDEX PATH 

 (1) Index Name: dwa_ds.date_dim_idx 
    Index Keys: d_year   (Parallel, fragments: ALL) 
    Lower Index Filter: informix.d1.d_year = 2002 

 2) dwa_ds.web_sales: INDEX PATH 

 (1) Index Name: informix. 123_187 
    Index Keys: ws_sold_date_sk   (Parallel, fragments: ALL) 
    Lower Index Filter: informix.d1.d_date_sk = dwa_ds.web_sales.ws_sold_date_sk 
    NESTED LOOP JOIN 

 3) dwa_ds.item: INDEX PATH 

 (1) Index Name: informix. 110_55 
    Index Keys: i_item_sk   (Parallel, fragments: ALL) 
    Lower Index Filter: dwa_ds.item.i_item_sk = dwa_ds.web_sales.ws_item_sk 
    NESTED LOOP JOIN 

如果我们执行 set environment use_dwa '0'语句将 use_dwa 变量设置为 0,执行相同的查询语句,如下边所示,通过查看该语句的执行计划,我们可以看到,Informix 优化器选择了 dwa_ds.web_sales 事实表,也就意味着该查询语句在 Informix 数据库中执行,并没有重定向到 IWA 中。


清单 13. 查询 query1_without_iwa.sql 语句执行计划
				
 informix@informixva[demo_on]:cat query1_without_iwa.sql
 set explain file to '/tmp/query1_without_iwa.out'; 
 set explain on avoid_execute; 
 set PDQPRIORITY 100; 
 select first 100 sum(ws_net_paid) as total_sum ,i_category,i_class 
 from web_sales,date_dim d1,item 
 where d1.d_year = 2002 and d1.d_date_sk = ws_sold_date_sk 
 and i_item_sk = ws_item_sk 
 group by 2,3 order by 2,3; 
 set explain off; 

 informix@informixva[demo_on]:~$ dbaccess ds2 query1_without_iwa.sql
 Database selected. 
 Explain set. 
 Explain set. 
 Environment set. 
 PDQ Priority set. 
 No rows found. 
 Explain set. 
 Database closed. 

 informix@informixva[demo_on]:/tmp$ cat query1_without_iwa.out
 QUERY: (OPTIMIZATION TIMESTAMP: 08-09-2011 10:26:27) 
 ------ 
 select first 100 sum(ws_net_paid) as total_sum ,i_category,i_class 
 from web_sales,date_dim d1,item 
 where d1.d_year = 2002 and d1.d_date_sk = ws_sold_date_sk 
 and i_item_sk = ws_item_sk 
 group by 2,3 order by 2,3; 
 set explain off; 
        
 Estimated Cost: 115978 
 Estimated # of Rows Returned: 110 
 Maximum Threads: 1 
 Temporary Files Required For: Order By  Group By 

 1) informix.d1: INDEX PATH 

 (1) Index Name: dwa_ds.date_dim_idx 
    Index Keys: d_year   (Parallel, fragments: ALL) 
    Lower Index Filter: informix.d1.d_year = 2002 

 2) dwa_ds.web_sales: INDEX PATH 

 (1) Index Name: informix. 123_187 
    Index Keys: ws_sold_date_sk   (Parallel, fragments: ALL) 
    Lower Index Filter: informix.d1.d_date_sk = dwa_ds.web_sales.ws_sold_date_sk 
    NESTED LOOP JOIN 

 3) dwa_ds.item: INDEX PATH 
 (1) Index Name: informix. 110_55 
    Index Keys: i_item_sk   (Parallel, fragments: ALL) 
    Lower Index Filter: dwa_ds.item.i_item_sk = dwa_ds.web_sales.ws_item_sk 
    NESTED LOOP JOIN 


IWA 所在机器重启后,IWA 将如何恢复

当 IWA 所在机器由于计划停机或非计划停机重启后,保存在内存中的数据集市数据将会丢失,这时,我们需要做的是启动 IWA 服务。当 IWA 服务启动后,它会自动从 IWA 存储目录中重新加载压缩数据到内存中。IWA 不会再从 Informix 数据库服务器刷新数据集市,它仅仅是加载保存在存储目录中的当前数据集市的副本。在本实例中,IWA 的存储目录是:/data/IBM/informix/dwa/demo,该目录位置是在 dwainst.conf 配置文件中 DWADIR 参数指定的。

下表列出了 IWA 数据集市在存储目录中的具体内容:


清单 13. IWA 数据集市在存储目录中的具体内容
				
 cd /data/IBM/informix/dwa/demo/shared/data/mart-0 
 informix@informixva[demo_on]:/data/IBM/informix/dwa/demo/shared/data/mart-0$ ls
 table-0  table-10  table-12  table-3  table-5  table-7  table-9 
 table-1  table-11  table-2   table-4  table-6  table-8 
 informix@informixva[demo_on]:/data/IBM/informix/dwa/demo/shared/data/mart-0$ 

我们可以通过观察 IWA 日志文件来了解 IWA 恢复数据的过程:

tail – f /opt/IBM/informix/dwa/demo/node0.log tail – f /opt/IBM/informix/dwa/demo/node1.log


图 12. IWA 日志信息
图 12. IWA 日志信息

同时,我们还可以在 IBM Smart Analytics Optimizer Studio 中检查数据集市的状态,如果数据集市的状态是“Enabled”,说明数据集市已经恢复完成,可以正常使用了。


图 13. 数据集市 WebSales_Mart 状态
图 13. 数据集市 WebSales_Mart 状态

如何刷新 IWA 数据集市

如果 Informix 数据库数据发生变化,比较典型的是数据库增加了新的数据,我们可以采用如下步骤来刷新 IWA 中数据集市:

  1. 使 IWA 实例中的数据集市不可用
  2. 装载最新数据到 IWA 数据集市

我们可以采用 IBM Smart Analytics Optimizer Studio 工具或 java CLI 来刷新数据集市。

采用 IBM Smart Analytics Optimizer Studio 工具刷新数据集市

采用 IBM Smart Analytics Optimizer Studio 工具刷新数据集市的方法和上边介绍的数据装载的方法相同,这里就不赘述了。

采用 java CLI 工具刷新数据集市

首先,我们需要为 Java CLI 创建连接属性文件,该文件包含了连接数据库的相关信息。如下边所示,我们创建 conn.prop 文件,并设置了连接 ds2 数据库相关的信息。


清单 14. 创建 conn.prop 文件
				
 informix@informixva[demo_on]:~/test$ cat conn.prop
 driver=com.informix.jdbc.IfxDriver 
 URL=jdbc:informix-sqli://localhost:9088/ds2:INFORMIXSERVER=demo_on 
 user=informix 
 passwd=informix 
 informix@informixva[demo_on]:~/test$ 

接下来,我们需要为 Java CLI 设置如下环境变量,如下边所示:


清单 15. 为 Java CLI 设置环境变量
				
 export CLASSPATH=${INFORMIXDIR}/dwa/example/cli/dwacli.jar:${CLASSPATH} 
 export CLASSPATH=${INFORMIXDIR}/jdbc/lib/ifxjdbc.jar:${CLASSPATH} 
 export PATH=${INFORMIXDIR}/extend/krakatoa/jre/bin:${PATH} 

我们通过执行 java setMart IWADEMO WebSales_Mart OFF 命令使 WebSales_Mart 数据集市不可用,如下边所示:


清单 16. 设置 WebSales_Mart 数据集市不可用
				
 informix@informixva[demo_on]:~/test$ java setMart IWADEMO WebSales_Mart OFF
 setMart IWADEMO WebSales_Mart OFF 
 ----------------------------------------------------------------------- 
 result message: 
 <dwa:messageOutput xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
		<message severity="informational" reason-code="AQT10000I">
                      <text>The operation was completed successfully.</text>
		</message></dwa:messageOutput>
 informix@informixva[demo_on]:~/test$ 

并执行 java loadMart IWADEMO WebSales_Mart MART 命令来刷新数据,如下边所示,当装载完数据后,WebSales_Mart 数据集市会自动变为可用状态。


清单 17. 刷新 WebSales_Mart 数据集市
				
 informix@informixva[demo_on]:~/test$java loadMart IWADEMO WebSales_Mart MART
 loadMart IWADEMO WebSales_Mart MART 
 ----------------------------------------------------------------------- 
 result message: 
 <dwa:messageOutput xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
		<message severity="informational" reason-code="AQT10000I">
                      <text>The operation was completed successfully.</text>
		</message></dwa:messageOutput>
 informix@informixva[demo_on]:~/test$ 

我们可以执行 java listMarts IWADEMO 命令来检查 WebSales_Mart 数据集市的状态及最近一次装载数据的时间。如下边所示,“Active”状态表明 WebSales_Mart 数据集市处于活动状态。


清单 18. 查看 WebSales_Mart 数据集市状态
				
 informix@informixva[demo_on]:~/test$java listMarts IWADEMO
 listMarts IWADEMO 
 ------------------------------------------------------------------------- 
 result message: 
 <dwa:messageOutput xmlns:dwa="http://www.ibm.com/xmlns/prod/dwa" version="1.0">
		<message severity="informational" reason-code="AQT10000I">
                      <text>The operation was completed successfully.</text>
		</message></dwa:messageOutput>
 --------------------------------------------------------------------- 
 mart list: 

 mart name="WebSales_Mart" status="Active" memoryConsumptionInMB="653" 
 lastLoadTimestamp="2011-08-09T15:19:07.216909Z" 

 informix@informixva[demo_on]:~/test$ 


如果数据集市模式发生变化,如何处理

如果 Informix 数据库中表结构发生变化,我们需要执行如下步骤:

  • 从 IWA 实例中删除数据集市
  • 重新创建数据集市定义
  • 验证数据集市
  • 重新部署数据集市
  • 重新装载数据到数据集市

总结

通过“Informix 数据仓库加速器原理与实践”系列文章的介绍,我们对 Informix 数据仓库,特别是 IWA 的原理、优势有了一个基本的了解。同时,我们也了解到配置、使用 IWA 的基本方法及步骤。通过使用 IWA,可以极速加快数据查询速度,为企业业务优化、辅助决策提供更好的帮助。


参考资料

学习

获得产品和技术

讨论

  • 参与 developerWorks 博客 并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

关于作者

张光业,目前在 IBM 软件部工作,主要负责开发商在数据库和数据仓库方面产品的技术支持和培训,在 IT 行业有丰富的工作经验。是 IBM 认证的 DB2 UDB 高级技术专家。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=792387
ArticleTitle=Informix 数据仓库加速器原理与实践,第 3 部分: IWA 数据集市部署、装载及使用方法与实践
publish-date=02092012

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。