Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да почистя SSISDB?

Фил Брамър се натъкна на това и множество други неща, свързани с грижата и захранването на каталога на SSIS, които той покрива в публикацията си Препоръки за индексиране на каталог .

Коренен проблем

Основният проблем е, че MS се опитаха да проектират SSIS с RI в ума, но те бяха мързеливи и позволиха каскадните изтривания да се случат, вместо да ги обработват изрично.

Резолюция

Докато MS не промени начина, по който работят нещата, поддържаната опция е

Знам, че при моя настоящ клиент зареждаме данни само в малките часове, така че SSISDB е тих през работното време.

Ако изпълнението на заданието по поддръжката по време на спокоен период не е опция, тогава гледате да изработите свои собствени изрази за изтриване, за да се опитате да накарате каскадните изтривания да смучат по-малко .

При сегашния ми клиент предлагаме около 200 пакета всяка вечер през последните 10 месеца и също така имаме 365 дни история. Нашите най-големи таблици в порядък са.

Schema    Table                   RowCount
internal  event_message_context   1,869,028
internal  operation_messages      1,500,811
internal  event_messages          1,500,803

Драйверът на всички тези данни, internal.operations има само 3300 реда в него, което е в съответствие с коментара на Фил за това колко експоненциално нарастват тези данни.

И така, идентифицирайте operation_id да бъдат изчистени и изтриването от листовите таблици да работи обратно към ядрото, internal.operations таблица.

USE SSISDB;
SET NOCOUNT ON;
IF object_id('tempdb..#DELETE_CANDIDATES') IS NOT NULL
BEGIN
    DROP TABLE #DELETE_CANDIDATES;
END;

CREATE TABLE #DELETE_CANDIDATES
(
    operation_id bigint NOT NULL PRIMARY KEY
);

DECLARE @DaysRetention int = 100;
INSERT INTO
    #DELETE_CANDIDATES
(
    operation_id
)
SELECT
    IO.operation_id
FROM
    internal.operations AS IO
WHERE
    IO.start_time < DATEADD(day, [email protected], CURRENT_TIMESTAMP);

DELETE T
FROM
    internal.event_message_context AS T
    INNER JOIN
        #DELETE_CANDIDATES AS DC
        ON DC.operation_id = T.operation_id;

DELETE T
FROM
    internal.event_messages AS T
    INNER JOIN
        #DELETE_CANDIDATES AS DC
        ON DC.operation_id = T.operation_id;

DELETE T
FROM
    internal.operation_messages AS T
    INNER JOIN
        #DELETE_CANDIDATES AS DC
        ON DC.operation_id = T.operation_id;

-- etc
-- Finally, remove the entry from operations

DELETE T
FROM
    internal.operations AS T
    INNER JOIN
        #DELETE_CANDIDATES AS DC
        ON DC.operation_id = T.operation_id;

Прилагат се обичайните предупреждения

  • не се доверявайте на произволен код в интернет
  • използвайте диаграмите от ssistalk и/или системните таблици, за да идентифицирате всички зависимости
  • може да се наложи само да сегментирате операциите си за изтриване на по-малки операции
  • може да се възползвате от премахването на RI за операции, но не забравяйте да ги активирате отново с опцията за проверка, за да им се вярва.
  • консултирайте се с вашия dba, ако операциите продължават повече от 4 часа

Редакция от юли 2020 г.

Тим Мичъл има добър набор от статии за Автоматично почистване на SSIS каталог и По-добър начин за почистване на SSIS каталожна база данни и неговата фантастична нова книга Каталогът на SSIS:Инсталиране, управление , Защитете и наблюдавайте корпоративната си ETL инфраструктура

@Yong Jun Kim отбелязано в коментарите

Това със сигурност е случаят, ако използвате SSIS IR в Azure Data Factory. Ще откриете, че „нормалните“ таблици все още присъстват, но празни, с *_scaleout версии, съдържащи всички данни.

Препратки



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да получите отделните записи въз основа на максимална дата?

  2. задайте идентичност на колоната

  3. Вземете най-новите актуализирани записи

  4. Конструирайте дата от номер на година и седмица в MSSQL

  5. Какво прави транзакцията около едно изявление?