国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
DB2日常維護(hù)——REORG TABLE命令優(yōu)化數(shù)據(jù)庫(kù)性能
 
一個(gè)完整的日常維護(hù)規(guī)范可以幫助 DBA 理順每天需要的操作,以便更好的監(jiān)控和維護(hù)數(shù)據(jù)庫(kù),保證數(shù)據(jù)庫(kù)的正常、安全、高效運(yùn)行,防止一些錯(cuò)誤重復(fù)發(fā)生。

由于DB2使用CBO作為數(shù)據(jù)庫(kù)的優(yōu)化器,數(shù)據(jù)庫(kù)對(duì)象的狀態(tài)信息對(duì)數(shù)據(jù)庫(kù)使用合理的 ACCESS PLAN至關(guān)重要。DB2 優(yōu)化器使用目錄統(tǒng)計(jì)信息來(lái)確定任何給定查詢的最佳訪問(wèn)方案。如果有關(guān)表或索引的統(tǒng)計(jì)信息已過(guò)時(shí)或者不完整,則會(huì)導(dǎo)致優(yōu)化器選擇不是最佳的方案,并且會(huì)降低 執(zhí)行查詢的速度。當(dāng)數(shù)據(jù)庫(kù)里某個(gè)表中的記錄變化量很大時(shí),需要在表上做REORG操作來(lái)優(yōu)化數(shù)據(jù)庫(kù)性能

一、完整的REORG表的過(guò)程

值得注意的是,針對(duì)數(shù)據(jù)庫(kù)對(duì)象的大量操作,如反復(fù)地刪除表,存儲(chǔ)過(guò)程,會(huì)引起系統(tǒng)表中數(shù)據(jù)的頻繁改變,在這種情況下,也要考慮對(duì)系統(tǒng)表進(jìn)行REORG操作。一個(gè)完整的REORG表的過(guò)程應(yīng)該是由下面的步驟組成的:

RUNSTATS ->   REORGCHK ->   REORG ->   RUNSTATS -> BIND或REBIND

注: 執(zhí)行下面命令前要先連接數(shù)據(jù)庫(kù)

1 RUNSTATS

   由于在第二步中REORGCHK時(shí)可以對(duì)指定的表進(jìn)行RUNSTATS操作(在REORGCHK時(shí)指定UPDATE STATISTICS),所以第一步事實(shí)上是可以省略的。

2 REORGCHK

   在對(duì)表數(shù)據(jù)進(jìn)行許多更改之后,邏輯上連續(xù)的數(shù)據(jù)可能會(huì)位于不連續(xù)的物理數(shù)據(jù)頁(yè)上,在許多插入操作創(chuàng)建了溢出記錄時(shí)尤其如此。按這種方式組織數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)管理器必須執(zhí)行其他讀操作才能訪問(wèn)順序數(shù)據(jù)。另外,在刪除大量行后,也需要執(zhí)行其他的讀操作。

表重組操作會(huì)整理數(shù)據(jù)碎片來(lái)減少浪費(fèi)的空間,并對(duì)行進(jìn)行重新排序以合并溢出記錄,從而加快數(shù)據(jù)訪問(wèn)速度并最終提高查詢性能。還可以指定根據(jù)特定索引來(lái)重新排序數(shù)據(jù),以便查詢時(shí)通過(guò)最少次數(shù)據(jù)讀取操作就可以訪問(wèn)數(shù)據(jù)。

下列任何因素都可能指示用戶應(yīng)該重組表:

1)自上次重組表之后,對(duì)該表進(jìn)行了大量的插入、更新和刪除活動(dòng) 。

2)對(duì)于使用具有高集群率的索引的查詢,其性能發(fā)生了明顯變化 。

3)在執(zhí)行 RUNSTATS 命令以刷新統(tǒng)計(jì)信息后,性能沒(méi)有得到改善。

4)REORGCHK 命令指示需要重組表(注意:在某些情況下,REORGCHK 總是建議重組表,即使在執(zhí)行了重組后也是如此)。例如,如果使用 32KB 頁(yè)大小,并且平均記錄長(zhǎng)度為 15 字節(jié)且每頁(yè)最多包含 253 條記錄,則每頁(yè)具有 32700- (15 x 253)=28905 個(gè)未使用字節(jié)。這意味著大約 88% 的頁(yè)面是可用空間。用戶應(yīng)分析 REORGCHK 的建議并針對(duì)執(zhí)行重組所需的成本平衡利益。

5)db.tb_reorg_req(需要重組)運(yùn)行狀況指示器處于 ATTENTION 狀態(tài)。此運(yùn)行狀況指示器的集合詳細(xì)信息描述通過(guò)重組可獲得好處的表和索引的列表。

REORGCHK 命令返回有關(guān)數(shù)據(jù)組織的統(tǒng)計(jì)信息,并且可以建議您是否需要重組特定表。然而,定期或在特定時(shí)間對(duì)目錄統(tǒng)計(jì)信息表運(yùn)行特定查詢可以提供性能歷史記錄,該記錄使用戶可以發(fā)現(xiàn)可能具有更廣性能隱含的趨勢(shì)。

