Aracılığıyla paylaş


Dizinler için SORT_IN_TEMPDB Seçeneği

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

Dizini oluştururken veya yeniden oluştururken, SORT_IN_TEMPDB seçeneğini ON olarak ayarlayarak SQL Server Veritabanı Altyapısı'nı tempdb kullanarak dizini oluşturmak için kullanılan ara sıralama sonuçlarını depolamaya yönlendirebilirsiniz. Bu seçenek dizin oluşturmak için kullanılan geçici disk alanı miktarını artırsa da, tempdb kullanıcı veritabanından farklı bir disk kümesinde olduğunda dizin oluşturmak veya yeniden oluşturmak için gereken süreyi kısaltabilir. tempdb hakkında daha fazla bilgi için bkz. Dizin oluşturma belleği Sunucu Yapılandırma Seçeneğini yapılandırma.

Dizin Oluşturma Aşamaları

Veritabanı Altyapısı bir dizin oluştururken aşağıdaki aşamalardan geçer:

  • Veritabanı Altyapısı, temel tablonun veri sayfalarını tarayarak anahtar değerlerini alır ve her veri satırı için bir dizin yaprak satırı oluşturur. İç sıralama arabellekleri yaprak dizin girdileriyle doldurulduğunda, girdiler sıralanır ve ara sıralama çalıştırması olarak diske yazılır. Ardından Veritabanı Altyapısı, sıralama arabellekleri yeniden doldurulana kadar veri sayfası taramasını sürdürür. Birden çok veri sayfasını tarama, ardından sıralama ve yazma işlemi, temel tablonun tüm satırları işlenene kadar devam eder.

    Kümelenmiş dizinde, dizinin yaprak satırları tablonun veri satırlarıdır; bu nedenle, ara sıralama çalıştırmaları tüm veri satırlarını içerir. Kümelenmemiş bir dizinde yaprak satırlar anahtar olmayan sütunlar içerebilir, ancak genellikle kümelenmiş dizinden daha küçüktür. Dizin anahtarları büyükse veya dizinde birkaç anahtar dışı sütun yer alıyorsa, kümelenmemiş sıralama işlemi büyük olabilir. Anahtar olmayan sütunları ekleme hakkında daha fazla bilgi için bkz. Eklenen Sütunlarla Dizin Oluşturma.

  • Veritabanı Motoru, dizin yaprak satırlarının sıralanmış dizilimlerini tek bir sıralanmış akışta birleştirir. Veritabanı Altyapısı'nın sıralama birleştirme bileşeni, her sıralama çalıştırmasının ilk sayfasıyla başlar, tüm sayfalardaki en düşük anahtarı bulur ve bu yaprak satırı dizin oluşturma bileşenine geçirir. Sonraki en düşük anahtar işlenir ve ardından sonraki işlenir ve bu şekilde devam eder. Son yaprak dizin satırı bir sıralama çalıştırması sayfasından ayıklandığında, işlem bu sıralama çalıştırmasından sonraki sayfaya geçer. Bir sıralama çalıştırması kapsamındaki tüm sayfalar işlendiğinde, kapsam serbest bırakılır. Her bir yaprak dizin satırı dizin oluşturma bileşenine geçtiğinde, arabellekteki bir yaprak dizin sayfasına dahil edilir. Her yaprak sayfa dolduruldukçe yazılır. Yaprak sayfalar yazıldıkça Veritabanı Motoru da dizinin üst düzeylerini oluşturur. Her üst düzey dizin sayfası doldurulduğunda yazılır.

SORT_IN_TEMPDB Seçeneği

SORT_IN_TEMPDB KAPALI olarak ayarlandığında, sıralama çalıştırmaları varsayılan olarak hedef dosya grubunda depolanır. Dizini oluşturmanın ilk aşamasında, temel tablo sayfalarının değişen okumaları ve sıralama işlemlerinin yazma işlemleri diskin bir bölümünden başka bir bölümüne disk okuma/yazma kafalarını taşır. Veri sayfaları tarandıkça kafalar veri sayfası alanındadır. Sıralama arabellekleri doldurulduğunda ve geçerli sıralama çalıştırmasının diske yazılması gerektiğinde boş alan alanına taşınırlar ve tablo sayfası taraması devam ederken veri sayfası alanına geri dönerler. Okuma/yazma kafa hareketi ikinci aşamada daha büyüktür. Bu sırada sıralama işlemi genellikle her sıralama çalıştırma alanından değişen okuma işlemleridir. Hem sıralama hem de yeni dizin sayfaları hedef dosya grubunda oluşturulur. Bu, Veritabanı Motoru'nun okumaları sıralama işlemlerine yayarken, aynı zamanda yeni dizin sayfaları doldukça yazmak için periyodik olarak dizin uzantılarına atlaması gerektiği anlamına gelir.

