我很难理解我们目前用来增加空间并减少保留数据库空间(空间上下)的过程。下面是空间下降工作的一部分:
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表,我们指定%增加,同时空间向上和空格左边的条目
此致 阿米特
答案 0 :(得分: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字节。
希望这有帮助。