DB2 V9.1 引入了自動(dòng)重組功能,可以對(duì)表和索引進(jìn)行自動(dòng)重組。自動(dòng)重組通過(guò)使用 REORGCHK 公式來(lái)確定何時(shí)需要對(duì)表進(jìn)行重組。它會(huì)定期評(píng)估已經(jīng)更新了統(tǒng)計(jì)信息的表,以便了解是否需要重組。

REORGCHK命令的語(yǔ)法如下:

.                           -UPDATE STATISTICS--.

>>-REORGCHK--+--------------------+----------------------------->

                         '-CURRENT STATISTICS-'

            .-ON TABLE USER-----------------.

>--+-------------------------------+---------------------------><

            '-ON--+-SCHEMA--schema-name---+-'

                    | .-USER-------. |  

                    '-TABLE--+-SYSTEM-----+-'  

                       +-ALL--------+  

                       '- table-name-'

下面我們來(lái)看一下各個(gè)選項(xiàng)的含義:

UPDATE STATISTICS:更新表的統(tǒng)計(jì)數(shù)據(jù),根據(jù)該統(tǒng)計(jì)數(shù)據(jù)判斷是否需要重組表。

CURRENT STATISTICS:根據(jù)當(dāng)前表統(tǒng)計(jì)數(shù)據(jù)判斷是否需要重組表。

TABLE table_name:對(duì)單個(gè)表進(jìn)行分析。

TABLE ALL:對(duì)數(shù)據(jù)庫(kù)所有的表進(jìn)行分析。

TABLE SYSTEM:對(duì)系統(tǒng)表進(jìn)行分析。

TABLE USER:對(duì)當(dāng)前用戶模式下的所有表進(jìn)行分析。

如果數(shù)據(jù)庫(kù)中數(shù)據(jù)量比較大,在生產(chǎn)系統(tǒng)上要考慮REORGCHK的執(zhí)行時(shí)間可能較長(zhǎng),需安排在非交易時(shí)間執(zhí)行。

可以分為對(duì)系統(tǒng)表和用戶表兩部分分別進(jìn)行REORGCHK:

1) 針對(duì)系統(tǒng)表進(jìn)行REORGCHK

db2 reorgchk update statistics on table system

使用UPDATE STATISTICS參數(shù)指定數(shù)據(jù)庫(kù)首先執(zhí)行RUNSTATS命令。

2) 針對(duì)用戶表進(jìn)行REORGCHK

db2 reorgchk update statistics on table user

REORGCHK是根據(jù)統(tǒng)計(jì)公式計(jì)算表是否需要重整。對(duì)于每個(gè)表有3個(gè)統(tǒng)計(jì)公式,對(duì)索引有3個(gè)統(tǒng)計(jì)公式(版本8開(kāi)始有5個(gè)公式),如果公式計(jì)算結(jié)果該表需重整,在輸出的REORG字段中相應(yīng)值為*,否則為-。

reorgchk 所使用的度量的考慮因素包括:(當(dāng)查看 reorgchk 工具的輸出時(shí),找到用于表的 F1、F2 和 F3 這幾列,以及用于索引的 F4、F5、F6、F7 和 F8 這幾列。如果這些列中的任何一列有星號(hào) (*),則說(shuō)明當(dāng)前的表和/或索引超出了閾值。)

F1: 屬于溢出記錄的行所占的百分比。當(dāng)這個(gè)百分比大于 5% 時(shí),在輸出的 F1 列中將有一個(gè)星號(hào) (*)。

F2: 數(shù)據(jù)頁(yè)中使用了的空間所占的百分比。當(dāng)這個(gè)百分比小于 70% 時(shí),在輸出的 F2 列上將有一個(gè)星號(hào) (*)。

F3: 其中含有包含某些記錄的數(shù)據(jù)的頁(yè)所占的百分比。當(dāng)這個(gè)百分比小于 80% 時(shí),在輸出的 F3 列上將有一個(gè)星號(hào) (*)。

F4: 群集率,即表中與索引具有相同順序的行所占的百分比。當(dāng)這個(gè)百分比小于 80% 時(shí),那么在輸出的F4 列上將有一個(gè)星號(hào) (*)。

F5: 在每個(gè)索引頁(yè)上用于索引鍵的空間所占的百分比。當(dāng)這個(gè)百分比小于 50% 時(shí),在輸出的 F5 列上將有一個(gè)星號(hào) (*)。

F6: 可以存儲(chǔ)在每個(gè)索引級(jí)的鍵的數(shù)目。當(dāng)這個(gè)數(shù)字小于 100 時(shí),在輸出的 F6 列上將有一個(gè)星號(hào) (*)。