SORT_IN_TEMPDB seçeneği AÇILDI olarak ayarlanırsa ve tempdb hedef dosya grubundan ayrı bir disk kümesindeyse, ilk aşamada veri sayfalarının okumaları tempdb'deki sıralama çalışma alanına yazma işlemlerinden farklı bir diskte gerçekleşir. Bu, veri anahtarlarının disk okumalarının genellikle disk genelinde daha seri bir şekilde devam etmesi ve tempdb diskine yazma işlemleri de genellikle seri olduğu anlamına gelir ve son dizini derlemeye yönelik yazma işlemleri de aynı şekilde seridir. Diğer kullanıcılar veritabanını kullanıyor ve ayrı disk adreslerine erişiyor olsalar bile, SORT_IN_TEMPDB belirtildiğinde okuma ve yazma işleminin genel deseni, belirtilmediğinden daha verimlidir.

özellikle CREATE INDEX işlemi paralel olarak işlenmiyorsa, SORT_IN_TEMPDB seçeneği dizin uzantılarının bitişikliğini iyileştirebilir. Sıralama çalışma alanı kapsamları, veritabanındaki konumlarıyla ilgili olarak rastgele bir şekilde serbesttir. Sıralama çalışma alanları hedef dosya grubunda yer alırsa, sıralama çalışma kapsamları serbest bırakıldığından, dizin yapısının oluşturulduğu şekilde tutulmasına yönelik uzantılar için istekler tarafından edinilebilirler. Bu, dizin uzantılarının konumlarını bir dereceye kadar rastgele seçebilir. Sıralama kapsamları tempdb'de ayrı olarak tutulursa, serbest kalma sırasının dizin uzantılarının konumu üzerinde hiçbir etkisi olmaz. Ayrıca, ara sıralama çalıştırmaları hedef dosya grubu yerine tempdb'de depolandığında, hedef dosya grubunda daha fazla alan vardır. Bu, dizin kapsamlarının bitişik olma olasılığını artırır.

SORT_IN_TEMPDB seçeneği yalnızca geçerli deyimi etkiler. Dizinin tempdb'de sıralandığı veya sıralanmadığı meta veri kaydı yok. Örneğin, SORT_IN_TEMPDB seçeneğini kullanarak bir kümelenmemiş dizin oluşturursanız ve daha sonra seçeneği belirtmeden kümelenmiş bir dizin oluşturursanız, Veritabanı Altyapısı kümelenmemiş dizini yeniden oluştururken bu seçeneği kullanmaz.

Note

Sıralama işlemi gerekli değilse veya sıralama bellekte gerçekleştirilebiliyorsa, SORT_IN_TEMPDB seçeneği yoksayılır.

Disk Alanı Gereksinimleri

SORT_IN_TEMPDB seçeneğini AÇI olarak ayarladığınızda, geçici sıralama çalıştırmalarını tutmak için tempdb'de yeterli boş disk alanınız ve hedef dosya grubunda yeni dizini tutmak için yeterli boş disk alanınız olmalıdır. Create INDEX deyimi yetersiz boş alan varsa ve bazı nedenlerden dolayı veritabanları diskte alan olmaması veya otomatik büyümenin kapalı olarak ayarlanması gibi daha fazla alan elde etmek için otomatik olarak büyüyemiyorsa başarısız olur.

