亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

提高商業(yè)智能環(huán)境中DB2查詢的性能(1)

瀏覽:100日期:2023-11-08 10:19:40
高效地運行大型查詢,是商業(yè)智能環(huán)境中的頂級性能挑戰(zhàn)。學習在這種環(huán)境中提高 IBM® DB2® 數(shù)據(jù)服務器查詢性能的技巧。逐步了解各種不同的方法,然后在自己的系統(tǒng)上進行試驗。將每種方法應用于一條 SQL 語句,并使用 db2batch 工具評測性能。簡介本文主要討論可以使決策支持系統(tǒng)(DSS)中的大型查詢高效地執(zhí)行的一些方法。這些查詢通常都是訪問較多數(shù)據(jù)的單純 select 查詢。下面是我們要討論的一些方法:1、建立適當?shù)膮⒄胀暾约s束2、使用物化查詢表(MQT)將表復制到其它數(shù)據(jù)庫分區(qū),以答應非分區(qū)鍵列上的合并連接3、使用多維集群(MDC)4、使用表分區(qū)(DB2® 9 的新功能)5、結合使用表分區(qū)和多維集群6、使用 MQT 預先計算聚合結果本文中的例子針對 Windows 平臺上運行的 DB2 9。但是,其中的概念和信息對于任何平臺都是有用的。由于大多數(shù)商業(yè)智能(BI)環(huán)境都使用 DB2 Database Partitioning Feature(DPF,DB2 數(shù)據(jù)庫分區(qū)特性),我們的例子也使用 DPF 將數(shù)據(jù)劃分到多個物理和邏輯分區(qū)之中。數(shù)據(jù)庫布局和設置本節(jié)描述用于在我們的系統(tǒng)上執(zhí)行測試的數(shù)據(jù)庫的物理和邏輯布局。星型模式布局本文使用如下所示的星型模式:清單 1. 星型模式 PRODUCT_DIM DATE_DIM/  / SALES_FACT | | STORE_DIM其中的表的定義如下:表名 類型 列名 數(shù)據(jù)類型 列描述 SALES_FACTFACT TABLEDATE_IDDATE產(chǎn)品售出日期PRODUCT_IDINT所購買產(chǎn)品的標識符STORE_IDINT出售產(chǎn)品的商店的標識符QUANTITYINT這次交易中售出產(chǎn)品的數(shù)量PRICEINT產(chǎn)品購買價格。[為了簡單起見,該字段為整型,但是使用小數(shù)型更符合實際]TRANSACTION_DETAILSCHAR(100)關于此次交易的描述/具體信息DATE_DIMDIMENSION TABLEDATE_ID NOT NULLDATE惟一標識符MONTHINT日期記錄所屬的月份QUARTERINT日期記錄所屬的季度(第 1、第 2、第 3 或第 4 季度)YEARINT日期記錄所屬的年份PRODUCT_DIMDIMENSION TABLEPRODUCT_ID NOT NULLINT產(chǎn)品惟一標識符PRODUCT_DESCCHAR(20)對產(chǎn)品的描述MODELCHAR(200)產(chǎn)品型號MAKECHAR(50)產(chǎn)品的質地STORE_DIMDIMENSION TABLESTORE_ID NOT NULLINT商店惟一標識符LOCATIONCHAR(15)商店位置DISTRICTCHAR(15)商店所屬街區(qū)REGIONCHAR(15)商店所屬區(qū)域事實表 SALES_FACT 包含 2006 年的總體銷售信息。它包括產(chǎn)品售出日期、產(chǎn)品 ID、銷售該產(chǎn)品的商店的 ID、售出的特定產(chǎn)品的數(shù)量,以及產(chǎn)品的價格。事實表中還添加了 TRANSACTION_DETAILS 列,以便在從事實表中訪問數(shù)據(jù)時生成更多的 I/O。維度表 DATE_DIM 包含商店開放期間的惟一的日期和相應的月份、季度和年份信息。維度表 PRODUCT_DIM 包含公司所銷售的不同產(chǎn)品。每種產(chǎn)品有一個惟一的產(chǎn)品 ID 和一個產(chǎn)品描述、型號以及質地。維度表 STORE_DIM 包含不同的商店 ID 和商店的位置、所屬街區(qū)以及所屬區(qū)域等信息。數(shù)據(jù)庫分區(qū)信息數(shù)據(jù)庫分區(qū)組名 數(shù)據(jù)庫分區(qū)數(shù) FACT_GROUP0,1,2,3DATE_GROUP1PRODUCT_GROUP2STORE_GROUP3各表都位于它自己的分區(qū)組中。3 個維度表都比較小,所以它們位于一個數(shù)據(jù)庫分區(qū)上。而事實表則跨 4 個分區(qū)。表空間信息表空間名 數(shù)據(jù)庫分區(qū)組 表 FACT_SMSFACT_GROUPSALES_FACTDATE_SMSDATE_GROUPDATE_DIMPRODUCT_SMSPRODUCT_GROUPPRODUCT_DIMSTORE_SMSSTORE_GROUPSTORE_DIM各表都位于自己的表空間中。還有一種常見的方法是將這 3 個維度表放在同一個表空間中。緩沖池信息本文中的測試所使用的默認緩沖池是 IBMDEFAULTBP,該緩沖池由 1,000 個 4K 的頁面組成。在本文的測試中,所有表空間共享這個緩沖池。在通常的 BI 環(huán)境中,會創(chuàng)建不同的緩沖池。主查詢下面的查詢用于測試本文中討論的各種不同的方法。該查詢執(zhí)行一個向外連接,比較二月份和十一月份 10 家商店的銷售信息。清單 2. 主查詢 [Query1.sql]WITH TMP1 (MONTH_1,STORE,REGION,DISTRICT,AMOUNT_1) AS( SELECT D.MONTH AS MONTH, S.STORE_ID AS STORE_ID, S.DISTRICT AS DISTRICT, S.REGION AS REGION, SUM(F1.QUANTITY * F1.PRICE) AS AMOUNT FROM SKAPOOR.SALES_FACT F1, SKAPOOR.DATE_DIM D, SKAPOOR.PRODUCT_DIM P, SKAPOOR.STORE_DIM S WHERE P.MODEL LIKE '%model%' AND F1.DATE_ID=D.DATE_ID AND F1.PRODUCT_ID=P.PRODUCT_ID AND F1.STORE_ID=S.STORE_ID AND F1.DATE_ID BETWEEN '2006-01-01' AND '2006-01-31' AND F1.STORE_ID IN (29, 30, 42, 55, 67, 72, 82, 99, 123, 199) AND D.MONTH = 1 GROUP BY S.STORE_ID,S.DISTRICT,S.REGION,D.MONTH) ,TMP2 (MONTH_11,STORE,REGION,DISTRICT,AMOUNT_11) AS( SELECT D1.MONTH AS MONTH, S1.STORE_ID AS STORE_ID, S1.DISTRICT AS DISTRICT, S1.REGION AS REGION, SUM(F2.QUANTITY * F2.PRICE) AS AMOUNT FROM SKAPOOR.SALES_FACT F2, SKAPOOR.DATE_DIM D1, SKAPOOR.PRODUCT_DIM P1, SKAPOOR.STORE_DIM S1 WHERE P1.MODEL LIKE '%model%' AND F2.DATE_ID=D1.DATE_ID AND F2.PRODUCT_ID=P1.PRODUCT_ID AND F2.STORE_ID=S1.STORE_ID AND F2.DATE_ID BETWEEN '2006-11-01' AND '2006-11-30' AND F2.STORE_ID IN (29, 30, 42, 55, 67, 72, 82, 99, 123, 199) AND D1.MONTH=11 GROUP BY S1.STORE_ID,S1.DISTRICT,S1.REGION,D1.MONTH)SELECT A.*, B.*FROM TMP1 A LEFT OUTER JOIN TMP2 B ON  (A.STORE=B.STORE AND A.REGION=B.REGION AND A.DISTRICT=B.DISTRICT)ORDER BY A.AMOUNT_1 DESC, B.AMOUNT_11 DESC;環(huán)境設置本文的測試是使用以下環(huán)境執(zhí)行的:清單 3. db2levelDB2 9 Enterprise Edition:DB21085I Instance "DB2" uses "32" bits and DB2 code release "SQL09010" withlevel identifier "02010107".Informational tokens are "DB2 9.1.0.356", "s060629", "NT32", and Fix Pack "0".Product is installed at "C:PROGRA~1IBMSQLLIB" with DB2 Copy Name "DB2COPY1".清單 4. 操作系統(tǒng)System: WIN32_NT SKAPOOR Service Pack 2 5.1 x86 Family 15, model 4, stepping 3清單 5. 硬件CPU: total:2 online:2 Cores per socket:1 Threading degree per core:2Physical Memory(MB): total:2551 free:1988 available:1949Virtual Memory(MB): total:4950 free:6575Swap Memory(MB): total:2399 free:45871 Physical disk Size 100GB空間需求為了重新創(chuàng)建本文中描述的所有測試用例,需要高達 20Gb 的磁盤空間來存放數(shù)據(jù)和日志文件。其中將近 13Gb 的空間要分配給日志文件。我們要使用循環(huán)日志記錄,分配 100 個主日志:清單 6. 用于日志的數(shù)據(jù)庫配置Log file size (4KB) (LOGFILSIZ) = 8192Number of primary log files(LOGPRIMARY) = 100Number of secondary log files  (LOGSECOND) = 150略加修改為事實表填充數(shù)據(jù)的腳本,即可減少日志文件所需的磁盤空間。本文的后面將對此進行討論。設置數(shù)據(jù)庫第一步是創(chuàng)建一個測試數(shù)據(jù)庫。在本文的測試中,創(chuàng)建了 4 個邏輯數(shù)據(jù)分區(qū)。在 etcservices 文件中,應確保有足夠的端口用于創(chuàng)建 4 個數(shù)據(jù)分區(qū)。在我們的測試環(huán)境中,文件 C:WINDOWSsystem32driversetcservices 中包含關于實例 "DB2" 的以下內容:清單 7. services 文件的內容DB2_DB2  60000/tcpDB2_DB2_1 60001/tcpDB2_DB2_2 60002/tcpDB2_DB2_END  60003/tcpDB2c_DB2 50000/tcp為向實例添加數(shù)據(jù)庫分區(qū),可使用 DB2 CLP 執(zhí)行以下命令:清單 8. 使用 db2ncrt 命令創(chuàng)建數(shù)據(jù)庫分區(qū)db2stopdb2ncrt /n:1 /u:username,password /i:DB2 /m:machine /p:1db2ncrt /n:2 /u:username,password /i:DB2 /m:machine /p:2db2ncrt /n:3 /u:username,password /i:DB2 /m:machine /p:3其中 /u 選項所表示的用戶名和密碼,/m 選項所表示的計算機名,以及 /i 選項所表示的實例名應該根據(jù)您自己的環(huán)境加以修改。創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫 DSS_DB。這里使用 D: 盤存儲該數(shù)據(jù)庫。請根據(jù)您自己的環(huán)境進行調整。清單 9. 創(chuàng)建數(shù)據(jù)庫的命令db2 create database dss_db on D:;數(shù)據(jù)庫和數(shù)據(jù)庫治理器是使用下面的設置來配置的。db2_all 工具用于設置所有數(shù)據(jù)庫分區(qū)上的數(shù)據(jù)庫配置和數(shù)據(jù)庫治理器配置。清單 10. 更新數(shù)據(jù)庫治理器配置的語句db2_all update dbm cfg using cpuspeed 2.282997e-007 intra_parallel NO comm_bandwidth 100.000000db2_all update db cfg for DSS_DB using locklist 2450 dft_degree 1 maxlocks 60  avg_appls 1 stmtheap 16384 dft_queryopt 5創(chuàng)建數(shù)據(jù)庫分區(qū)組和表空間使用以下語句創(chuàng)建數(shù)據(jù)庫分區(qū)組和表空間??梢詫⑦@些語句復制到一個名為 STORAGE.ddl 的文件中,然后使用下面的命令執(zhí)行它們:db2 -tvf STORAGE.ddl -z storage.log清單 11. 創(chuàng)建數(shù)據(jù)庫分區(qū)組和表空間的語句CONNECT TO DSS_DB;---------------------------------------------------- DDL Statements for DATABASE PARTITION GROUPS ----------------------------------------------------CREATE DATABASE PARTITION GROUP "FACT_GROUP" ON DBPARTITIONNUMS(0,1,2,3);CREATE DATABASE PARTITION GROUP "DATE_GROUP" ON DBPARTITIONNUMS(1);CREATE DATABASE PARTITION GROUP "PRODUCT_GROUP" ON DBPARTITIONNUMS(2);CREATE DATABASE PARTITION GROUP "STORE_GROUP" ON DBPARTITIONNUMS(3);COMMIT WORK;-------------------------------------- DDL Statements for TABLESPACES --------------------------------------CREATE REGULAR TABLESPACE FACT_SMS IN DATABASE PARTITION GROUP FACT_GROUPPAGESIZE 4096 MANAGED BY SYSTEMUSING ('d:databasefact_tbsp0') ON DBPARTITIONNUMS (0)USING ('d:databasefact_tbsp1') ON DBPARTITIONNUMS (1)USING ('d:databasefact_tbsp2') ON DBPARTITIONNUMS (2)USING ('d:databasefact_tbsp3') ON DBPARTITIONNUMS (3)EXTENTSIZE 32PREFETCHSIZE AUTOMATICBUFFERPOOL IBMDEFAULTBPOVERHEAD 7.500000TRANSFERRATE 0.060000NO FILE SYSTEM CACHING DROPPED TABLE RECOVERY ON;CREATE REGULAR TABLESPACE DATE_SMS IN DATABASE PARTITION GROUPDATE_GROUP PAGESIZE 4096 MANAGED BY SYSTEMUSING ('d:databasedate_group') ON DBPARTITIONNUMS (1)EXTENTSIZE 32PREFETCHSIZE AUTOMATICBUFFERPOOL IBMDEFAULTBPOVERHEAD 7.500000TRANSFERRATE 0.060000NO FILE SYSTEM CACHING DROPPED TABLE RECOVERY ON;CREATE REGULAR TABLESPACE PRODUCT_SMS IN DATABASE PARTITION GROUPPRODUCT_GROUP PAGESIZE 4096 MANAGED BY SYSTEMUSING ('d:databaseproduct_group') ON DBPARTITIONNUMS (2)EXTENTSIZE 32PREFETCHSIZE AUTOMATICBUFFERPOOL IBMDEFAULTBPOVERHEAD 7.500000TRANSFERRATE 0.060000NO FILE SYSTEM CACHING DROPPED TABLE RECOVERY ON;CREATE REGULAR TABLESPACE STORE_SMS IN DATABASE PARTITION GROUPSTORE_GROUP PAGESIZE 4096 MANAGED BY SYSTEMUSING ('d:databasestore_group') ON DBPARTITIONNUMS (3)EXTENTSIZE 32PREFETCHSIZE AUTOMATICBUFFERPOOL IBMDEFAULTBPOVERHEAD 7.500000TRANSFERRATE 0.060000NO FILE SYSTEM CACHING DROPPED TABLE RECOVERY ON;COMMIT WORK;-- Mimic tablespaceALTER TABLESPACE SYSCATSPACE PREFETCHSIZE AUTOMATIC OVERHEAD 7.500000 TRANSFERRATE 0.060000;ALTER TABLESPACE TEMPSPACE1 PREFETCHSIZE AUTOMATIC OVERHEAD 7.500000 TRANSFERRATE 0.060000;ALTER TABLESPACE USERSPACE1 PREFETCHSIZE AUTOMATIC OVERHEAD 7.500000 TRANSFERRATE 0.060000;COMMIT WORK;-------------------------------------------------- Update the bufferpool to use 1000 4K pages --------------------------------------------------ALTER BUFFERPOOL IBMDEFAULTBP SIZE 1000;COMMIT WORK;CONNECT RESET;注重:表空間被定義為 "NO FILE SYSTEM CACHING",以避免文件系統(tǒng)緩存歪曲測試各種方法時得到的評測結果。使用 db2batch 工具評測性能db2batch 程序用于運行 清單 2 中的主查詢。為了使用 db2batch 命令運行該查詢,需要將查詢保存在一個以分號結尾的文件中,并使用以下選項,使 db2batch 工具查看計時情況:清單 12. 使用 db2batch 評測查詢的性能db2batch -d <dbname> -f <input_file> -i <elapsed_time> -iso <isolation level>-o p <perf_detail> o <optlevel> r <rows_out> -r <result_file>其中 <dbname> 是數(shù)據(jù)庫名稱,<input_file> 是以分號結尾、包含查詢的文件。-iso <isolation level>:在我們的測試中,默認隔離級別是 CS,但是默認情況下 db2batch 工具使用隔離級別 RR。假如使用隔離級別 RR 執(zhí)行一個查詢,那么使用隔離級別 CS 創(chuàng)建的 MQT 不會被考慮。為了解決這個問題,可以在 db2batch 命令中使用 -iso 選項和隔離級別 CS,以便查詢選擇 MQT。而且,應用程序可使用默認的 CS 隔離級別,不帶 -iso 選項運行 db2batch 會導致它使用 RR 隔離級別,并可能導致鎖爭用。-o - options options:p <perf_detail>: 性能具體信息。返回數(shù)據(jù)庫治理器、數(shù)據(jù)庫、應用程序和語句的快照(只有在自動提交關閉,且處理的是單個語句,而非語句塊時,才返回語句快照)。另外還返回緩沖池、表空間和 FCM的快照(只有在多數(shù)據(jù)庫分區(qū)環(huán)境中才會返回 FCM 快照)。 對于例子 p 5,我們使用最具體的輸出,但是也可以使用不同級別的性能輸出。o <optlevel>: 查詢優(yōu)化級別。(本文使用優(yōu)化級別 5,這里不需要顯式地指定這個優(yōu)化級別,因為它是數(shù)據(jù)庫的默認優(yōu)化級別,如 清單 10 所示。)r <rows_out>: 所獲取且將發(fā)送到輸出的行數(shù)。我們的例子 r 0 不發(fā)送行。-r <result_file>: 結果文件。在我們的例子中,results.txt 是輸出文件名,db2batch 將結果輸出到該文件中。在本文中,我們使用:db2batch -d DSS_DB -f QUERY1.SQL -i complete -iso CS -o p 5 o 5 r 0 -r <output filename>提高查詢性能的方法在本節(jié)中,讓我們逐步了解用于提高 清單 2 中描述的查詢的性能的各種不同方法。在討論任何方法之前,必須創(chuàng)建基本的事實表和維度表。步驟 A:創(chuàng)建好表空間之后,就要創(chuàng)建事實表和維度表。可以將 SKAPOOR 改為符合您自己環(huán)境的模式名。這樣做時,務必更新 清單 2 中的查詢,以反映適當?shù)哪J矫?梢詫⑾旅娴恼Z句復制到一個名為 TEST1.ddl 的文件中,然后使用以下命令來執(zhí)行該文件:db2 -tvf TEST1.ddl -z test1.log清單 13. TEST1.ddl 的內容CONNECT TO DSS_DB;----------------------------------------------------- DDL Statements for table "SKAPOOR "."SALES_FACT"---------------------------------------------------CREATE TABLE "SKAPOOR "."SALES_FACT" ( "DATE_ID" DATE , "PRODUCT_ID" INTEGER , "STORE_ID" INTEGER , "QUANTITY" INTEGER , "PRICE" INTEGER , "TRANSACTION_DETAILS" CHAR(100) )  DISTRIBUTE BY HASH("DATE_ID")   IN "FACT_SMS" ;--------------------------------------------------- DDL Statements for table "SKAPOOR "."DATE_DIM"-------------------------------------------------CREATE TABLE "SKAPOOR "."DATE_DIM" ( "DATE_ID" DATE NOT NULL , "MONTH" INTEGER , "QUARTER" INTEGER , "YEAR" INTEGER )  IN "DATE_SMS" ;-- DDL Statements for primary key on Table "SKAPOOR "."DATE_DIM"-- DATE_ID is the unique identifierALTER TABLE "SKAPOOR "."DATE_DIM"ADD PRIMARY KEY("DATE_ID");------------------------------------------------------ DDL Statements for table "SKAPOOR "."PRODUCT_DIM"----------------------------------------------------CREATE TABLE "SKAPOOR "."PRODUCT_DIM" ( "PRODUCT_ID" INTEGER NOT NULL , "PRODUCT_DESC" CHAR(20) , "MODEL" CHAR(10) , "MAKE" CHAR(10) )  IN "PRODUCT_SMS" ;-- DDL Statements for primary key on Table "SKAPOOR "."PRODUCT_DIM"-- PRODUCT_ID is the unique identifierALTER TABLE "SKAPOOR "."PRODUCT_DIM"ADD PRIMARY KEY("PRODUCT_ID");---------------------------------------------------- DDL Statements for table "SKAPOOR "."STORE_DIM"--------------------------------------------------CREATE TABLE "SKAPOOR "."STORE_DIM" ( "STORE_ID" INTEGER NOT NULL , "LOCATION" CHAR(15) , "DISTRICT" CHAR(15) , "REGION" CHAR(15) )  IN "STORE_SMS" ;-- DDL Statements for primary key on Table "SKAPOOR "."STORE_DIM"-- STORE_ID is the unique identifierALTER TABLE "SKAPOOR "."STORE_DIM"ADD PRIMARY KEY("STORE_ID");COMMIT WORK;CONNECT RESET;步驟 B:創(chuàng)建好表后,將數(shù)據(jù)插入到三個維度表中,并根據(jù)您自己的環(huán)境調整模式:清單 14. 填充 DATE_DIM 表db2 -td@ -vf date_insert.txt -z date_insert.log清單 15. 填充 PRODUCT_DIM 表db2 -td@ -vf product_insert.txt -z product_insert.log清單 16. 填充 STORE_DIM 表db2 -td@ -vf store_insert.txt -z store_insert.log這三個文件的內容是:DATE_DIM 表被填入 2006 年所有 365 天的值。清單 17. date_insert.txt 的內容connect to dss_db@begin atomic declare cnt INT default 1; declare dat DATE default '01/01/2006'; declare yer INT default 2006; declare quart INT default 1;while (cnt <= 365) doif (int(dat + cnt DAYS)/100) between 200601 and 200603 then  set quart=1;elseif (int(dat + cnt DAYS)/100) between 200604 and 200606 then  set quart=2;elseif (int(dat + cnt DAYS)/100) between 200607 and 200609 then  set quart=3;elseif (int(dat + cnt DAYS)/100) between 200610 and 200612 then  set quart=4;end if;insert into SKAPOOR.DATE_DIM values (dat + cnt DAYS,(int(dat + cnt DAYS)/100) - 200600,quart,yer); set cnt=cnt+1;end while;end@connect reset@PRODUCT_DIM 表被填入 60,000 種產(chǎn)品。清單 18. product_insert.txt 的內容connect to dss_db@drop sequence seq1@drop sequence seq2@create sequence seq1 as integer start with 1 increment by 1@create sequence seq2 as integer start with 1 increment by 1@begin atomic  declare cnt INT default 1;  while (cnt < 60001) doinsert into SKAPOOR.PRODUCT_DIM values (nextval for SEQ2,'product desc' concat char(nextval for SEQ1),'model ' concat char(integer(rand()*1000)),'maker ' concat char(integer(rand()*500)));set cnt=cnt+1;end while;end@drop sequence seq1@drop sequence seq2@connect reset@STORE_DIM 表被填入 201 家商店。清單 19. store_insert.txt 的內容connect to dss_db@drop sequence seq2@create sequence seq2 as integer start with 0 increment by 1@begin atomicdeclare cnt INT default 1;while (cnt < 202) do  insert into SKAPOOR.STORE_DIM values (nextval for SEQ2,'location' concat char(integer(rand()*500)),'district' concat char(integer(rand()*10)),'region' concat char(integer(rand()*5))  );  set cnt=cnt+1;end while;end@drop sequence seq2@connect reset@步驟 C:將數(shù)據(jù)插入到 SALES_FACT 表中。根據(jù)您自己的環(huán)境調整模式。在我們的測試環(huán)境中,將數(shù)據(jù)插入到事實表花了約一個半小時的時間。清單 20. 填充 SALES_FACT 表db2 -td@ -vf sales_fact_insert.ddl -z sales_fact_insert.log清單 21. sales_fact_insert.ddl 的內容connect to dss_db@VALUES (CURRENT TIMESTAMP)@begin atomic  declare cnt INT default 1;  declare cnt1 INT default 1;  declare dat DATE default '01/01/2006';  while (cnt <= 365) doINSERT INTO SKAPOOR.SALES_FACTwith v(DATE_ID, PRODUCT_ID, STORE_ID, QUANTITY, PRICE, TRANSACTION_DETAILS, U_ID) as (values(dat + CNT1 DAYS, 1, 1, 1, 1, '', 1) union all select DATE_ID, int(rand()*59999) + 1, int(rand()*200), int(rand()*50) + 1, INT(RAND()*200 + 1), RESERVE, U_ID + 1 from  v where U_ID < 60000) select date_id, product_id, store_id, quantity, price, transaction_details from v; set cnt1 = cnt1 + 1; set cnt = cnt + 1;  end while;end@VALUES (CURRENT TIMESTAMP)@connect reset@注重:在 清單 21 中,SALES_FACT 表是在一次事務處理中填充的,這需要大量的磁盤空間來作日志記錄。為了降低日志記錄的影響,可以創(chuàng)建一個存儲過程,并分步提交插入內容:清單 22. 填充 SALES_FACT 表的另一種方法connect to dss_db@VALUES (CURRENT TIMESTAMP)@-- Create a procedure to populate the SALES_FACT table-- committing the inserts in stages to reduce the impact-- of loggingcreate procedure salesFactPopulate()specific salesFactPopulatelanguage sqlbegin  declare cnt INT default 1;  declare cnt1 INT default 1;  declare dat DATE default '01/01/2006';  while (cnt <= 365) doINSERT INTO SKAPOOR.SALES_FACTwith v(DATE_ID, PRODUCT_ID, STORE_ID, QUANTITY, PRICE, TRANSACTION_DETAILS, U_ID) as(  values(dat + CNT1 DAYS, 1, 1, 1, 1, '', 1) union all  select DATE_ID, int(rand()*59999) + 1, int(rand()*200), int(rand()*50) + 1, INT(RAND()*200 + 1), RESERVE, U_ID + 1 from vwhere U_ID < 60000)select date_id, product_id, store_id, quantity, price, TRANSACTION_DETAILS from v;commit work;set cnt1 = cnt1 + 1;set cnt=cnt+1;  end while;end@-- populate the SALES_FACT tableinvoke salesFactPopulate@VALUES (CURRENT TIMESTAMP)@connect reset@步驟 D:為了理解各種不同的方法對所選查詢訪問計劃的有怎樣的影響,我們需要解釋(Explain)查詢,以查看 DB2 查詢優(yōu)化器選擇的訪問計劃。為此,可使用 EXPLAIN 工具,這要求存在 EXPLAIN 表。為了創(chuàng)建 EXPLAIN 表,執(zhí)行以下步驟:1、進入 sqllibmisc 目錄所在的位置。2、在我們的測試環(huán)境中,這個位置為 "C:Program FilesIBMSQLLIBMISC"。3、執(zhí)行 db2 connect to dss_db。4、執(zhí)行 db2 -tvf EXPLAIN .DDL。
主站蜘蛛池模板: 久久第一页 | 亚洲国产精品影院 | 劲爆欧美色欧美 | 亚洲日本在线免费观看 | 成人永久免费 | 特黄特色大片免费视频播放 | 黄色观看 | 天天色综合色 | 国产精品成人免费观看 | 毛片爽爽爽免费看 | 亚洲精品第一综合99久久 | 久久久久免费视频 | 色在线播放| 大狠狠大臿蕉香蕉大视频 | 久久亚洲天堂 | 美国一级毛片免费看 | 国产高清在线看免费视频观 | 中文字幕在线永久 | 青青草原综合久久大伊人精品 | 国产在线视频资源 | 欧美一级做a爰片久毛片 | 高清一区二区三区免费 | 性生活视频黄色 | 亚洲爱v| 高清精品美女在线播放 | 免费a一级毛片在线播放 | 亚洲天堂第一页 | 女人精69xxxxx免费无毒 | 欧美成人精品第一区 | 欧美三区在线观看 | 丁香婷婷色综合亚洲小说 | 国产乱码一区二区三区四区 | 精品国产中文一级毛片在线看 | 国内一级特黄女人精品毛片 | 永久黄色免费网站 | 免费精品久久久视频 | 美女zw喷水视频在线观看 | 国产成人精彩在线视频50 | 国产美女久久久久 | 欧美做爰xxxⅹ在线视频hd | 国产精品天天影视久久综合网 |