read-ahead reads nedir

SQL Read-ahead reads nedir? #QueryOptimization

Database engine’in desteklediği optimizasyon araçlarından biri olan read-ahead reads, önden okuma olarak tanımlanmaktadır. Bir sorguyu çalıştırmak için gereken veri ve dizin sayfalarını tahmin eder ve sayfaları sorgu tarafından kullanılmadan önce buffer cache’e getirir. SQL Server fiziksel okumalar sırasında 8KB’lik page’ler yada extend page’ler okur ancak diskten daha fazla data okumak gerektiği sırada read-ahead reads devreye girerek bu yükü sırtlar.

Demo

Fazla page okuyacak bir sorgu yazıyorum, read-ahead reads ve diğer istatistik verilerini görebilmek için STATISTICS IO ON konumuna getiriyorum.

Ara adım : Buffer cache temizlemek için kullandığımız DBCC komutunu çalıştırıyorum bu sayede read-ahead reads‘ın devreye girmesini umuyorum.
Not : Canlı ortamlarda çalıştırılması, şirket çalışanlarının umarsızca “veritabanı yavaşladı” diyerek sağa sola koşuşturmasına sebep olabilir.

DBCC DROPCLEANBUFFERS

İstatistik çıktımız aşağıdaki gibi;

Table 'Posts'. Scan count 1, logical reads 12042, physical reads 1, page server reads 0, read-ahead reads 12048, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.

Eğer buffer cache temizlemeden tekrar çalıştırırsak bu mekanizmanın devreye girmediğini görebiliriz.

Table 'Posts'. Scan count 1, logical reads 12042, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.