Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana saya bisa membersihkan SSISDB?

Phil Brammer mengalami ini dan sejumlah hal lain yang terkait dengan perawatan dan pemberian makan katalog SSIS, yang ia liput di posnya Rekomendasi Pengindeksan Katalog .

Masalah akar

Akar masalah adalah bahwa MS berusaha merancang SSIS dengan mempertimbangkan RI tetapi mereka malas dan membiarkan penghapusan berjenjang terjadi versus menanganinya secara eksplisit.

Resolusi

Sampai MS mengubah cara kerjanya, opsi yang didukung adalah

Saya tahu di klien saya saat ini, kami hanya memuat data di larut malam sehingga SSISDB tenang selama jam kerja.

Jika menjalankan pekerjaan pemeliharaan selama periode tenang bukanlah suatu pilihan, maka Anda sedang mencari untuk membuat pernyataan penghapusan Anda sendiri untuk mencoba membuat penghapusan berjenjang menjadi lebih sedikit .

Di klien saya saat ini, kami telah menjalankan sekitar 200 paket setiap malam selama 10 bulan terakhir dan juga dalam 365 hari sejarah. Tabel terbesar kami, berdasarkan urutan besarnya adalah.

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

Driver dari semua data itu, internal.operations hanya memiliki 3300 baris di dalamnya, yang sejalan dengan komentar Phil tentang seberapa eksponensial data ini tumbuh.

Jadi, identifikasi operation_id untuk dibersihkan dan penghapusan dari tabel daun bekerja kembali ke inti, internal.operations tabel.

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;

Peringatan biasa berlaku

  • jangan percaya kode acak di internet
  • gunakan diagram dari ssisstalk dan/atau tabel sistem untuk mengidentifikasi semua dependensi
  • Anda mungkin hanya perlu mengelompokkan operasi penghapusan ke dalam operasi yang lebih kecil
  • Anda mungkin mendapat manfaat dengan menghentikan RI untuk operasi, tetapi pastikan untuk mengaktifkannya kembali dengan opsi centang agar dapat dipercaya.
  • konsultasikan dengan dba Anda jika operasi berlangsung lebih dari 4 jam

edit Juli 2020

Tim Mitchell memiliki kumpulan artikel yang bagus tentang Pembersihan Otomatis Katalog SSIS dan Cara yang lebih baik untuk Membersihkan Basis Data Katalog SSIS dan buku barunya yang keren Katalog SSIS:Instal, Kelola , Amankan dan Pantau Infrastruktur ETL Perusahaan Anda

@Yong Jun Kim dicatat di komentar

Ini tentu saja terjadi jika Anda menggunakan SSIS IR di dalam Azure Data Factory. Anda akan menemukan tabel "normal" masih ada tetapi kosong, dengan *_scaleout versi yang berisi semua data.

Referensi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memulihkan cadangan SQL Server 2014 di SQL Server 2008

  2. Berisi () fungsi terputus-putus dengan string angka?

  3. Haruskah saya mendesain tabel dengan kunci utama varchar atau int?

  4. Nilai kolom identitas server SQL dimulai dari 0, bukan 1

  5. Tingkat Isolasi SQL Server:Seri