F7: 在一個(gè)頁(yè)中被標(biāo)記為 deleted 的記錄 ID(鍵)所占的百分比。當(dāng)這個(gè)百分比大于 20% 時(shí),在輸出的 F7 列上將有一個(gè)星號(hào) (*)。

F8: 索引中空葉子頁(yè)所占的百分比。當(dāng)這個(gè)百分比大于 20% 時(shí),在輸出的 F8 列上將有一個(gè)星號(hào) (*)。

下面是執(zhí)行的部分結(jié)果

db2 reorgchk update statistics on table user

執(zhí)行 RUNSTATS ....

表統(tǒng)計(jì)信息:

F1: 100 * OVERFLOW / CARD < 5

F2: 100 * (Effective Space Utilization of Data Pages) > 70

F3: 100 * (Required Pages / Total Pages) > 80

SCHEMA    NAME                  CARD    OV    NP    FP ACTBLK    TSIZE F1 F2 F3 REORG

----------------------------------------------------------------------------------------

DB2INST1 STAFF                  -       -     -     -            -      -   -   - -*-

...

索引統(tǒng)計(jì)信息:

F4: CLUSTERRATIO 或正?;?CLUSTERFACTOR > 80

F5: 100 * (KEYS * (ISIZE + 9) + (CARD - KEYS) * 5) / ((NLEAF - NUM EMPTY LEAFS) * INDEXPAGESIZE) > 50

F6: (100 - PCTFREE) * ((INDEXPAGESIZE - 96) / (ISIZE + 12)) ** (NLEVELS - 2) * (INDEXPAGESIZE - 96) / (KEYS * (ISIZE + 9) + (CARD - KEYS) * 5) < 100

F7: 100 * (NUMRIDS DELETED / (NUMRIDS DELETED + CARD)) < 20

F8: 100 * (NUM EMPTY LEAFS / NLEAF) < 20

SCHEMA   NAME                 CARD LEAF ELEAF LVLS ISIZE NDEL   KEYS F4 F5 F6 F7 F8 REORG

-------------------------------------------------------------------------------------------------

表:DB2INST1.STAFF     

DB2INST1   ISTAFF             -     -     -     -     -     -       -    -    -   -   -   - -----

...

從上面的例子來(lái)看,對(duì)于表DB2INST1.STAFF,根據(jù)統(tǒng)計(jì)公式F2計(jì)算結(jié)果,有必要對(duì)表進(jìn)行REORG。

3、對(duì)需要重組的表進(jìn)行重組(REORG TABLE)

DB2 V9 可以對(duì)表和索引進(jìn)行自動(dòng)重組。要進(jìn)行高效率的數(shù)據(jù)訪問(wèn)和獲得最佳工作負(fù)載性能,具有組織良好的表數(shù)據(jù)是很關(guān)鍵的。在對(duì)表數(shù)據(jù)進(jìn)行許多更改之后,邏輯上連續(xù) 的數(shù)據(jù)可能會(huì)位于不連續(xù)的物理數(shù)據(jù)頁(yè)上,在許多插入操作創(chuàng)建了溢出記錄時(shí)尤其如此。按這種方式組織數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)管理器必須執(zhí)行其他讀操作才能訪問(wèn)順序數(shù) 據(jù)。另外,在刪除大量行后,也需要執(zhí)行其他的讀操作。表重組操作會(huì)整理數(shù)據(jù)碎片來(lái)減少浪費(fèi)的空間,并對(duì)行進(jìn)行重新排序以合并溢出記錄,從而加快數(shù)據(jù)訪問(wèn)速 度并最終提高查詢性能。還可以指定根據(jù)特定索引來(lái)重新排序數(shù)據(jù),以便查詢通過(guò)最少次數(shù)據(jù)讀取操作就可以訪問(wèn)數(shù)據(jù)。既可重組系統(tǒng)目錄表,也可以重組數(shù)據(jù)庫(kù) 表。由 RUNSTATS 收集的統(tǒng)計(jì)信息與其他信息一起來(lái)顯示表中的數(shù)據(jù)分布情況。特別是,通過(guò)分析這些統(tǒng)計(jì)信息可以知道何時(shí)需要執(zhí)行哪種類型的重組。自動(dòng)重組通過(guò)使用 REORGCHK 公式來(lái)確定何時(shí)需要對(duì)表進(jìn)行重組。它會(huì)定期評(píng)估已經(jīng)更新了統(tǒng)計(jì)信息的表,以便了解是否需要重組。如果需要重組,則它會(huì)在內(nèi)部調(diào)度對(duì)表進(jìn)行傳統(tǒng)重組。這將要 求執(zhí)行應(yīng)用程序功能而不對(duì)正在重組的表進(jìn)行寫訪問(wèn)??梢允褂?auto_reorg、auto_tbl_maint 和 auto_maint 數(shù)據(jù)庫(kù)配置參數(shù)來(lái)啟用或禁用自動(dòng)重組功能部件。在分區(qū)數(shù)據(jù)庫(kù)環(huán)境中,確定執(zhí)行自動(dòng)重組和啟動(dòng)自動(dòng)重組是在目錄分區(qū)上完成的。只需要在目錄分區(qū)上啟用數(shù)據(jù)庫(kù) 配置參數(shù),就將在目標(biāo)表所在的所有數(shù)據(jù)庫(kù)分區(qū)上運(yùn)行重組。如果用戶不太確定何時(shí)以及如何重組表和索引,則可以將自動(dòng)重組作為整個(gè)數(shù)據(jù)庫(kù)維護(hù)方案的一部分。

