SQL Server sorguları neden 7MB / sn'den fazla disk G / Ç kullanmıyor


11

IOmeter testi kullanarak 200 MB / sn üzerinde performans gösteren bir SSD'm var. Ancak yerel makineden herhangi bir SQL sorgusu çalıştırdığımda, windows kaynak monitörü disk IO'yu 7MB / sn'nin üzerinde göstermez. Bu, çalıştırılması 2 dakikadan fazla süren sorgular için bile geçerlidir. Darboğaz SSD'den sadece 7MB / sn kullanıyor olabilir mi?

Koşuyorum:

  • Windows Server 2012 Standardı
  • SQL Server 2008 R2
  • Intel i7 3820
  • 32GB ram
  • sandisk SSD

2
belki de veriler zaten RAM'dedir ve disk erişimine gerek yoktur?
gbn

1
@DeanMacGregor - Sonuçları nasıl tüketiyorsunuz? SSMS'de ise, sonuçları atma seçeneğini denerseniz. Bu bir şeyi değiştirir mi? Ayrıca sys.dm_os_waiting_tasks, sorgu çalışırken karşılaştığınız diğer bekleme türleri olup olmadığını görmek için bakmayı deneyebilirsiniz .
Martin Smith

1
200 MB / sn rasgele erişim okumaları için mi (4 KB bloklar için rasgele okumalar)? Sanırım bu genellikle bir veritabanının yapacağı şeydir. Sorgu diske yazıyor mu (geçici dosya, geçici sonuç kümesi veya tablo)?

2
@DeanMacGregor - Denklemden çıkarmak için sonucu skaler değişkenlere atayabilirsiniz (örnek sorgu). DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values. Dolayısıyla, müşteriye hiçbir sonuç gönderilmez, ancak plan ve ES hala aynı olacaktır.
Martin Smith

4
ASYNC_NETWORK_IO yorumunu beklediğinizi varsayalım, sorunun ağla ilgili olduğu anlamına mı geliyor? (Tipik olarak) değildir. @MartinSmith'in SSMS veya kullandığınız uygulamanın sonuçları SQL'in sunduğu kadar hızlı tüketmediğini (iki kez) önerdiği gibi. Satırların tüketimini atlamanın önerilen yollarından birini izleyin ve maksimum G / Ç veriminin gerçek (r) bir resmini elde edin.
Mark Storey-Smith

Yanıtlar:


7

Yorumlar zincirinden, ASYNC_NETWORK_IOsorunun ağ ile ilgili olduğu anlamına gelen beklemeleri yorumladığınız anlaşılıyor. (Tipik olarak) değildir.

@MartinSmith'in (iki kez) ima ettiği gibi, bunun en olası açıklaması SSMS veya kullandığınız uygulama, sonuçları SQL Server'ın sunduğu kadar hızlı tüketmemesidir. Ölçümlerden satırların tüketimini kaldırmak için önerilen yöntemlerden birini izleyin; maksimum G / Ç veriminin gerçek (r) bir resmini elde edersiniz:

Henüz yapmadıysanız, DBCC DROPCLEANBUFFERSverilerin tampon önbellek yerine diskten okunduğundan emin olmanız gerekir . "Sadece testte, bunu aktif bir canlı ortamda yapmayın" vb.

Diğer yorumlarınızdan birkaçı:

9 milyon satır döndüren bir sorgu yürütülürken CPU kullanımı,% 9 sqlserver'a atfedilebilir% 13 civarında kalacaktır ... tüm veriler RAM'de olsaydı sonuçları 3 dakikadan daha hızlı döndürmez mi?

Burada tam olarak neyi test ediyoruz, nasıl ve neden? 9 milyon satırlık sorgunuz bir şeyden başka SELECT * FROM dbo.SomeTablebir şeyse, sadece ham G / Ç işleminden başka 1001 faktör vardır.

İşletme Intel I7-3820 4-çekirdekli işlemcisidir. Test sorgunuz paralel bir plan oluşturmazsa, sistemden% 20'den fazla CPU kullanımını düşürürseniz şaşırırdım.

9 milyon satır döndürmek için geçen 3 dakika çok şüpheli ve testinizin tam bir resmini elde edemediğimizi gösteriyor. Benim tahminim bu, SELECTIO tüketimini doğrulamak için sadece tek bir tablo değil, milyonlarca satır çeken iç içe döngü operatörleriyle dolu bir alt optimal (paralel olmayan) sorgu planı örneğidir .

Öneririm:

  1. SELECT *SQL Server üzerinden sadece IO test etmek .
  2. Neden G / Ç'yi doyurmadığını araştırmak istiyorsanız, sorgunuzun yürütme planıyla ilgili yeni bir soru.

Aslında sadece dbo.sometable'dan * seçin. Üzgünüm bundan daha önce bahsetmedim; ne demek istediğim herhangi bir tablodan bu sorguyu çalıştırmak olabilir. Sorumun doğuşu, disk IO'mun basit "bana çok fazla veri ver" sorgusundan bile beklediğimden daha az olduğunu fark etmemdi. Temel kaygım, disk IO'su çok düşükse, düşük disk IO'sunun kök nedeninin kök salması durumunda performansın iyileştirilebileceğiydi.
Dean MacGregor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.