Obje araDBA.usp_Collect_Metadata
Demo modu

DBA.usp_Collect_Metadata

yordam

DB-12 · değişiklik 9.10.2026 · Obje aramaya dön

İfadeler

2 ifade · 650 çalışma · toplam 0,1 sn
Sorgu (query_hash)ÇalışmaOrt. süre (ms) Ort. CPU (ms)Ort. okumaSüredeki pay
0x3928613B4FC7EA36 502 0,1 0,1 2 %80,4
0xC5F60929A346EB49 148 0,1 0,1 2 %19,6

Bağımlılıklar

Doğrudan referanslar (sys.sql_expression_dependencies); dinamik SQL ve geç bağlanan adlar görünmeyebilir.
DBA.usp_Collect_MetadataDBA.usp_Collect_Metadata DBA.ManagedServersDB-12.DBA.ManagedServers · aynı veritabanı DBA.MonitoredDatabaseDB-12.DBA.MonitoredDatabase · aynı veritabanı DBA.usp_Apply_MetadataDB-12.DBA.usp_Apply_Metadata · aynı veritabanı DBA.usp_Pull_MetadataDB-12.DBA.usp_Pull_Metadata · aynı veritabanı DBA.usp_RunLog_EndDB-12.DBA.usp_RunLog_End · aynı veritabanı DBA.usp_RunLog_StartDB-12.DBA.usp_RunLog_Start · aynı veritabanıyokKullananlar Kullandıkları
aynı veritabanıbaşka veritabanılinked server
YönNesneTürKapsam
kullanıyor DBA.ManagedServers tablo aynı veritabanı
kullanıyor DBA.MonitoredDatabase tablo aynı veritabanı
kullanıyor DBA.usp_Apply_Metadata yordam aynı veritabanı
kullanıyor DBA.usp_Pull_Metadata yordam aynı veritabanı
kullanıyor DBA.usp_RunLog_End yordam aynı veritabanı
kullanıyor DBA.usp_RunLog_Start yordam aynı veritabanı
Tanım
-- Faz 5 ölçek: yüzlerce sunucuda toplama N paralel job'a bölünür (Collect.ShardCount, 900_agent_jobs); her job
-- ServerID % @ShardCount = @ShardIndex olan sunucuları alır. Hedef bazlı applock zaten eşzamanlı çalışmayı güvenli kılıyor.
CREATE   PROCEDURE DBA.usp_Collect_Metadata
    @ServerID int = NULL, @DatabaseName sysname = NULL, @ShardCount int = 1, @ShardIndex int = 0
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @lockRes nvarchar(255), @lock int;
    DECLARE @sid int, @link sysname, @db sysname, @rows bigint, @runId bigint, @st datetime, @err nvarchar(4000);

    DECLARE c CURSOR LOCAL FAST_FORWARD FOR
        SELECT ms.ServerID, ms.DBLinkName, md.DatabaseName
        FROM DBA.ManagedServers AS ms
        JOIN DBA.MonitoredDatabase AS md ON md.ServerID = ms.ServerID
        WHERE ms.IsActive = 1 AND md.IsActive = 1 AND md.CollectMetadata = 1
          AND (@ServerID IS NULL OR ms.ServerID = @ServerID)
          AND ms.ServerID % NULLIF(@ShardCount, 0) = @ShardIndex
          AND (@DatabaseName IS NULL OR md.DatabaseName = @DatabaseName)
        ORDER BY ms.ServerID, md.DatabaseName;
    OPEN c;
    FETCH NEXT FROM c INTO @sid, @link, @db;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC DBA.usp_RunLog_Start 'METADATA', @sid, @db, @runId OUTPUT, @st OUTPUT;
        -- R03-2: aynı hedef için eşzamanlı ikinci çalıştırma staging'i ezmesin
        SET @lockRes = CONCAT(N'MiniRAG_Collect_METADATA_', @sid, N'_', @db);
        EXEC @lock = sp_getapplock @Resource = @lockRes, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = 0;
        IF @lock < 0
        BEGIN
            EXEC DBA.usp_RunLog_End @runId, @st, 'WARN', 0, N'Aynı hedef için başka bir toplama sürüyor — atlandı';
            FETCH NEXT FROM c INTO @sid, @link, @db;
            CONTINUE;
        END
        BEGIN TRY
            EXEC DBA.usp_Pull_Metadata @sid, @link, @db;
            EXEC DBA.usp_Apply_Metadata @sid, @db, @rows OUTPUT;
            EXEC DBA.usp_RunLog_End @runId, @st, 'OK', @rows, NULL;
        END TRY
        BEGIN CATCH
            IF XACT_STATE() <> 0 ROLLBACK;
            SET @err = LEFT(CONCAT(N'[', ERROR_NUMBER(), N'] ', ERROR_MESSAGE()), 4000);
            EXEC DBA.usp_RunLog_End @runId, @st, 'ERROR', NULL, @err;
        END CATCH
        EXEC sp_releaseapplock @Resource = @lockRes, @LockOwner = 'Session';
        FETCH NEXT FROM c INTO @sid, @link, @db;
    END
    CLOSE c;
    DEALLOCATE c;
END;

Bu nesnenin analizleri

Kayıt yok

Bu nesne için analiz yok.