如果是 DB2 V8.2.2 以前的版本,是沒(méi)有自動(dòng)重組功能的。如果你的數(shù)據(jù)庫(kù)是 DB2 V8.2.2 以前的版本,或者想在 DB2 V8.2.2 以后的版本里手工運(yùn)行重組表,可以使用命令完成。手工重組可以使用 REORG 命令來(lái)完成。

以脫機(jī)方式重組表是整理表碎片的最快方法。重組可減少表所需的空間量并提高數(shù)據(jù)訪問(wèn)和查詢性能。

必須具有 SYSADM、SYSCTRL、SYSMAINT 或 DBADM 權(quán)限,或者必須具有對(duì)表的 CONTROL 權(quán)限才能重組表。必須具有數(shù)據(jù)庫(kù)連接才能重組表。標(biāo)識(shí)需要重組的表之后,可以對(duì)這些表運(yùn)行 REORG 實(shí)用程序,并且可以選擇對(duì)在這些表上定義的任何索引運(yùn)行該實(shí)用程序。

REORG TABLE命令的語(yǔ)法如下:

>>-REORG TABLE--table-name----+--------------------+------------>

                               '-INDEX--index-name--'

>-----+-----------------------+--------------------------------><

      '-USE--tablespace-name--'

執(zhí)行REORG可以考慮分為表上有索引和沒(méi)有索引兩種情況:

1) 如果表上有索引

如表名為DB2INST1.STAFF,索引名為DB2INST1.ISTAFF,命令如下:

db2 reorg table db2inst1.staff index db2inst1.istaff use tempspace1

建議REORG時(shí)使用USE參數(shù)指定數(shù)據(jù)重排時(shí)使用的臨時(shí)表空間,否則,REORG工作將會(huì)在表所在表空間中原地執(zhí)行。

如果表上有多個(gè)索引,INDEX參數(shù)值請(qǐng)使用最為重要的索引名。

2) 如果表上沒(méi)有索引

如表名為DB2INST1.STAFF, SYSIBM.SYSTABLES

db2 reorg table db2inst1.staff use tempspace1

db2 reorg table sysibm.systables use tempspace1

使用 REORG TABLE 命令重組 RHETTE.TEST 表

C:\> db2 reorg table rhette.test

DB20000I   REORG 命令成功完成。

要使用臨時(shí)表空間 TEMPSPACE1 重組表 RHETTE.TEST,可以在 DB2CLP 窗口中使用帶 USE TEMPSPACE1 選項(xiàng)的 REORG TABLE 命令。

使用臨時(shí)表空間 TEMPSPACE1 重組 RHETTE.TEST 表

C:\> db2 reorg table rhette.test   use TEMPSPACE1

DB20000I   REORG 命令成功完成。

下面我們?cè)谑纠?TEST 上創(chuàng)建一個(gè)索引 A1,構(gòu)建在 ID 列上。此時(shí)我們想要重組表并根據(jù)索引 A1 對(duì)行進(jìn)行重新排序,可以使用帶 INDEX 選項(xiàng)的 REORG TABLE 命令。

根據(jù)索引 A1 重組 RHETTE.TEST 表

C:\> db2 create index   a1 on rhette.test(id)

DB20000I   SQL 命令成功完成。

C:\> db2 reorg table rhette.test   index a1

DB20000I   REORG 命令成功完成。

如果想使用 SQL 調(diào)用語(yǔ)句重組表,請(qǐng)使用 ADMIN_CMD 過(guò)程發(fā)出 REORG TABLE 命令。

使用 SQL 調(diào)用語(yǔ)句重組 RHETTE.TEST 表

C:\> db2 call sysproc.admin_cmd ( 'reorg table rhette.test index a1' )

返回狀態(tài) = 0

要使用 DB2 管理 API 重組表,請(qǐng)使用 db2REORG API 。 在重組表之后,應(yīng)收集有關(guān)表的統(tǒng)計(jì)信息,以便優(yōu)化器具有最準(zhǔn)確的數(shù)據(jù)來(lái)評(píng)估查詢?cè)L問(wèn)方案。另外,記住在分區(qū)數(shù)據(jù)庫(kù)環(huán)境中,如果想在所有節(jié)點(diǎn)運(yùn)行命令,需要使用 db2_all 命令。

通過(guò)刪除和插入操作對(duì)表進(jìn)行更新后,索引的性能會(huì)降低,其表現(xiàn)方式如下:

