Sayfa Okuma

Bir örneğinden ı/o SQL Server Database Engine mantıksal ve fiziksel okuma içerir. Mantıksal BIR okuma her saat oluşuyor Database Engine istekleri bir sayfa gelen Arabellek önbelleği.Sayfa şu anda arabelleğe önbellekte değilse, fiziksel bir ilk kopya sayfanın diskten önbelleğe okuyun.

Bir örnek tarafından oluşturulan bir okuma istekleri Database Engine ilişkisel altyapı tarafından denetlenir ve tarafından en iyi duruma getirilmiş depolama motoru. ilişkisel altyapı en etkili erişim yöntem (örneğin, bir tablo taraması, bir dizin taramayı veya Anahtarlanan okuma) belirler; erişim yöntemleri ve depolama motoru arabellek Yöneticisi bileşenleri gerçekleştirmek için okuma genel desenini belirlemek ve erişim yöntem uygulamak için gerekli okuma en iyi duruma getirme.Toplu iş yürütme iş parçacığı okuma zamanlar.

Ileriye oku

The Database Engine supports a performance optimization mechanism called read-ahead.Ileriye okuma, bir sorgu yürütme planı karşılamak için gerekli veri ve dizin sayfaları anticipates ve sayfaları, gerçekte sorgu tarafından kullanılmadan önce arabellek önbelleğine getirir.Bu hesaplama ve g/Ç örtüşmesi için , CPU hem de disk tam yararlanarak sağlar.

Önceden okuma düzenek sağlar Database Engine en çok 64 bitişik sayfalar (512 KB) bir dosyadan okumak için . Okuma, bir tek dağılım-okumak için uygun arabellek önbelleğinde (büyük olasılıkla bitişik olmayan) bir arabellek sayısını toparla olarak gerçekleştirilir.Herhangi bir aralığı sayfa s zaten ilgili arabellek önbelleğinde varsa sayfa okuma, okuma tamamladığında atılacak."Ilgili sayfaları önbelleğe zaten varsa, sayfa aralık da ya da sondan kesildikten".

Önceden okuma iki tür vardır: bir veri sayfası ve bir dizin sayfalar için.

Veri sayfaları okunuyor

Tarama sayfalardır, çok etkili veri okumak için kullanılan tablo Database Engine. ' De dizin ayırma eşlemesi (IAM) sayfaları bir SQL Server Veritabanı, bir dizin veya tablo tarafından kullanılan kapsamlarını listeler. depolama motoru okumak zorunda disk adresleri sıralı bir listesini oluşturmak için bu IAM okuyabilirsiniz.Bu diskteki konumlarına dayalı bir sıra için gerçekleştirilen büyük sıralı okuma olarak, g/Ç en iyi duruma getirmek depolama motoru sağlar.IAM sayfaları hakkında daha fazla bilgi için bkz: Nesneleri tarafından kullanılan alanı yönetme.

Dizin sayfası okunuyor

depolama motoru, dizin sayfaları seri olarak anahtar sırayla okur.Örneğin, bu örnekte, anahtarlar ve yaprak sayfaları eşleme ara dizin düğüm kümesi içeren bir yaprak sayfaları Basitleştirilmiş bir gösterimini gösterilmiştir.Sayfaları bir dizin yapısı hakkında daha fazla bilgi için bkz: Kümelenmiş dizin yapıları.

Intermediate index node maps to leaf pages by key

depolama motoru seri okuma aheads anahtarlar içeren sayfalar için zamanlama yaprak düzey üzerinde ara dizin sayfasındaki bilgileri kullanır.Bir istek için tüm anahtarlar için DEF ABC duruma getirildiyse, depolama motoru, ilk yaprak sayfanın üstünde dizin sayfa okur.Ancak, yalnızca her bir veri sayfa sıradaki 504 sayfadan sayfa 556 (anahtarları belirtilen aralıktaki son sayfadan) okumuyor.Bunun yerine, depolama motoru ara dizin sayfa tarar ve okumak zorunda yaprak sayfaları listesi oluşturur.depolama motoru, anahtar siparişteki tüm okuma sonra zamanlar.depolama motoru da 504/505 ve 527 sayfaları tanır/528 bitişik ve tek bir işlemle bitişik sayfalar almak için tek bir dağılım gerçekleştirir.Seri bir işlemde alınması için çok sayıda sayfa olduğunda, depolama motoru aynı anda okuma bloğunu zamanlar.alt küme küme küme kümesini bu okuma işlemi tamamlandığında, gerekli tüm okuma zamanlanmamış kadar depolama alt küme küme yapısını yeni bir okuma eşit sayıda zamanlar.