SORT_IN_TEMPDB KAPALI olarak ayarlanırsa, hedef dosya grubundaki kullanılabilir boş disk alanı, son dizinin yaklaşık boyutunda olmalıdır. İlk aşamada sıralama çalıştırmaları oluşturulur ve son dizinle yaklaşık aynı miktarda alan gerektirir. İkinci aşamada, her sıralama çalıştırması kapsamı işlendikten sonra serbesttir. Bu, sıralama çalıştırma kapsamlarının, son dizin sayfalarını tutmak için alınan uzantılarla yaklaşık aynı hızda serbest bırakıldığı anlamına gelir; bu nedenle, genel alan gereksinimleri son dizinin boyutunu ciddi ölçüde aşmaz. Bunun bir yan etkisi, boş alan miktarının son dizinin boyutuna çok yakın olması durumunda Veritabanı Altyapısı'nın genellikle sıralama çalıştırması kapsamlarını serbest kaldıktan sonra çok hızlı bir şekilde yeniden kullanacağıdır. Sıralama işlemi uzantıları biraz rastgele serbest bırakıldığından, bu senaryoda dizin uzantılarının sürekliliğini azaltır. SORT_IN_TEMPDB KAPALI olarak ayarlanırsa, hedef dosya grubunda dizin alanlarının yeni serbest bırakılmış sıralama işlemi alanları yerine bitişik bir havuzdan tahsis edilebileceği yeterli boş alan varsa dizin alanlarının sürekliliği iyileştirilir.

Bir kümelenmemiş dizin oluşturduğunuzda, yeterli boş alana sahip olmanız gerekir.

  • SORT_IN_TEMPDB AÇILDI olarak ayarlanırsa , tempdb'de sıralama çalıştırmalarını depolamak için yeterli boş alan ve hedef dosya grubunda son dizin yapısını depolamak için yeterli boş alan olmalıdır. Sıralama işlemleri dizinin yaprak satırlarını içerir.

  • SORT_IN_TEMPDB KAPALI olarak ayarlanırsa, hedef dosya grubundaki boş alan son dizin yapısını depolayabilecek kadar büyük olmalıdır. Daha fazla boş alan varsa dizin genişletmelerinin sürekliliği iyileştirilebilir.

Kümelenmemiş dizinleri olmayan bir tabloda kümelenmiş dizin oluşturduğunuzda, boş alan olarak kullanılabilir olmanız gerekir:

  • SORT_IN_TEMPDB AÇILDI olarak ayarlanırsa tempdb'de sıralama çalıştırmalarını depolamak için yeterli boş alan olmalıdır. Bunlar tablonun veri satırlarını içerir. Hedef dosya grubunda son dizin yapısını depolamak için yeterli boş alan olmalıdır. Bu, tablonun veri satırlarını ve B ağacı dizinini içerir. Büyük bir anahtar boyutuna veya düşük değere sahip bir doldurma faktörüne sahip olma gibi faktörler için tahmini ayarlamanız gerekebilir.

  • SORT_IN_TEMPDB KAPALI olarak ayarlanırsa, hedef dosya grubundaki boş alan son tabloyu depolayabilecek kadar büyük olmalıdır. Buna dizin yapısı da dahildir. Daha fazla boş alan varsa tablo ve dizin uzantılarının sürekliliği iyileştirilebilir.

Kümelenmemiş dizinleri olan bir tabloda kümelenmiş dizin oluşturduğunuzda, yeterli boş alan bulunmalıdır.

  • SORT_IN_TEMPDB AÇILDI olarak ayarlanırsa tempdb'de en büyük dizin için sıralama çalıştırmaları koleksiyonunu depolamak için yeterli boş alan, genellikle kümelenmiş dizin ve hedef dosya grubunda tüm dizinlerin son yapılarını depolamak için yeterli boş alan olmalıdır. Bu, tablonun veri satırlarını içeren kümelenmiş dizini içerir.

  • SORT_IN_TEMPDB KAPALI olarak ayarlanırsa, hedef dosya grubundaki boş alan son tabloyu depolayabilecek kadar büyük olmalıdır. Bu, tüm dizinlerin yapılarını içerir. Daha fazla boş alan varsa tablo ve dizin uzantılarının sürekliliği iyileştirilebilir.

İNDEKS OLUŞTUR (Transact-SQL)

Dizinleri Yeniden Düzenleme ve Yeniden Oluşturma

alter index (Transact-SQL)

Dizin oluşturma belleği Sunucu Yapılandırma Seçeneğini yapılandır

Dizin DDL İşlemleri için Disk Alanı Gereksinimleri