DBA.usp_Collect_Metadata
yordamDB-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ışma | Ort. süre (ms) | Ort. CPU (ms) | Ort. okuma | Sü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.aynı veritabanıbaşka veritabanılinked server
| Yön | Nesne | Tür | Kapsam |
|---|---|---|---|
| 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ı |
-- 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.