1)葉子頁(yè)分段。

葉子頁(yè)被分段之后,由于必須讀取更多的葉子頁(yè)才能訪存表頁(yè),因此 I/O 操作成本會(huì)增加。

2)物理索引頁(yè)的順序不再與這些頁(yè)上的鍵順序相匹配(此稱為不良集群索引)。

葉子頁(yè)出現(xiàn)不良集群情況后,順序預(yù)取操作的效率將降低,因此會(huì)導(dǎo)致更多的 I/O 等待。

3)形成的索引大于其最有效的級(jí)別數(shù)。

在此情況下應(yīng)重組索引。

如果在創(chuàng)建索引時(shí)設(shè)置了 MINPCTUSED 參數(shù),則在刪除某個(gè)鍵且可用空間小于指定的百分比時(shí),數(shù)據(jù)庫(kù)服務(wù)器會(huì)自動(dòng)合并索引葉子頁(yè)。此過(guò)程稱為聯(lián)機(jī)索引整理碎片。但是,要復(fù)原索引集群和可用空間以及降低葉級(jí)別,請(qǐng)使用下列其中一種方法:

1)刪除并重新創(chuàng)建索引。

2)使用 REORG INDEXES 命令聯(lián)機(jī)重組索引。

因?yàn)榇朔椒ㄔ试S用戶在重建表索引期間對(duì)表進(jìn)行讀寫操作,所以在生產(chǎn)環(huán)境中可能需要選擇此方法。

3)使用允許脫機(jī)重組表及其索引的選項(xiàng)運(yùn)行 REORG TABLE 命令。

在使用 ALLOW WRITE ACCESS 選項(xiàng)運(yùn)行 REORG INDEXES 命令時(shí),如果同時(shí)允許對(duì)指定的表進(jìn)行讀寫訪問(wèn),則會(huì)重建該表的所有索引。進(jìn)行重組時(shí),對(duì)基礎(chǔ)表所作的任何將會(huì)影響到索引的更改都將記錄在 DB2 日志中。另外,如果有任何內(nèi)部?jī)?nèi)存緩沖區(qū)空間可供使用,則還將這些更改放在這樣的內(nèi)存空間中。重組將處理所記錄的更改以便在重建索引時(shí)與當(dāng)前寫活動(dòng)保持同 步更新。內(nèi)部?jī)?nèi)存緩沖區(qū)空間是根據(jù)需要從實(shí)用程序堆中分配的指定內(nèi)存區(qū)域,它用來(lái)存儲(chǔ)對(duì)正在創(chuàng)建或重組的索引所作的更改。使用內(nèi)存緩沖區(qū)空間使索引重組操 作能夠通過(guò)這樣的方式來(lái)處理更改,即先直接從內(nèi)存讀取,然后讀取日志(如有必要),但讀取日志的時(shí)間要晚得多。在重組操作完成后,將釋放所分配的內(nèi)存。重 組完成后,重建的索引可能不是最佳集群的索引。如果為索引指定 PCTFREE,則在重組期間,每頁(yè)上均會(huì)保留相應(yīng)百分比的空間。

對(duì)于分區(qū)表,支持對(duì)各個(gè)索引進(jìn)行聯(lián)機(jī)索引重組和清除。要對(duì)各個(gè)索引進(jìn)行重組,指定索引名:REORG INDEX index_name for TABLE table_name

對(duì)于空間索引或多維集群(MDC)表,不支持采用 ALLOW WRITE 方式的聯(lián)機(jī)索引重組。

注: REORG INDEXES 命令的 CLEANUP ONLY 選項(xiàng)不能完全重組索引。 CLEANUP ONLY ALL 選項(xiàng)將除去那些標(biāo)記為“刪除”且被認(rèn)為要落實(shí)的鍵。此外,它還將釋放所有標(biāo)記為“刪除”且被認(rèn)為要落實(shí)的鍵所在的頁(yè)。在釋放頁(yè)后,相鄰的葉子頁(yè)將會(huì)合并, 前提是這樣做可以在合并頁(yè)上至少留出 PCTFREE 可用空間。 PCTFREE 是指在創(chuàng)建索引時(shí)為其定義的可用空間百分比。 CLEANUP ONLY PAGES 選項(xiàng)僅刪除那些標(biāo)記為“刪除”且被認(rèn)為要落實(shí)的所有鍵所在的頁(yè)。

使用 CLEANUP ONLY 選項(xiàng)對(duì)分區(qū)表的索引進(jìn)行重組時(shí),支持任何訪問(wèn)級(jí)別。如果未指定 CLEANUP ONLY 選項(xiàng),則缺省訪問(wèn)級(jí)別 ALLOW NO ACCESS 是唯一支持的訪問(wèn)級(jí)別。

REORG INDEXES 具有下列要求:

1)對(duì)索引和表具有 SYSADM、SYSMAINT、SYSCTRL 或 DBADM 權(quán)限,或者具有 CONTROL 特權(quán)。

