sys.dm_os_linux_disk_stats (Transact-SQL)

Platí pro: SQL Server 2025 (17.x) na Linuxu

Vrátí tabulku se statistikami vstupně-výstupních operací disku pro každé zařízení s Linuxem, která zobrazuje celkovou aktivitu mimo SQL Server v kumulativní aktualizaci (CU) 1 a novějších verzích SQL Serveru 2025 (17.x).

Zobrazení dynamické správy vrátí jeden řádek na diskové zařízení s Linuxem.

Název sloupce Datový typ Nullovatelný Description
dev_name nvarchar(256) Ne Název zařízení.
major_num bigint Ne Hlavní číslo zařízení.
minor_num bigint Ne Menší číslo zařízení.
reads_completed bigint Ne Počet dokončených čtení
reads_merged bigint Ne Počet sousedních čtení sloučených do jednoho požadavku
sectors_read bigint Ne Počet přečtených sektorů.
read_time_ms bigint Ne Milisekundy strávily servisní čtení.
writes_completed bigint Ne Počet dokončených zápisů
writes_merged bigint Ne Počet sousedních zápisů sloučených do jednoho požadavku
sectors_written bigint Ne Počet psaných sektorů.
write_time_ms bigint Ne Milisekundy strávily servisní zápisy.
ios_in_progress bigint Ne Počet IOs, které jsou aktuálně ve frontách požadavků
io_time_ms bigint Ne Milisekundy, které zařízení strávilo vstupně-výstupními operacemi
weighted_io_time_ms bigint Ne Vážený počet milisekund strávených vstupně-výstupními operacemi

Povolení

Vyžaduje VIEW SERVER PERFORMANCE STATE oprávnění na serveru.

Poznámky

  • Rozsah na úrovni hostitele: Výsledky odrážejí všechny aktivity na zařízení, včetně SQL Serveru, dalších služeb a operací systému na pozadí. Pokud chcete přiřazovat účinky úloh databáze, korelujte tyto výsledky se statistikami čekání SQL Serveru, jako WRITELOG je například a PAGEIOLATCH_*.

  • Interpretovat časové sloupce:

    Měření Výpočet
    Průměrná latence čtení (ms/op) read_time_ms / NULLIF(reads_completed, 0)
    Průměrná latence zápisu (ms/op) write_time_ms / NULLIF(writes_completed, 0)
    Využití zařízení (%) v intervalu io_time_ms / (elapsed_ms) * 100
    Průměrná délka fronty weighted_io_time_ms / elapsed_ms
  • Sektorové jednotky: Linux obvykle hlásí sektory v 512 bajtových jednotkách. Ověřte velikost sektoru vašeho prostředí a odpovídajícím způsobem upravte výpočty.

  • Použití s opatrností u víceklientských hostitelů: Vysoké hodnoty můžou pocházet z úloh jiných než SQL Serveru. Korelace se systémovými nástroji nebo jinými zobrazeními dynamické správy pro přisuzování

Toto zobrazení dynamické správy použijte s jinými zobrazeními dynamické správy specifické pro Linux pro holistické monitorování:

Scénáře použití

  • Pomalé vyprázdnění protokolu (skupiny dostupnosti nebo samostatné): Vysoká write_time_ms / writes_completed se zvýšenými oprávněními io_time_ms značí latenci zápisu na úrovni zařízení. Corroborate s čekáním WRITELOG .

  • Kontrolní bod nebo úlohy náročné na čtení: Rostoucí read_time_ms / reads_completed s trvalou read_MBps odezvou naznačuje omezení propustnosti podle latence. Zvažte nastavení úrovně úložiště nebo fronty.

  • Hlučné sousedy na sdílených hostitelích: Špičky v device_utilization_pct a avg_queue_length bez odpovídajících změn úloh SQL Serveru znamenají externí vstupně-výstupní tlak. Ověřte monitorování hostitele.

Examples

A. Aktuální snímek aktivity zařízení

Tento dotaz vrátí snímek aktivity pro aktuální úložné zařízení.

SELECT dev_name,
       reads_completed,
       read_time_ms,
       writes_completed,
       write_time_ms,
       ios_in_progress,
       io_time_ms,
       weighted_io_time_ms
FROM sys.dm_os_linux_disk_stats
ORDER BY io_time_ms DESC;

