This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated!

Hier ist deine vollständige und bereinigte Query Store Auswertungsbibliothek für SQL Server 2019, ohne nicht unterstützte Spalten:


✅ 1. Top Queries nach Gesamtdauer (total duration)

sqlKopierenBearbeitenSELECT  
    qt.query_sql_text,
    rs.avg_duration / 1000 AS avg_duration_ms,
    rs.count_executions,
    rs.total_duration / 1000 AS total_duration_ms,
    rs.last_execution_time
FROM sys.query_store_runtime_stats rs
JOIN sys.query_store_plan p ON rs.plan_id = p.plan_id
JOIN sys.query_store_query qs ON p.query_id = qs.query_id
JOIN sys.query_store_query_text qt ON qs.query_text_id = qt.query_text_id
WHERE rs.last_execution_time >= DATEADD(HOUR, -6, GETDATE())
ORDER BY rs.total_duration DESC;

✅ 2. Top Queries nach logischen Lesezugriffen (logical reads)

sqlKopierenBearbeitenSELECT  
    qt.query_sql_text,
    rs.avg_logical_io_reads,
    rs.total_logical_io_reads,
    rs.count_executions,
    rs.last_execution_time
FROM sys.query_store_runtime_stats rs
JOIN sys.query_store_plan p ON rs.plan_id = p.plan_id
JOIN sys.query_store_query qs ON p.query_id = qs.query_id
JOIN sys.query_store_query_text qt ON qs.query_text_id = qt.query_text_id
WHERE rs.last_execution_time >= DATEADD(HOUR, -6, GETDATE())
ORDER BY rs.total_logical_io_reads DESC;

✅ 3. Top Queries nach Ausführungsanzahl

sqlKopierenBearbeitenSELECT  
    qt.query_sql_text,
    rs.count_executions,
    rs.avg_duration / 1000 AS avg_duration_ms,
    rs.last_execution_time
FROM sys.query_store_runtime_stats rs
JOIN sys.query_store_plan p ON rs.plan_id = p.plan_id
JOIN sys.query_store_query qs ON p.query_id = qs.query_id
JOIN sys.query_store_query_text qt ON qs.query_text_id = qt.query_text_id
WHERE rs.last_execution_time >= DATEADD(HOUR, -6, GETDATE())
ORDER BY rs.count_executions DESC;

✅ 4. Queries mit mehreren Ausführungsplänen

sqlKopierenBearbeitenSELECT  
    qt.query_sql_text,
    q.query_id,
    COUNT(DISTINCT p.plan_id) AS num_plans,
    MAX(rs.last_execution_time) AS last_executed
FROM sys.query_store_query q
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id
GROUP BY qt.query_sql_text, q.query_id
HAVING COUNT(DISTINCT p.plan_id) > 1
ORDER BY num_plans DESC;

Wenn du diese Auswertungen regelmäßig brauchst, kann ich dir sie auch als .sql-Skript zum Download zusammenstellen – einfach Bescheid sagen.

<hr>

Sehr gerne! Hier ist ein T-SQL-Skript, das du problemlos in einen SQL Server Agent Job einbauen kannst. Es misst den Füllgrad der TempDB und protokolliert die Nutzung von User-Objekten, internen Objekten, Version Store und freiem Speicherplatz.


Ziel: Protokollierung des TempDB-Nutzungsgrads über die Zeit

🔧 1. Schritt: Logging-Tabelle anlegen

sqlKopierenBearbeitenUSE [msdb];  -- Oder eigene Monitoring-DB

IF OBJECT_ID('dbo.TempDB_UsageLog', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.TempDB_UsageLog (
        LogTime DATETIME NOT NULL DEFAULT GETDATE(),
        FreeMB INT,
        UserObjectsMB INT,
        InternalObjectsMB INT,
        VersionStoreMB INT,
        MixedExtentsMB INT
    );
END

🚀 2. Schritt: Abfrage für Agent Job (z. B. alle 5–15 Minuten)

sqlKopierenBearbeitenINSERT INTO msdb.dbo.TempDB_UsageLog (FreeMB, UserObjectsMB, InternalObjectsMB, VersionStoreMB, MixedExtentsMB)
SELECT  
    SUM(unallocated_extent_page_count) * 8 / 1024 AS FreeMB,
    SUM(user_object_reserved_page_count) * 8 / 1024 AS UserObjectsMB,
    SUM(internal_object_reserved_page_count) * 8 / 1024 AS InternalObjectsMB,
    SUM(version_store_reserved_page_count) * 8 / 1024 AS VersionStoreMB,
    SUM(mixed_extent_page_count) * 8 / 1024 AS MixedExtentsMB
FROM sys.dm_db_file_space_usage;

📊 Optional: Analyse-Query zur grafischen Auswertung

sqlKopierenBearbeitenSELECT 
    LogTime,
    FreeMB,
    UserObjectsMB,
    InternalObjectsMB,
    VersionStoreMB
FROM msdb.dbo.TempDB_UsageLog
ORDER BY LogTime DESC;

🛠 Empfehlung für den SQL Agent Job:

  • Jobname: Log TempDB Usage
  • Schritt 1: T-SQL aus obigem Insert-Skript
  • Zeitplan: alle 5–15 Minuten (je nach Auflösung)
  • Aufbewahrung: evtl. per zweitem Job aufräumen (älter als 30 Tage löschen)
sqlKopierenBearbeitenDELETE FROM msdb.dbo.TempDB_UsageLog WHERE LogTime < DATEADD(DAY, -30, GETDATE());

Wenn

This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated!

Ähnliche Beiträge

  • Neues CU-19 für den SQL Server 2022 verfügbar

    This post might contain affiliate links. We may earn a commission if you click and make a purchase. Your support is appreciated! In today’s fast-paced digital world, developers are constantly seeking new ways to streamline their workflows and deliver value more efficiently. Whether you’re working on backend services, crafting dynamic frontends, or orchestrating containerized deployments,…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.