2)用于存儲(chǔ)索引的表空間的可用空間數(shù)量等于索引的當(dāng)前大小

在發(fā)出 CREATE TABLE 語(yǔ)句時(shí),考慮在大型表空間中重組索引。

3)其他日志空間

REORG INDEXES 需要記錄其活動(dòng)。因此,重組可能會(huì)失敗,尤其是在系統(tǒng)繁忙和記錄其他并發(fā)活動(dòng)時(shí)。

注: 如果具有 ALLOW NO ACCESS 選項(xiàng)的 REORG INDEXES ALL 命令運(yùn)行失敗,則會(huì)標(biāo)記索引無(wú)效并且此項(xiàng)操作不可撤銷。但是,如果具有 ALLOW READ ACCESS 選項(xiàng)的 REORG 命令或具有 ALLOW WRITE ACCESS 選項(xiàng)的 REORG 命令運(yùn)行失敗,則可以復(fù)原原來(lái)的索引對(duì)象。另外還需要注意,在 DB2 V9 開(kāi)放平臺(tái)上對(duì)新引入的表分區(qū)功能來(lái)說(shuō),不能聯(lián)機(jī)重組分區(qū)表。

4.對(duì)表和索引進(jìn)行 runstats

DB2 優(yōu)化器使用目錄統(tǒng)計(jì)信息來(lái)確定任何給定查詢的最佳訪問(wèn)方案。如果有關(guān)表或索引的統(tǒng)計(jì)信息已過(guò)時(shí)或者不完整,則會(huì)導(dǎo)致優(yōu)化器選擇不是最佳的方案,并且會(huì)降低 執(zhí)行查詢的速度。但是,決定要為給定的工作負(fù)載收集哪些統(tǒng)計(jì)信息是很復(fù)雜的事情,并且使這些統(tǒng)計(jì)信息保持最新是一項(xiàng)很花費(fèi)時(shí)間的任務(wù)。

以往,建議對(duì)一個(gè)頻繁進(jìn)行大量更新、插入或者刪除操作的表進(jìn)行 RUNSTATS,建議在重組表之后運(yùn)行 RUNSTATS 。我們都是通過(guò)手工執(zhí)行 RUNSTATS 命令,或者通過(guò) DB2 任務(wù)中心調(diào)度執(zhí)行 RUNSTATS 命令來(lái)收集表的統(tǒng)計(jì)信息以改善數(shù)據(jù)庫(kù)性能。現(xiàn)在 DB2 V9 又新增了自動(dòng)收集統(tǒng)計(jì)信息功能, 自動(dòng)收集統(tǒng)計(jì)信息通過(guò)收集最新的表統(tǒng)計(jì)信息來(lái)改善數(shù)據(jù)庫(kù)性能。 DB2 首先確定工作負(fù)載需要哪些統(tǒng)計(jì)信息以及需要更新哪些統(tǒng)計(jì)信息,然后,在后臺(tái)自動(dòng)調(diào)用 RUNSTATS 實(shí)用程序以確保收集并維護(hù)正確的統(tǒng)計(jì)信息。然后,DB2 優(yōu)化器根據(jù)準(zhǔn)確的統(tǒng)計(jì)信息來(lái)選擇訪問(wèn)方案。

從 IBM DB2 版本 9.1 開(kāi)始,在創(chuàng)建新的數(shù)據(jù)庫(kù)時(shí),缺省情況下會(huì)啟用自動(dòng)收集統(tǒng)計(jì)信息(RUNSTATS)功能。這表示 DB2 數(shù)據(jù)庫(kù)管理器將確定是否需要更新數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息。然后,RUNSTATS 實(shí)用程序會(huì)根據(jù)需要在后臺(tái)自動(dòng)運(yùn)行,以確保最新的數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息可用。用戶在創(chuàng)建數(shù)據(jù)庫(kù)之后,可以通過(guò)將數(shù)據(jù)庫(kù)配置參數(shù) AUTO_RUNSTATS 設(shè)置為 OFF 來(lái)禁用自動(dòng)收集統(tǒng)計(jì)信息。需要注意的是,將數(shù)據(jù)庫(kù)從版本 8 遷移到版本 9.1 時(shí),不會(huì)自動(dòng)啟用此功能。要在已遷移的數(shù)據(jù)庫(kù)中使用此功能,必須手工進(jìn)行啟用。

通過(guò)使用自動(dòng)統(tǒng)計(jì)信息收集功能,可以讓 DB2 確定是否需要更新數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息。在啟用了自動(dòng)統(tǒng)計(jì)信息收集功能的情況下,DB2 將自動(dòng)在后臺(tái)運(yùn)行 RUNSTATS 實(shí)用程序以確保最新的數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息可用.

RUNSTATS命令的語(yǔ)法如下:

>>-RUNSTATS ON TABLE--table-name-------------------------------->