B. Latence a propustnost během 10sekundového ukázkového okna

Skript dvakrát vzorkuje zobrazení dynamické správy a vypočítá rozdíly pro latenci (milisekundy na operaci), propustnost (MB za sekundu), využití (procento) a délku fronty. Upravte @SectorBytes konfiguraci zařízení.

DECLARE @SectorBytes AS INT = 512;

-- verify sector size for your environment
DECLARE @SampleMs AS INT = 10000;

IF OBJECT_ID('tempdb..#before') IS NOT NULL
    DROP TABLE #before;

IF OBJECT_ID('tempdb..#after') IS NOT NULL
    DROP TABLE #after;

SELECT dev_name,
       reads_completed,
       reads_merged,
       sectors_read,
       read_time_ms,
       writes_completed,
       writes_merged,
       sectors_written,
       write_time_ms,
       ios_in_progress,
       io_time_ms,
       weighted_io_time_ms
INTO #before
FROM sys.dm_os_linux_disk_stats;

WAITFOR DELAY '00:00:10';

SELECT dev_name,
       reads_completed,
       reads_merged,
       sectors_read,
       read_time_ms,
       writes_completed,
       writes_merged,
       sectors_written,
       write_time_ms,
       ios_in_progress,
       io_time_ms,
       weighted_io_time_ms
INTO #after
FROM sys.dm_os_linux_disk_stats;

WITH deltas
AS (SELECT a.dev_name,
           a.reads_completed - b.reads_completed AS d_reads,
           a.read_time_ms - b.read_time_ms AS d_read_ms,
           a.sectors_read - b.sectors_read AS d_read_sectors,
           a.writes_completed - b.writes_completed AS d_writes,
           a.write_time_ms - b.write_time_ms AS d_write_ms,
           a.sectors_written - b.sectors_written AS d_write_sectors,
           a.io_time_ms - b.io_time_ms AS d_io_ms,
           a.weighted_io_time_ms - b.weighted_io_time_ms AS d_weighted_io_ms
    FROM #after AS a
         INNER JOIN #before AS b
             ON a.dev_name = b.dev_name)
SELECT dev_name,
       -- latency (ms/op)
       CAST (d_read_ms / NULLIF (d_reads, 0) AS DECIMAL (18, 2)) AS avg_read_latency_ms,
       CAST (d_write_ms / NULLIF (d_writes, 0) AS DECIMAL (18, 2)) AS avg_write_latency_ms,
       -- throughput (MB/s)
       CAST ((d_read_sectors * @SectorBytes) / (@SampleMs / 1000.0) / 1048576.0 AS DECIMAL (18, 2)) AS read_MBps,
       CAST ((d_write_sectors * @SectorBytes) / (@SampleMs / 1000.0) / 1048576.0 AS DECIMAL (18, 2)) AS write_MBps,
       -- utilization (%)
       CAST (d_io_ms / @SampleMs * 100.0 AS DECIMAL (5, 2)) AS device_utilization_pct,
       -- average queue length
       CAST (d_weighted_io_ms / @SampleMs AS DECIMAL (18, 2)) AS avg_queue_length
FROM deltas
ORDER BY device_utilization_pct DESC;

C. Identifikace zařízení s vysokým poměrem sloučení

Tento příklad identifikuje zařízení s vysokým poměrem sloučení, což označuje možné sloučení vstupně-výstupních operací.

SELECT dev_name,
       reads_completed,
       reads_merged,
       writes_completed,
       writes_merged,
       CAST (reads_merged / NULLIF (reads_completed, 0) AS DECIMAL (10, 2)) AS read_merge_ratio,
       CAST (writes_merged / NULLIF (writes_completed, 0) AS DECIMAL (10, 2)) AS write_merge_ratio
FROM sys.dm_os_linux_disk_stats
ORDER BY write_merge_ratio DESC, read_merge_ratio DESC;

D. Živé sledování hloubky fronty

Tento příklad ukazuje hloubku živé fronty, která je užitečná pro třídění incidentů.

SELECT TOP (20) dev_name,
                ios_in_progress,
                io_time_ms,
                weighted_io_time_ms
FROM sys.dm_os_linux_disk_stats
ORDER BY ios_in_progress DESC,
         weighted_io_time_ms DESC;