Kümelenmemiş dizin hızını temel tablo aramalar için prefetching depolama motoru kullanır.Kümelenmemiş bir dizin yaprak satırlarının her bir özel anahtar değerini içeren veri satırları işaretçiler içerir.Kümelenmemiş dizin yaprak sayfalar arasında depolama motoru okur gibi bu da zaman uyumsuz okuma, işaretçileri zaten alınan verilerin satırlar için iş planlama çizelgeleme başlatır.Bu, kümelenmemiş dizin taramayı tamamladı önce temel tablodan veri satırlarını almak depolama motoru sağlar.Tablo kümelenmiş dizin olup olmadığını dikkate almadan prefetching kullanılır.SQL Server Enterprise'nın diğer sürümleri'den daha fazla prefetching kullanır SQL Server, önceden okumak daha fazla sayfa izin verir. Herhangi bir sürümünde prefetching düzeyini yapılandırılamaz.Kümelenmemiş dizin hakkında daha fazla bilgi için bkz: Kümelenmemiş dizin yapıları.

Tarama Gelişmiş

Içinde SQL Server Gelişmiş Tarama bu özellik, kuruluş, tam bir tablo taramaları paylaşmak birden çok görevi sağlar. Yürütüldüğünü düşünüyorsanız, bir Transact-SQL deyim, tablo veri sayfalarında bir tarama gerektirir ve Database Engine Tablo zaten başka bir yürütme planı için taranan olduğunu algılar Database Engine için birinci, ikinci tarama katılırsa geçerli konumda ikinci tarama. The Database Engine reads each sayfa one saat and passes the rows from each sayfa to both execution plans. Bu, sonuna kadar devam eder tablo ulaşıldı.

Bu noktada tam bir tarama sonuçlarını ilk yürütme planı vardır, ancak ikinci yürütme planı yine de, devam eden tarama katıldı önce veri sayfaları okuma almanız gerekir.Ikinci yürütme planı için tarama, sonra yeniden ilk veri sayfa için sarar tablo ve ileri için burada, birleştirilen ilk tarama tarar.Herhangi bir sayıda taramaları aþaðýdaki birleştirilebilir.The Database Engine will keep looping through the data pages until it has completed all the scans.Bu mekanizma, "merry-go-round tarama" da denir ve bir deyim döndürülen sonuçlar sırasını ORDER BY yan tümce neden garanti edilemez gösterir.

Örneğin, 500.000 sayfaları içeren bir tablo olduğunu varsayalım.UserA yürüten bir Transact-SQL deyim Tablo taranmasını gerektiriyor. Bu tarama 100.000 sayfaları işlendiğinde UserB başka yürütür Transact-SQL aynı tarayan deyimi tablo. The Database Engine schedules one küme of read requests for pages after 100,001, and passes the rows from each sayfa back to both scans. Başka bir tarama 200,000th sayfasına ulaştığında, UserC yürütür Transact-SQL aynı tabloda tarar ekstresi. 200,001, Sayfa ile başlayan Database Engine onu geri tüm üç taramalarla okur her sayfası satırları geçirir. Bunu 500,000th satır okuduktan sonra UserA için tarama işlemi tamamlandıktan ve UserB ve UserC taramalarda geri sarma ve sayfa 1'ile başlayan sayfaları okumaya başlamak.Zaman Database Engine sayfa 100.000, tarama, UserB tamamlanır için alır. Sayfa 200,000 okur kadar sonra tarama UserC için tek başına gidip tutar.Bu noktada, tüm tarama tamamlanmıştır.

Gelişmiş Tarama olmadan, her kullanıcı için arabellek alanı rekabet ve disk kolu Çekişme neden gerekir.Aynı sayfa sonra her kullanıcı için Okuma saat yerine okunduktan ve performansı yavaşlatan ve kaynakları yükünü artırmasının tersine birden çok kullanıcı tarafından paylaşılan.