Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Yönetilen Örneği
SQL Server Veritabanı Altyapısı örneğinden gelen Giriş/Çıkış, mantıksal ve fiziksel okuma içerir. Veritabanı Altyapısı arabellek önbelleğinden bir sayfa istediğinde ( arabellek havuzu olarak da bilinir) mantıksal okuma gerçekleşir. Sayfa şu anda arabellek önbelleğinde değilse, fiziksel okuma ilk olarak sayfayı diskten önbelleğe kopyalar.
Veritabanı Altyapısı'nın bir örneği tarafından oluşturulan okuma istekleri ilişkisel altyapı tarafından denetlenip depolama altyapısı tarafından iyileştirilir. İlişkisel altyapı en etkili erişim yöntemini (tablo taraması, dizin taraması veya anahtarlı okuma gibi) belirler. Depolama altyapısının erişim yöntemleri ve arabellek yöneticisi bileşenleri, gerçekleştirilecek genel okuma desenini belirler ve erişim yöntemini uygulamak için gereken okumaları iyileştirir. Toplu işlem çalıştıran iş parçacığı okumaları planlar.
Önceden okuma
Veritabanı Altyapısı, read-ahead adlı bir performans iyileştirme mekanizmasını destekler. İleriye okuma, sorgu yürütme planını gerçekleştirmek için gereken veri ve dizin sayfalarını önceden tahmin eder ve sorgu tarafından kullanılmadan önce bu sayfaları arabellek önbelleğine getirir. Bu işlem, hesaplama ve G/Ç'nin çakışmasına olanak tanır ve hem CPU'nun hem de diskin tüm avantajlarından yararlanılır.
İleri okuma mekanizması, Veritabanı Altyapısı'nın bir dosyadan en fazla 64 bitişik sayfayı (512 KB) okumasını sağlar. Okuma, arabellek önbelleğindeki uygun sayıda (büyük olasılıkla bitişik olmayan) arabellek için tek bir dağılım toplama okuması olarak gerçekleştirilir. Aralıktaki sayfalardan herhangi biri arabellek önbelleğinde zaten varsa, okuma işlemi tamamlandığında okunan sayfa atılır. Karşılık gelen sayfalar önbellekte zaten mevcutsa, sayfa aralığı her iki uçtan da "kırpılmış" olabilir.
İki tür önceden okuma vardır: biri veri sayfaları ve biri dizin sayfaları için.
Veri sayfalarını okuma
Veritabanı Altyapısı tarafından veri sayfalarını okumak için kullanılan tablo taramaları verimlidir. SQL Server veritabanındaki dizin ayırma eşlemesi (IAM) sayfaları, bir tablo veya dizin tarafından kullanılan kapsamları listeler. Depolama altyapısı, okunması gereken disk adreslerinin sıralı bir listesini oluşturmak için IAM'yi okuyabilir. Bu, depolama altyapısının G/Ç'lerini diskteki konumlarına göre sıralı olarak gerçekleştirilen büyük sıralı okumalar olarak iyileştirmesine olanak tanır. IAM sayfaları hakkında daha fazla bilgi için bkz. Nesneler tarafından kullanılan alanı yönetme.
Dizin sayfalarını okuma
Depolama altyapısı dizin sayfalarını seri olarak anahtar sırasına göre okur. Örneğin, bu çizimde bir dizi anahtar içeren yaprak sayfalar kümesinin basitleştirilmiş bir gösterimi ve yaprak sayfaları eşleyen ara dizin düğümü gösterilir. Dizindeki sayfaların yapısı hakkında daha fazla bilgi için bkz. Kümelenmiş ve kümelenmemiş dizinler.
Depolama altyapısı, anahtarları içeren sayfalar için seri ileri okuma zamanlamak için yaprak düzeyinin üzerindeki ara dizin sayfasındaki bilgileri kullanır.
ABC'den DEF'ye kadar olan tüm anahtarlar için bir istek yapılırsa, depolama motoru önce yaprak sayfanın üzerindeki dizin sayfasını okur. Ancak, her veri sayfasını 504. sayfadan 556. sayfaya (belirtilen aralıktaki anahtarlara sahip son sayfa) sırayla okumaz. Bunun yerine, depolama altyapısı ara dizin sayfasını tarar ve okunması gereken yaprak sayfaların listesini oluşturur. Ardından depolama motoru tüm okumaları anahtar sırasına göre zamanlar. Depolama altyapısı ayrıca 504/505 ve 527/528 sayfalarının bitişik olduğunu tanır ve tek bir işlemde bitişik sayfaları almak için tek bir dağılım okuması gerçekleştirir. Bir seri işlemde alınacak çok sayıda sayfa olduğunda, depolama altyapısı bir kerede bir okuma bloğu zamanlar. Bir alt küme tamamlandığında, depolama motoru gerekli tüm okumalar zamanlanana kadar eşit sayıda yeni okuma zamanlarken yeni okuma gerçekleştirir.
Depolama altyapısı, kümelenmemiş dizinlerden temel tablo aramalarını hızlandırmak için önceden hazırlamayı kullanır. Bir kümelenmemiş dizinin yaprak satırları, belirli anahtar değerlerini içeren veri satırlarına yönelik işaretçiler içerir. Depolama motoru, kümelenmemiş dizinin yaprak sayfalarını okuma işlemlerini başlattığında, işaretçileri zaten alınmış olan veri satırları için de zaman uyumsuz okuma işlemlerini zamanlamaya başlar. Bu, depolama altyapısının, kümelenmemiş dizinin taranmasını tamamlamadan önce temel tablodaki veri satırlarını almasını sağlar. Prefetching, tablonun kümelenmiş bir dizini olup olmamasına bakılmaksızın kullanılır. SQL Server Enterprise sürümü, SQL Server'ın diğer sürümlerinden daha fazla ön işlem kullanır ve daha fazla sayfanın önceden okunmasına olanak sağlar. Prefetching düzeyi herhangi bir sürümde yapılandırılamaz. Kümelenmemiş dizinler hakkında daha fazla bilgi için bkz. Kümelenmiş ve kümelenmemiş dizinler.
Gelişmiş tarama
SQL Server Enterprise sürümünde gelişmiş tarama özelliği, birden çok görevi tam tablo taramalarını paylaşmaya olanak tanır. Transact-SQL deyiminin yürütme planı bir tablodaki veri sayfalarının taranmasını gerektiriyorsa ve Veritabanı Altyapısı tablonun başka bir yürütme planı için zaten tarandığını algılarsa, Veritabanı Altyapısı ikinci taramayı ikinci taramanın geçerli konumunda birinciye birleştirir. Veritabanı Altyapısı her sayfayı bir kez okur ve her sayfadan satırları her iki yürütme planına geçirir. Bu, tablonun sonuna ulaşılana kadar devam eder.
Bu noktada, ilk yürütme planı taramanın tüm sonuçlarına ulaşmıştır. Ancak, ikinci yürütme planının devam eden taramaya katılmadan önce okunan veri sayfalarını almaya devam etmesi gerekir. İkinci yürütme planı için tarama daha sonra tablonun ilk veri sayfasına geri kaydırılır ve ilk taramaya katıldığı yere doğru tarar. Herhangi bir sayıda tarama bu şekilde birleştirilebilir. Veritabanı Altyapısı, tüm taramaları tamamlayana kadar veri sayfalarında döngüye devam eder. Bu mekanizma, "merry-go-round tarama" olarak da adlandırılır ve SELECT deyiminden döndürülen sonuçların sırasının, ORDER BY yan tümcesi olmadan neden garanti edilemeyeceğini gösterir.
Örneğin, 500.000 sayfalı bir tablonuz olduğunu varsayalım.
UserA tabloda tarama gerektiren bir Transact-SQL deyimi yürütür. Bu tarama 100.000 sayfayı işlediğinde, UserB aynı tabloyu tarayan başka bir Transact-SQL deyimini yürütür. Veritabanı Altyapısı, 100.001. sayfadan sonraki sayfalar için tek bir okuma isteği kümesi planlar ve her sayfadaki satırları her iki tarama işlemine geri iletir. Tarama 200.000. sayfaya ulaştığında, UserC aynı tabloyu tarayan başka bir Transact-SQL deyimi yürütür. Sayfa 200,001'den itibaren, Veritabanı Motoru okuduğu her sayfadan satırları üç taramaya da iletir. 500.000. satırı okuduktan sonra için tarama UserA tamamlanır ve taramalar UserB yapılır ve UserC geri kaydırılır ve sayfa 1'den başlayarak sayfaları okumaya başlar. Veritabanı Motoru sayfa 100.000'e ulaştığında, UserB taraması tamamlanır. Ardından tarama UserC 200.000. sayfayı okuyana kadar tek başına çalışmaya devam eder. Bu noktada tüm taramalar tamamlanmıştır.
Gelişmiş tarama olmadan, her kullanıcı arabellek alanı için rekabet etmek ve disk kolu çekişmesine neden olmak zorunda kalır. Aynı sayfalar birden fazla kullanıcı tarafından paylaşılmak yerine her kullanıcı için ayrı ayrı okunur ve bu durum performansı yavaşlatır ve kaynakları zorlar.