Saya memiliki SSD yang, menggunakan tes IOmeter, menunjukkan kinerja lebih dari 200MB / s. Namun ketika saya menjalankan kueri SQL apa pun dari mesin lokal, monitor sumber daya windows tidak pernah menampilkan disk IO di atas 7MB / detik. Ini berlaku bahkan untuk kueri yang membutuhkan waktu lebih dari 2 menit untuk dijalankan. Apa yang bisa menjadi hambatannya yaitu hanya menggunakan 7MB / detik dari SSD?
Saya sedang berlari:
- Windows Server 2012 Standard
- SQL server 2008 r2
- Intel i7 3820
- 32GB ram
- SSD sandisk
sql-server
sql-server-2008-r2
hardware
Dean MacGregor
sumber
sumber
sys.dm_os_waiting_tasks
sementara kueri berjalan untuk melihat apakah ada jenis menunggu lain yang dihadapi.DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values
. Jadi tidak ada hasil yang dikirim kembali ke klien tetapi rencana dan IO masih akan sama.Jawaban:
Dari rantai komentar, sepertinya Anda mengartikan
ASYNC_NETWORK_IO
menunggu untuk berarti bahwa masalahnya terkait dengan jaringan. (Biasanya) tidak.Seperti @MartinSmith mengisyaratkan (dua kali) penjelasan yang paling mungkin untuk itu adalah SSMS atau aplikasi yang Anda gunakan tidak mengkonsumsi hasil secepat SQL Server melayani mereka. Ikuti salah satu metode yang disarankan untuk menghapus konsumsi baris dari pengukuran Anda dan Anda akan mendapatkan gambar (r) sebenarnya dari throughput IO maksimum:
Jika Anda belum melakukannya, Anda harus
DBCC DROPCLEANBUFFERS
memastikan bahwa data benar-benar dibaca dari disk daripada buffer cache. Peringatan biasa "saat tes saja, jangan lakukan ini di lingkungan aktif yang aktif" dll berlaku.Menghormati beberapa komentar Anda yang lain:
Apa sebenarnya yang kami uji di sini, bagaimana dan mengapa? Jika permintaan 9 juta baris Anda adalah selain dari
SELECT * FROM dbo.SomeTable
maka ada 1001 faktor yang ikut dimainkan, selain hanya throughput IO mentah.Anda Intel i7-3820 adalah prosesor 4-core. Jika kueri pengujian Anda tidak menghasilkan rencana paralel, saya akan terkejut jika Anda dapat menggunakan lebih dari 20% pemanfaatan CPU dari sistem.
3 menit untuk mengembalikan 9 juta baris sangat mencurigakan dan menyarankan kami tidak mendapatkan gambaran lengkap tentang pengujian Anda. Dugaan saya adalah ini adalah kasus rencana kueri sub-optimal (non-paralel), diisi penuh dengan loop operator menarik jutaan baris yaitu bukan hanya satu tabel
SELECT
untuk memverifikasi konsumsi IO.Saya menyarankan:
SELECT *
untuk menguji hanya IO melalui SQL Server.sumber