2012-02-21 64 views
4

爲DB2/Z V10的DB2文檔必須在tablespaces section下面的代碼片段:爲什麼DB2爲每個表空間建議一個表?

一般情況下,你只能有一個在每個表空間表。

但它實際上並沒有提供任何理由。

我們有一些表中存儲內容大致如下(在複雜性大大降低,但應該足以說明)歷史的基於時間的信息:

Table HOURLY_CPU_USAGE: 
    RecDate  date 
    RecTime  time 
    Node   char(32) 
    MaxCpuUsage float 
    primary key (RecDate, RecTime, Node) 
Table DAILY_CPU_USAGE: 
    RecDate  date 
    Node   char(32) 
    MaxCpuUsage float 
    primary key (RecDate, Node) 
Table MONTHLY_CPU_USAGE: 
    RecDate  date 
    Node   char(32) 
    MaxCpuUsage float 
    primary key (RecDate, Node) 

(每日表已經全部每小時記錄捲起成一天,並且每月表格與日常數據相同,將其捲入行中,日期爲YYYY-MM-01)。

現在看來,這個表格在目的上都非常相似,我不確定爲什麼我們希望將它們保存在單獨的表空間中。

折扣現在把它們組合成一張表的可能性,這是我提出的一個建議,但是有一些併發症阻止它。

什麼「一張表每個表空間」指南背後的基本原理是什麼?有什麼例外,如果有的話?我假設他們是可能是例外,因爲它似乎非常指導而非硬性規則。

+0

我認爲這將與'PAGESIZE'(及其分割)有關,儘管我並不完全確定。但是,該規則與推薦的最大表空間數量相結合,將會產生非常小的表格集合。在這種情況下,您可能會合理地將它們放入一個表空間中 - 數據集很小並且相關。我不會將它們合併成一張表格 - 只需要一名新程序員將所有**記錄相加,而不是一種類型。如果您確實有足夠的數據來保證它們,那麼其他表格應該可能是MQT。 – 2012-02-21 17:21:43

+0

@ X-Zero,你應該做出答案,即使假設能夠導出答案,也是有用的。 MQT是一個很好的建議,這是我們現在在代碼中明確做到的事情 - 我不確定在保留期限不同的情況下它是如何工作的(小時爲十天,每天爲一天,兩天爲每月),但這絕對是我會研究的。 – paxdiablo 2012-02-21 21:52:04

回答

2

只是一個瘋狂的猜測...但也許IBM建議每個表空間不要超過一個表,因爲許多db/2實用程序在表空間級別運行。如果您將多個表放入一個表空間中,那麼實用程序將作爲一個單元對所有表進行操作。

例如,備份和恢復工作在表空間級別。您無法在相同的表空間內備份/恢復單個表。他們都作爲一個單位備份或恢復。我相信同樣的事情適用於其他實用程序,也可能適用於許多調整參數。

5

現在,每個表空間維護一個表的主要原因是管理性的。大多數DB2實用程序在表空間級別工作。例如,如果您對特定表的表空間執行LOAD REPLACE,則所有其他表都將爲空,因爲LOAD REPLACE所做的第一件事是刪除所有行。

所以「爲什麼你不爲每個表空間保留一張桌子?」。我認爲當表與一個沒有其他用處的程度相關時,在一個表空間中包含多個表是合理的,甚至是可取的。例如。 CustomerTable + NextCustomerIDTable。

另一個考慮因素是表空間的類型。根據您創建的表空間的類型,在單個表空間中創建多個表時可能會影響性能。如果您未使用分段表空間,則表空間掃描將讀取表空間中的所有頁面,包括其他表中的頁面。請參閱「表空間掃描」主題:http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.ve%2Fdvnhlpcn_tablescan.htm

0

通常是因爲性能選項對於「每個表空間的一個表」配置往往更好。例如,如果對錶進行分區(對於每個TS需要1 Tb),則可以對某些查詢執行有限分區掃描。

(但作爲一個大型主機性能的人,我會說,是不是?):-)

4

它接縫,他們已經改變了他們的文檔中的文本。

link的問題提供現在包含以下信息:

,你應該在一個表空間中定義表的數量取決於表的特性 :

如果一個表可能會變得很大,最好把桌子放在自己的桌子空間裏。此設計簡化了性能調整,尤其是緩衝池調整。 對於較小的表格,多表格分段表格空間更好。此設計有助於減少需要管理備份和恢復的數據集的數量,以及數據庫系統在DB2 操作期間需要打開和關閉的數據集的數量 。

最好是由於以下原因每個數據庫儘量減少 表空間的數量:

在數據定義語句的執行,數據庫系統包含整個數據庫的專用鎖,直到提交執行操作 。排他鎖執行以下功能 函數: 排它鎖可防止同一數據庫中表和索引的數據定義語句的併發執行。 如果動態語句緩存被禁用(子系統參數CACHEDYN = NO),數據庫系統將使用數據庫鎖來連續執行數據定義語句和動態SQL 訪問數據庫中的表和索引的語句。

如果數據庫中的表空間更少,則同時鎖定更少的表空間。 在執行聯機REORG實用程序操作的SWITCH階段期間,數據庫系統會在整個數據庫上獲得排它鎖,以將在線REORG操作的執行和 數據定義語句序列化到數據庫中的表和索引上。

如果數據庫中有較少的表,則同時鎖定較少的表。 當數據庫中的表空間較少時,數據定義語句的日誌記錄體積較小。

相關問題