>-----+-+--------------------------------------------------------------------+-+>

      | '-WITH DISTRIBUTION--+--------------------------------------------+--' |

      |                      '-AND--+----------+--+-INDEXES ALL--------+--'    |

      |                             '-DETAILED-' '-INDEX--index-name--'       |

      '-+--------------------------------------------------+-------------------'

        '--+-AND-+---+----------+--+-INDEXES ALL--------+--'

           '-FOR-'   '-DETAILED-' '-INDEX--index-name--'

>-----+--------------------------+-----------------------------><

      |            .-CHANGE----. |

      '-SHRLEVEL--+-REFERENCE-+--'

如果沒(méi)有啟用自動(dòng)統(tǒng)計(jì)信息功能,那么我們還需要手工對(duì)需要的表和索引使用 runstats 命令,更新統(tǒng)計(jì)信息。比如想對(duì) TEST 表和索引運(yùn)行統(tǒng)計(jì)信息,發(fā)出“ runstats on table test and index all ” 。

對(duì)表 TEST 以及索引更新統(tǒng)計(jì)信息

C:\> db2 runstats on table rhette.test and index all

DB20000I   RUNSTATS 命令成功完成。

收集索引統(tǒng)計(jì)信息以允許優(yōu)化器評(píng)估是否應(yīng)該使用索引來(lái)解析查詢。如果想收集索引統(tǒng)計(jì)信息,必須連接至包含表和索引的數(shù)據(jù)庫(kù)并具有下列其中一個(gè)權(quán)限級(jí)別:sysadm 、sysctrl 、sysmaint 、dbadm 、對(duì)表的 CONTROL 特權(quán) 。

帶 SAMPLED DETAILED 選項(xiàng)執(zhí)行 RUNSTATS 命令需要 2MB 統(tǒng)計(jì)信息堆。將附加的 488 個(gè) 4K 頁(yè)分配給為此附加內(nèi)存需求設(shè)置的 stat_heap_sz 數(shù)據(jù)庫(kù)配置參數(shù)。如果該堆看起來(lái)太小,則 RUNSTATS 在嘗試收集統(tǒng)計(jì)信息之前會(huì)返回一條錯(cuò)誤。

現(xiàn)在我們?cè)?DB2CLP 窗口中,連上示例數(shù)據(jù)庫(kù) SAMPLE,在示例數(shù)據(jù)庫(kù)中存在表 RHETTE.PROJECT,其有兩個(gè)索引 PK_PROJE CT 和 XPROJ2,我們要?jiǎng)?chuàng)建索引 PK_PROJE CT 和 XPROJ2 的詳細(xì)統(tǒng)計(jì)信息,可以發(fā)出帶 AND DETAILED INDEXES ALL 選項(xiàng)的 RUNSTATS 命令。創(chuàng)建索引 PK_PROJECT 和 XPROJ2 的詳細(xì)統(tǒng)計(jì)信息

C:\> db2 RUNSTATS ON TABLE rhette.project AND DETAILED

INDEXES ALL DB20000I   RUNSTATS 命令成功完成。

命令成功完成。如果我們想創(chuàng)建兩個(gè)索引的詳細(xì)統(tǒng)計(jì)信息,但是不想耗費(fèi)太多的資源和時(shí)間,可以使用采樣的方式而不是對(duì)每個(gè)索引條目執(zhí)行詳細(xì)計(jì)算。

創(chuàng)建索引 PK_PROJECT 和 XPROJ2 的詳細(xì)統(tǒng)計(jì)信息,使用采樣方式

C:\> db2 RUNSTATS ON TABLE rhette.project AND SAMPLED DETAILED

INDEXES ALL DB20000I   RUNSTATS 命令成功完成。

命令成功完成。如果要?jiǎng)?chuàng)建索引上的詳細(xì)采樣統(tǒng)計(jì)信息以及表的分布統(tǒng)計(jì)信息,以便索引和表統(tǒng)計(jì)信息一致,可以使用帶 WITH DISTRIBUTION 選項(xiàng)的 RUNSTATS 命令。

收集表 rhette.project 的詳細(xì)統(tǒng)計(jì)信息

C:\> db2 RUNSTATS ON TABLE rhette.project

WITH DISTRIBUTION ON KEY COLUMNS AND SAMPLED

DETAILED INDEXES ALL DB20000I   RUNSTATS 命令成功完成。

命令成功完成。如果想全面收集表和索引的信息,而不是使用抽樣的方式收集表 rhette.project 的詳細(xì)統(tǒng)計(jì)信息

C:\> db2 RUNSTATS ON TABLE rhette.project WITH DISTRIBUTION

AND DETAILED INDEXES ALL DB20000I   RUNSTATS 命令成功完成。

5 (可選) 上面命令完成后可以重復(fù)第二步,檢查REORG的結(jié)果,如果需要,可以再次執(zhí)行REORG和RUNSTATS命令。

6 BIND或REBIND

