Karma toplam kurtarma


Yanıtlar:


11

Karma birleştirme ve karma toplamı , aynı işleç kodunu dahili olarak kullanır, ancak karma birleştirme yalnızca tek bir (yapı) giriş kullanır. Temel çalışma karma agrega olan Craig Freedman tarafından açıklanan :

Karma birleşiminde olduğu gibi, karma toplam bellek gerektirir. Karma toplama ile bir sorgu yürütmeden önce SQL Server, sorguyu yürütmek için ne kadar bellek gerektiğini tahmin etmek için kardinalite tahminlerini kullanır. Bir karma birleştirmeyle, her oluşturma satırını saklarız, bu nedenle toplam bellek gereksinimi oluşturma satırlarının sayısı ve boyutu ile orantılıdır. Birleştirilen satır sayısının ve birleştirmenin çıktı kardinalitesinin birleştirmenin bellek gereksinimi üzerinde hiçbir etkisi yoktur. Bir karma toplamıyla, her grup için bir satır saklarız, bu nedenle toplam bellek gereksinimi aslında çıktı gruplarının veya satırların sayısı ve boyutu ile orantılıdır. Grubun sütunlarına göre daha az benzersiz değerine ve daha az gruba sahipsek, daha az belleğe ihtiyacımız vardır. Grubun sütunlarına göre daha fazla benzersiz değerine ve daha fazla gruba sahipsek, daha fazla belleğe ihtiyacımız var.

Karma özyineleme hakkında konuşmaya devam ediyor:

Peki, hafızamız tükenirse ne olur? Tekrar, hash join gibi, eğer hafızamız tükenirse, satırları tempdb'ye dökmeye başlamalıyız. Dökülen kovalara veya bölümlere hash ek olan yeni satırlarla birlikte kısmen toplanmış sonuçlar da dahil olmak üzere bir veya daha fazla kova veya bölüm döküyoruz. Dökülen yeni satırları bir araya getirmeye çalışmasak da, bunları hash ediyoruz ve birkaç kova veya bölüme ayırıyoruz. Tüm giriş gruplarını işlemeyi bitirdikten sonra, tamamlanmış bellek içi grupları çıkarırız ve her seferinde bir dökülen bölümü okuyarak ve toplayarak algoritmayı tekrarlarız. Dökülen satırları birden çok bölüme bölerek, her bölümün boyutunu küçültür ve böylece algoritmanın birçok kez tekrarlanması riskini azaltırız.

Kefaletle kurtarmak

Karma kurtarma hafifçe belgelenmiştir, ancak Nacho Alonso Portillo tarafından belirtilmiştir. Kurtarma işlemini zorlamadan önce karma yineleyicinin maksimum özyineleme düzeyi nedir?

Değer, sabit, üründe sabit olarak kodlanmıştır ve değeri beştir (5). Bu, karma tarama operatörünün, çalışma alanından verilen belleğe sığmayan herhangi bir alt bölüm için sıralama tabanlı bir algoritmaya başvurmadan önce, orijinal bölümü daha küçük bölümlere ayırmak için önceki beş denemenin gerçekleşmiş olması gerektiği anlamına gelir.

"Hash tarama operatörü" iç sınıfına yapılan bir gönderme yoktur sözü CQScanHashde sqlmin.dll. Bu sınıf, yürütme planlarında gördüğümüz karma operatörün (kısmi kümeler ve akış farklı dahil tüm formlarında) uygulanmasına başkanlık eder.

Kurtarma algoritması

Bu bizi sorularınızın kalbine getiriyor - kurtarma algoritması tam olarak ne yapıyor? "Sıralama" mı yoksa "bir çeşit iç içe döngüler" mi?

Bakış açınıza bağlı olarak her ikisi de tartışmalıdır. Karma özyineleme düzey 5'e ulaştığında, bellek içi karma bölümü, karma tablosu olmaktan, karma değerlerinde başlangıçta boş bir b-ağacı dizinine dönüşür. Önceden dökülmüş tek bir karma bölümündeki her satır, b-ağacı dizininde aranır ve uygun şekilde eklenir (yeni grup) veya güncellenir (agregaları koruyarak).

Bir b-ağacına bu düzensiz ekler serisi, aynı şekilde bir yerleştirme sıralaması veya dizinli iç içe döngüler araması olarak da görülebilir .

Her durumda, bu geri dönüş algoritmasının daha fazla bellek ayırmadan tamamlanması garanti edilir. Eğer b-ağacı için mevcut alan tüm gruplama anahtarlarını ve taşma bölümünden toplananları tutmak için yeterli değilse çoklu geçişler gerekebilir.

B-ağacı dizinini tutmak için kullanılabilir bellek tükendiğinde, diğer satırlar (geçerli dökülen bölümden) yeni bir tek tempdb bölümüne (daha küçük olması garanti edilir) gönderilir ve işlem gerektiği kadar tekrarlanır. Karma tekrarlaması sona erdiğinden dökülme seviyesi 5'te kalır . Belgelenmemiş iz bayrağı 7357 ile bazı işlem ayrıntıları gözlemlenebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.