Aracılığıyla paylaş


sys.dm_os_linux_disk_stats (Transact-SQL)

Şunlar için geçerlidir: Linux üzerinde SQL Server 2025 (17.x)

SQL Server 2025 (17.x) Toplu Güncelleştirme (CU) 1 ve sonraki sürümlerde SQL Server dışındaki toplam etkinliği gösteren, her Linux cihazı için disk G/Ç istatistiklerine sahip bir tablo döndürür.

DMV, Linux disk cihazı başına bir satır döndürür.

Sütun adı Veri türü Null olabilir Description
dev_name nvarchar(256) Hayı Cihaz adı.
major_num bigint Hayı Ana cihaz numarası.
minor_num bigint Hayı Küçük cihaz numarası.
reads_completed bigint Hayı Tamamlanan okuma sayısı.
reads_merged bigint Hayı Tek bir istekte birleştirilen bitişik okuma sayısı.
sectors_read bigint Hayı Okunan kesim sayısı.
read_time_ms bigint Hayı Hizmet okumaları için harcanan milisaniyeler.
writes_completed bigint Hayı Tamamlanan yazma sayısı.
writes_merged bigint Hayı Tek bir istekte birleştirilen bitişik yazma sayısı.
sectors_written bigint Hayı Yazılan kesim sayısı.
write_time_ms bigint Hayı Hizmet yazma işlemleri için milisaniye harcandı.
ios_in_progress bigint Hayı şu anda istek kuyruklarında olan G/Ç sayısı.
io_time_ms bigint Hayı Cihazın G/Ç yaparak harcadığı milisaniye.
weighted_io_time_ms bigint Hayı G/Ç işlemleri için harcanan milisaniyenin ağırlıklı sayısı.

Permissions

VIEW SERVER PERFORMANCE STATE Sunucuda izin gerektirir.

Açıklamalar

  • Konak düzeyi kapsamı: Sonuçlar SQL Server, diğer hizmetler ve arka plan sistemi işlemleri dahil olmak üzere cihazdaki tüm etkinlikleri yansıtır. Veritabanı iş yükü etkilerini özniteliklendirmek için, bu sonuçları ve WRITELOGgibi PAGEIOLATCH_* SQL Server bekleme istatistikleriyle ilişkilendirin.

  • Zaman sütunlarını yorumlama:

    Ölçüm Hesaplama
    Ortalama okuma gecikmesi (ms/op) read_time_ms / NULLIF(reads_completed, 0)
    Ortalama yazma gecikme süresi (ms/op) write_time_ms / NULLIF(writes_completed, 0)
    Bir aralıkta cihaz kullanımı (%) io_time_ms / (elapsed_ms) * 100
    Ortalama kuyruk uzunluğu weighted_io_time_ms / elapsed_ms
  • Sektör birimleri: Linux genellikle 512 baytlık birimlerde sektörleri raporlar. Ortamınızın kesim boyutunu doğrulayın ve hesaplamaları buna göre ayarlayın.

  • Çok kiracılı konaklarda dikkatli kullanın: Yüksek değerler SQL Server olmayan iş yüklerinden kaynaklanabilir. İlişkilendirme için sistem araçları veya diğer DMV'lerle bağıntı.

Bütünsel izleme için bu DMV'yi Linux'a özgü diğer DMV'lerle kullanın:

Kullanım senaryoları

  • Günlük boşaltma yavaşlığı (kullanılabilirlik grupları veya tek başına): Yükseltilmiş write_time_ms yüksek / writes_completedio_time_ms, cihaz düzeyinde yazma gecikme süresini gösterir. Beklemelerle WRITELOG ilişkilendirin.

  • Denetim noktası veya okuma ağır iş yükleri: Sürekli read_time_ms olarak yükselmek / reads_completedread_MBps, gecikme süresine göre kısıtlanmış aktarım hızını önerir. Depolama katmanı veya kuyruk ayarlarını göz önünde bulundurun.

  • Paylaşılan konaklardaki gürültülü komşular: SQL Server iş yükü değişikliklerindeki device_utilization_pct ve avg_queue_length olmayan ani artışlar dış G/Ç baskısı anlamına gelir. Konak izleme ile doğrulayın.

Örnekler

A. Geçerli cihaz etkinliği anlık görüntüsü

Bu sorgu, geçerli depolama cihazı için bir etkinlik anlık görüntüsü döndürür.

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. 10 saniyelik bir örnek pencere üzerinde gecikme süresi ve aktarım hızı

Betik DMV'yi iki kez örnekler ve gecikme süresi (işlem başına milisaniye), aktarım hızı (saniye başına MB), kullanım (yüzde) ve kuyruk uzunluğu için deltaları hesaplar. Cihaz yapılandırmanızla eşleşecek şekilde ayarlayın @SectorBytes .

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. Yüksek birleştirme oranlarına sahip cihazları tanımlama

Bu örnek, yüksek birleştirme oranlarına sahip cihazları tanımlar ve olası G/Ç birleşimlerini gösterir.

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. Kuyruk derinliğini canlı izleyin

Bu örnek, olay önceliklendirmesi için yararlı olan canlı kuyruk derinliğini gösterir.

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;