2016-04-20 44 views
0

我很難理解我們目前使用的一個過程,以便從備用數據庫增加空間並減少空間(空間上下)。下面是空間下降作業的一部分:Teradata space up issues

LOCKING DBC.DiskSpace FOR ACCESS 
SELECT 
    (((T1.MAXPERM) - (T1.MAXCURRENTPERM * T1.NUMAMPS)) 
       - (T2.SPACE_LEFT + T1.NUMAMPS)) (FORMAT 'Z(15)9') 
    INTO :var_SpaceAdj 
    FROM Ctrl_Base.Space_Ctrl T2 
     ,(
    SELECT DATABASENAME, SUM(MAXPERM), MAX(CURRENTPERM), COUNT(*) 
    FROM DBC.DiskSpace 
    WHERE DATABASENAME = :inP_Database 
    GROUP BY 1) 
      AS T1 (DATABASENAME, MAXPERM, MAXCURRENTPERM, NUMAMPS) 
    WHERE T1.DATABASENAME = T2.DATABASENAME 
    AND (((T1.MAXPERM) - (T1.MAXCURRENTPERM * T1.NUMAMPS)) 
     - (T2.SPACE_LEFT + T1.NUMAMPS)) >= 1000000 
     ; 

有沒有人請幫我理解這是幹什麼的? 我們有一個Ctrl_Base.Space_Ctrl表,其中我們指定在空間和向上的剩餘空間進入

問候%增加, 阿米特

回答

1

((T1.MAXPERM) - (T1.MAXCURRENTPERM * T1.NUMAMPS))

T1.MAXPERM - 這是總的分配空間在數據庫中

T1.MAXCURRENTPERM - 這是來自消耗最多空間的AMP的空間。由於數據是通過表格的PI分佈的,因此當消耗最高空間的AMP無法存儲更多數據時,數據的不均勻分佈會導致數據庫報告無空間。

(T1.MAXCURRENTPERM * T1.NUMAMPS) - 計算消耗的基礎上,AMP佔用了大部分空間數據庫空間。考慮數據庫中不均勻的數據分佈。

派生表T1應該很簡單。它只是將空間信息從DBC.DiskSpace中的AMP,DatabaseName級別聚集到數據庫級別。

WHERE子句的後半部分提出了一個條件,即T1中的數據庫和控制表的Space_Left列中的數據庫的空間差異大於或等於1M字節。

希望這會有所幫助。

+0

非常感謝Rob!我在這裏無法理解一件事: – user3901666

+0

非常感謝Rob!我無法理解這裏的一件事: (T1.MAXCURRENTPERM * T1.NUMAMPS) - 基於消耗最多空間的AMP計算數據庫的消耗空間 這是如何計算的?假設DB_SPACE = 100 GB, 10 AMP SYSTEM,MAXCURRENtPERM = 9GB然後MAXCURRENTPERM * NUMAMPS = 9 * 9 = 81GB。這裏的意義是什麼? – user3901666

+0

當一個或多個AMP無法存儲數據時,數據庫將報告空間不足情況。在您的示例中,一旦消耗9GB的AMP達到10GB,下次AMP負責存儲其他數據時,操作將失敗。因此,根據MAXCURRENTPERM報告空間會產生數據庫的「有效」空間消耗。 –