RUNSTATS命令運(yùn)行后,應(yīng)對(duì)數(shù)據(jù)庫(kù)中的PACKAGE進(jìn)行重新聯(lián)編,簡(jiǎn)單地,可以使用db2rbind命令來(lái)完成。

db2rbind命令的語(yǔ)法如下:

>>-db2rbind--database--/l logfile----+------+------------------->

                                     '-all--'

                                       .-conservative--.

>-----+-------------------------+--/r--+-any-----------+-------><

      '-/u userid--/p password--'

例如,如果數(shù)據(jù)庫(kù)名為SAMPLE,執(zhí)行:

db2rbind sample -l db2rbind.out

二、DB2 V8.2 如何配置AUTO_RUNSTATS

1.配置參數(shù)

首先確保DBM參數(shù)HEALTH_MON是ON,

然后使用如下命令打開(kāi)AUTO_RUNSTATS 的開(kāi)關(guān)。

db2 update db cfg using AUTO_MAINT ON AUTO_TBL_MAINT ON AUTO_RUNSTATS ON

2.設(shè)置需要自動(dòng)RUNSTATS的表的profile,該profile會(huì)紀(jì)錄于系統(tǒng)表sysibm.systables的STATISTICS_PROFILE列

例如:

db2 runstats on table huangdk.hasales and indexes all tablesample system(20) set profile only                                              

說(shuō)明:a.RUNSTATS的語(yǔ)法見(jiàn)《命令指南》

          http://publib.boulder.ibm.com/in ... c/core/r0001980.htm

          b.tablesample 是采樣runstats的選項(xiàng),例子里采用system的方法,采樣20%

3.AUTO_RUNSTATS觸發(fā)條件

配置完后,需要重起一下實(shí)例,然后系統(tǒng)會(huì)在第一次連接請(qǐng)求時(shí),去觸發(fā)AUTO_RUNSTATS,如果表需要RUNSTATS,就開(kāi)始RUNSTATS。

以后,系統(tǒng)每隔3小時(shí)觸發(fā)AUTO_RUNSTATS

用戶可以使用以下語(yǔ)句檢查:

db2 select STATS_TIME,SUBSTR(STATISTICS_PROFILE,1,200) from sysibm.systables

其中,STATS_TIME列指示最后一次RUNSTATS的時(shí)間。

另外,db2diag.log里有這樣的信息:

2004-10-27-16.08.39.007000+480 I30117H327         LEVEL: Event

PID     : 2596                 TID : 3404        PROC : db2fmp.exe

INSTANCE: DB2                  NODE : 000

FUNCTION: DB2 UDB, Automatic Table Maintenance, db2HmonEvalStats, probe:100

START   : Automatic Runstats: evaluation has started on database TBCSAMPL

指示自動(dòng)RUNSTATS已經(jīng)運(yùn)行。

三、優(yōu)化語(yǔ)句的批量獲取

1、查找數(shù)據(jù)庫(kù)管理表空間(DMS)

SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D' ;

2、DMS下的creator(用戶、模式)

SELECT DISTINCT creator

FROM sysibm.systables

WHERE tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D' );

'DB2ADMIN'

3、creator下的表數(shù)量

SELECT creator,count(1)

FROM sysibm.systables

WHERE Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D')

GROUP BY creator ;

--'DB2ADMIN'    56

4、構(gòu)造優(yōu)化腳本

--=============================================================================

(1).reorgchk update statistics on table SCHEMA.TABLE ;

select 'reorgchk update statistics on table DB2ADMIN.'||rtrim(name)||';' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D')

--=============================================================================

(2).reorg table SCHEMA.TABLE ;

select 'reorg table DB2ADMIN.'||rtrim(name)||';' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D')

--=============================================================================

(3).reorg indexes all for table SCHEMA.TABLE ;

select 'reorg indexes all for table DB2ADMIN.'||rtrim(name)||';' from sysibm.systables where creator = 'DB2ADMIN' AND Type = 'T' AND tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D'

--=============================================================================

(4).runstats on table SCHEMA.TABLE and indexes all;                                                      

select 'runstats on table DB2ADMIN.'||rtrim(name)||' and indexes all;'

from sysibm.systables

where creator = 'DB2ADMIN' AND

      Type = 'T' AND

    tbspace IN (SELECT TBSpace FROM syscat.tablespaces WHERE TBSpaceType = 'D') ;

--=============================================================================

來(lái)自: http://hi.baidu.com/kiki3890528/blog/item/1087642ac21cba93033bf6b8.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DB2 runstats、reorgchk、reorg 命令
DB2中更新執(zhí)行計(jì)劃的幾個(gè)常見(jiàn)的方法
DB2 UDB Version 8.2 中的 RUNSTATS
(轉(zhuǎn))Db2 數(shù)據(jù)庫(kù)性能優(yōu)化中,十個(gè)共性問(wèn)題及難點(diǎn)的處理經(jīng)驗(yàn)
db2自動(dòng)重組
詳解DB2 sqlstate 57016 原因碼 "7"錯(cuò)誤
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服