Dizin için dolgu faktörü belirtme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, doldurma faktörünün ne olduğu ve SQL Server Management Studio veya Transact-SQL kullanılarak bir dizin için doldurma faktörü değerinin nasıl belirtileceğini açıklanmaktadır.

Dizin veri depolama ve performansında ince ayar yapmak için doldurma faktörü seçeneği sağlanır. Dizin oluşturulduğunda veya yeniden oluşturulduğunda, doldurma faktörü değeri her yaprak düzeyindeki sayfanın verilerle doldurulacak alan yüzdesini belirler ve kalan kısmı her sayfada gelecekteki büyüme için boş alan olarak ayırır. Örneğin, 80 dolgu faktörü değerinin belirtilmesi, yaprak düzeyindeki her sayfanın yüzde 20'sinin boş bırakılacağı ve veri büyümesi için alan sağlanacağı anlamına gelir. Dizinin sonunda değil, dizinin her sayfasında boş yer ayrılmıştır.

Doldurma faktörü değeri 1 ile 100 arasında bir yüzdedir ve sunucu genelinde varsayılan değer 0'dır; bu da yaprak düzeyi sayfaların kapasiteye doldurulduğu anlamına gelir.

Note

0 ve 100 dolgu faktörü değerleri her açıdan aynıdır.

PerformansLa İlgili Dikkat Edilmesi Gerekenler

Sayfa bölünmeleri

Tam dizin sayfasına yeni bir satır eklendiğinde, Veritabanı Altyapısı yeni satıra yer açmak için satırların yaklaşık yarısını yeni bir sayfaya taşır. Bu yeniden düzenleme, sayfa bölme olarak bilinir. Sayfa bölme yeni satırlar için yer açar, ancak dizinin ortasında oluşursa gerçekleştirmesi zaman alabilir ve yoğun kaynak gerektiren bir işlemdir. Ayrıca, büyük dizin taramaları sırasında sayfa okuma etkinliğini azaltan parçalanmaya neden olabilir.

İyi seçilmiş bir doldurma faktörü değeri, veriler dizinin ortasına eklendiğinde dizin genişletmesi için yeterli alan sağlayarak sayfa bölmelerini azaltabilir. Sayfa bölmeleri performansı etkiliyorsa dizin, yüzde 70-95 aralığındaki yeni veya mevcut bir doldurma faktörü değeri kullanılarak yeniden oluşturulabilir. Ancak doldurma faktörünü gereksiz yere azaltmayın veya çok düşük bir değere ayarlamayın. Daha fazla bilgi için bkz. Sorgu performansını geliştirmek ve kaynak tüketimini azaltmak için dizin bakımını iyileştirme.

Çoğu iş yükü, varsayılan doldurma faktörüyle (yüzde 100) en iyi performansı gösterir. Azalmış bir doldurma faktörüyle dizin daha fazla depolama alanı, bellek ve disk G/Ç gerektirir ve bu da performansı düşürebilir. Yazma yoğunluklu bir iş yükü için bile veritabanı okuma sayısı genellikle beş ile on arasında bir faktörle veritabanı yazma sayısını aşıyor. Bu nedenle, varsayılan değer dışında bir doldurma faktörü belirtmek, kaynak kullanımını doldurma faktörü ayarıyla ters orantılı bir miktar artırabilir.

Örneğin, 50'lik bir doldurma faktörü değeri, aynı miktarda veriyi okumak ve önbelleğe almak için gereken disk G/Ç'sini ve belleği ikiye katlar.

Tablonun sonuna eklenen veriler

Daha düşük bir doldurma faktörü sayfa bölmelerini azaltabilir ve yeni veriler dizin genelinde eşit bir şekilde dağıtılırsa performansı artırabilir. Ancak, dizinin sonuna yeni veriler eklenirse, dizin sayfalarındaki boş alan doldurulmayabilir. Örneğin, dizin anahtarı sütunu bir IDENTITY sütunsa, yeni satırların anahtarı her zaman artar ve dizin satırları mantıksal olarak dizinin sonuna eklenir.

Permissions

ALTER Tablo veya görünümde izin gerektirir. Kullanıcının sysadmin sabit sunucu rolünün veya db_ddladmin ve db_owner sabit veritabanı rollerinin üyesi olması gerekir.

SQL Server Management Studio'yu kullanma

Tablo Tasarımcısı'nı kullanarak doldurma faktörü belirtmek için

  1. Nesne Gezgini'nde artı işaretine tıklayarak dizinin dolgu faktörünü belirtmek istediğiniz tabloyu içeren veritabanını genişletin.

  2. artı işaretine tıklayarak Tablolar klasörünü genişletin.

  3. Dizinin dolgu faktörünü belirtmek istediğiniz tabloya sağ tıklayın ve Tasarım'ı seçin.

  4. Tablo Tasarımcısı menüsünde dizinler/anahtarlaröğesine tıklayın.

  5. Belirtmek istediğiniz dolgu faktörüne sahip dizini seçin.

  6. Dolgu Belirtimi'ni genişletin, Dolgu Faktörü satırını seçin ve satıra istediğiniz dolgu faktörünü girin.

  7. Kapat'a tıklayın.

  8. Dosya menüsünde, Seçintable_namekaydet.

Nesne Gezgini'yi kullanarak bir dizinde doldurma faktörü belirtmek için

  1. Nesne Gezgini'nde artı işaretine tıklayarak dizinin dolgu faktörünü belirtmek istediğiniz tabloyu içeren veritabanını genişletin.

  2. artı işaretine tıklayarak Tablolar klasörünü genişletin.

  3. Bir dizinin dolgu faktörünü belirtmek istediğiniz tabloyu genişletmek için artı işaretine tıklayın.

  4. artı işaretine tıklayarak Dizinler klasörünü genişletin.

  5. Belirtmek istediğiniz dolgu faktörüne sahip dizine sağ tıklayın ve Özellikler'i seçin.

  6. Sayfa seç'in altında Seçenekler'i seçin.

  7. Dolgu faktörü satırına istediğiniz dolgu faktörünü girin.

  8. Tamam'a tıklayın.

Transact-SQL Kullanımı

Var olan bir dizinde dolgu faktörü belirtmek için

  1. Nesne Gezgini'nde Veritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart çubuğunda Yeni Sorgubutonuna tıklayın.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Örnek varolan bir dizini yeniden oluşturur ve yeniden oluşturma işlemi sırasında belirtilen doldurma faktörünü uygular.

    USE AdventureWorks2022;  
    GO  
    -- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index   
    -- with a fill factor of 80 on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD WITH (FILLFACTOR = 80);   
    GO  
    

Dizinde doldurma faktörü belirtmenin başka bir yolu

  1. Nesne Gezgini'nde Veritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart çubuğunda Yeni Sorgubutonuna tıklayın.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın.

    USE AdventureWorks2022;  
    GO  
    -- Drops and re-creates the IX_Employee_OrganizationLevel_OrganizationNode index
    -- on the HumanResources.Employee table with a fill factor of 80.   
    
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)   
    WITH (DROP_EXISTING = ON, FILLFACTOR = 80);   
    GO  
    

Daha fazla bilgi için bkz ALTER INDEX . (Transact-SQL).