2016-04-20 4 views
0

Мне сложно понять процедуру, которую мы используем в настоящее время для увеличения пространства и уменьшения пространства (пространства вверх и вниз) из резервной базы данных. Ниже приведена пробел:Проблемы с пространством Teradata

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 где мы указываем увеличение%, тогда как пространство вверх и влево пространство ввода

С уважением, Amit

ответ

1

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

T1.MAXPERM - Это общее выделенное пространство в базе данных

T1.MAXCURRENTPERM - Это пространство от AMP, потребляющего наибольшее количество пространства. Поскольку данные распределяются по PI таблицы, неравномерное распределение данных может привести к тому, что в базе данных не будет места, когда AMP, потребляющий самое большое пространство, не сможет хранить больше данных.

(T1.MAXCURRENTPERM * T1.NUMAMPS) - Рассчитывает потребляется пространства для базы данных на основе AMP занимает наибольшее место. Учет неравномерного распределения данных в базе данных.

Производная таблица T1 должна быть простой. Он просто агрегирует информацию о пространстве на уровне базы данных с уровня AMP, DatabaseName в DBC.DiskSpace.

Вторая половина предложения WHERE устанавливает условие, что разница в пространстве для базы данных в T1 и столбце Space_Left таблицы управления больше или равна 1M байт.

Надеюсь, это поможет.

+0

Спасибо большое Роб! Я не мог понять одну вещь здесь: – user3901666

+0

Спасибо много Роб! Я не мог понять здесь одну вещь: (T1.MAXCURRENTPERM * T1.NUMAMPS) - вычисляет потребляемое пространство для базы данных на основе AMP, потребляющего наибольшее пространство Как это рассчитывается? Предположим, DB_SPACE = 100 ГБ, 10 AMP SYSTEM, MAXCURRENtPERM = 9GB, затем MAXCURRENTPERM * NUMAMPS = 9 * 9 = 81GB. Какое значение здесь здесь? – user3901666

+0

В базе данных сообщается об отсутствии места, когда один или несколько AMP не могут хранить данные. В вашем примере, как только AMP, потребляющий 9 ГБ, достигнет 10 ГБ, в следующий раз, когда AMP будет поручено хранить дополнительные данные, операция завершится с ошибкой. Таким образом, представление пространства на основе MAXCURRENTPERM дает «эффективное» потребление пространства для базы данных. –

Смежные вопросы