sys.dm_os_linux_disk_stats (Transact-SQL)

A következőkre vonatkozik: SQL Server 2025 (17.x) Linux rendszeren

Egy táblát ad vissza, amely minden Linux-eszköz lemez I/O-statisztikáit tartalmazza, amely az SQL Serveren túli teljes tevékenységet jeleníti meg az SQL Server 2025 (17.x) 1. és újabb verzióiban.

A DMV linuxos lemezeszközönként egy sort ad vissza.

Oszlop neve Adattípus Null értékű lehet Leírás
dev_name nvarchar(256) Nem Eszköz neve.
major_num bigint Nem Fő eszközszám.
minor_num bigint Nem Kisebb eszközszám.
reads_completed bigint Nem Befejezett olvasások száma.
reads_merged bigint Nem A szomszédos beolvasások száma egyetlen kérelembe egyesítve.
sectors_read bigint Nem Az olvasott szektorok száma.
read_time_ms bigint Nem Ezredmásodpercben a karbantartással töltött olvasások.
writes_completed bigint Nem Befejezett írások száma.
writes_merged bigint Nem A szomszédos írások száma egyetlen kérelembe egyesítve.
sectors_written bigint Nem Az írott szektorok száma.
write_time_ms bigint Nem Ezredmásodpercben töltötték az írások karbantartását.
ios_in_progress bigint Nem A kérelemsorokban jelenleg található I/O-k száma.
io_time_ms bigint Nem Ezredmásodperc alatt az eszköz I/O-t végez.
weighted_io_time_ms bigint Nem Az I/Os-sel töltött ezredmásodpercek súlyozott száma.

Permissions

A kiszolgálón VIEW SERVER PERFORMANCE STATE engedély szükséges.

Megjegyzések

  • Gazdagépszintű hatókör: Az eredmények az eszközön végzett összes tevékenységet tükrözik, beleértve az SQL Servert, az egyéb szolgáltatásokat és a háttérrendszer-műveleteket. Az adatbázis számítási feladatainak hatásainak attribútumához korrelálja ezeket az eredményeket az SQL Server várakozási statisztikáival, például WRITELOG és PAGEIOLATCH_*.

  • Időoszlopok értelmezése:

    Intézkedés Számítás
    Átlagos olvasási késés (ms/op) read_time_ms / NULLIF(reads_completed, 0)
    Átlagos írási késés (ms/op) write_time_ms / NULLIF(writes_completed, 0)
    Eszközkihasználtság (%) időközönként io_time_ms / (elapsed_ms) * 100
    Üzenetsor átlagos hossza weighted_io_time_ms / elapsed_ms
  • Szektoregységek: A Linux általában 512 bájtos egységekben jelenti a szektorokat. Ellenőrizze a környezet szektorméretét, és ennek megfelelően módosítsa a számításokat.

  • Körültekintően használható több-bérlős gazdagépeken: A magas értékek nem SQL Server-számítási feladatokból származhatnak. Korrelál a rendszereszközökkel vagy más DMV-kkel a hozzárendeléshez.

Használja ezt a DMV-t más Linux-specifikus DMV-kkel a holisztikus monitorozáshoz:

Használati forgatókönyvek

  • Log flush slowness (rendelkezésre állási csoportok vagy önálló): A magas write_time_ms / writes_completed emelt szintű io_time_ms érték eszközszintű írási késést jelez. Megerősítés várakozással WRITELOG .

  • Ellenőrzőpont vagy olvasási nehéz számítási feladatok: A folyamatos read_time_ms emelkedés / reads_completedread_MBps azt sugallja, hogy a késés korlátozza az átviteli sebességet. Fontolja meg a tárolási szint vagy az üzenetsor beállításait.

  • Zajos szomszédok a megosztott gazdagépeken: Az SQL Server számítási feladatainak megfelelő változásainak kiugrása device_utilization_pctavg_queue_length külső I/O-nyomást jelent. Érvényesítés gazdagépfigyeléssel.

Examples

A. Aktuális eszköztevékenység-pillanatkép

Ez a lekérdezés az aktuális tárolóeszköz tevékenység-pillanatképét adja vissza.

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. Késés és átviteli sebesség egy 10 másodperces mintaablakban

A szkript kétszer mintázta a DMV-t, és kiszámítja a késés (műveletenkénti ezredmásodperc), az átviteli sebesség (MB/másodperc), a kihasználtság (százalék) és az üzenetsor hosszának eltéréseit. Állítsa be @SectorBytes az eszköz konfigurációját.

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. Nagy egyesítési arányú eszközök azonosítása

Ez a példa a nagy egyesítési arányú eszközöket azonosítja, ami az I/O lehetséges szenesítését jelzi.

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. Üzenetsor mélységének élő megtekintése

Ez a példa az élő üzenetsor mélységét mutatja be, amely hasznos az incidensek osztályozásához.

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;