Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2025 (17.x) di Linux
Mengembalikan tabel dengan statistik I/O disk untuk setiap perangkat Linux, memperlihatkan total aktivitas di luar SQL Server, di SQL Server 2025 (17.x) Pembaruan Kumulatif (CU) 1 dan versi yang lebih baru.
DMV mengembalikan satu baris per perangkat disk Linux.
| Nama kolom | Jenis data | Bisa bernilai null | Description |
|---|---|---|---|
dev_name |
nvarchar(256) | Tidak. | Nama perangkat. |
major_num |
bigint | Tidak. | Nomor perangkat utama. |
minor_num |
bigint | Tidak. | Nomor perangkat minor. |
reads_completed |
bigint | Tidak. | Jumlah bacaan selesai. |
reads_merged |
bigint | Tidak. | Jumlah bacaan yang berdekatan digabungkan ke dalam satu permintaan. |
sectors_read |
bigint | Tidak. | Jumlah sektor yang dibaca. |
read_time_ms |
bigint | Tidak. | Milidetik menghabiskan layanan bacaan. |
writes_completed |
bigint | Tidak. | Jumlah penulisan yang diselesaikan. |
writes_merged |
bigint | Tidak. | Jumlah penulisan yang berdekatan yang digabungkan ke dalam satu permintaan. |
sectors_written |
bigint | Tidak. | Jumlah sektor yang ditulis. |
write_time_ms |
bigint | Tidak. | Milidetik dihabiskan untuk melayani penulisan. |
ios_in_progress |
bigint | Tidak. | Jumlah IO yang saat ini dalam antrean permintaan. |
io_time_ms |
bigint | Tidak. | Milidetik yang dihabiskan perangkat untuk melakukan I/O. |
weighted_io_time_ms |
bigint | Tidak. | Jumlah milidetik tertimbang yang dihabiskan untuk melakukan I/Os. |
Permissions
VIEW SERVER PERFORMANCE STATE Memerlukan izin pada server.
Komentar
Cakupan tingkat host: Hasilnya mencerminkan semua aktivitas pada perangkat, termasuk SQL Server, layanan lain, dan operasi sistem latar belakang. Untuk mengaitkan efek beban kerja database, kaitkan hasil ini dengan statistik tunggu SQL Server, seperti
WRITELOGdanPAGEIOLATCH_*.Menginterpretasikan kolom waktu:
Ukur Kalkulasi Latensi baca rata-rata (ms/op) read_time_ms / NULLIF(reads_completed, 0)Latensi tulis rata-rata (ms/op) write_time_ms / NULLIF(writes_completed, 0)Pemanfaatan perangkat (%) selama interval io_time_ms / (elapsed_ms) * 100Panjang antrean rata-rata weighted_io_time_ms / elapsed_msUnit sektor: Linux biasanya melaporkan sektor dalam unit 512 byte. Validasi ukuran sektor lingkungan Anda dan sesuaikan perhitungan yang sesuai.
Gunakan dengan hati-hati di host multipenyewa: Nilai tinggi dapat berasal dari beban kerja non-SQL Server. Berkorelasi dengan alat sistem atau DMV lain untuk atribusi.
Gunakan DMV ini dengan DMV khusus Linux lainnya untuk pemantauan holistik:
Skenario penggunaan
Kelambatan flush log (grup ketersediaan atau mandiri): Tinggi
write_time_ms/writes_completeddengan peningkatanio_time_msmenunjukkan latensi tulis tingkat perangkat. Menguatkan denganWRITELOGmenunggu.Titik pemeriksaan atau baca beban kerja berat: Naik
read_time_ms/reads_completeddengan throughput berkelanjutanread_MBpsyang dibatasi oleh latensi. Pertimbangkan pengaturan tingkat penyimpanan atau antrean.Tetangga yang berisik pada host bersama: Lonjakan dan
device_utilization_pctavg_queue_lengthtanpa perubahan beban kerja SQL Server yang sesuai menyiratkan tekanan I/O eksternal. Validasi dengan pemantauan host.
Examples
A. Rekam jepret aktivitas perangkat saat ini
Kueri ini mengembalikan rekam jepret aktivitas untuk perangkat penyimpanan saat ini.
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. Latensi dan throughput melalui jendela sampel 10 detik
Skrip mengambil sampel DMV dua kali dan menghitung delta untuk latensi (milidetik per operasi), throughput (MB per detik), pemanfaatan (persentase), dan panjang antrean. Sesuaikan agar sesuai dengan @SectorBytes konfigurasi perangkat Anda.
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. Mengidentifikasi perangkat dengan rasio penggabungan tinggi
Contoh ini mengidentifikasi perangkat dengan rasio penggabungan tinggi, menunjukkan kemungkinan coalescing I/O.
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. Tonton kedalaman antrean langsung
Contoh ini menunjukkan kedalaman antrean langsung, yang berguna untuk triase insiden.
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;