Sonuç kümesini önbelleğe ile performans ayarlama

Sonuç kümesi önbelleğe alma etkinleştirildiğinde, ayrılmış SQL havuzu yinelenen kullanım için sorgu sonuçlarını otomatik olarak kullanıcı veritabanında önbelleğe alır. Bu, izleyen sorgu yürütmelerinin sonuçları doğrudan kalıcı önbellekten almasına olanak tanır, bu nedenle yeniden hesaplama gerekmez. Sonuç kümesi önbelleğe alma, sorgu performansını artırır ve işlem kaynağı kullanımını azaltır. Ayrıca, önbelleğe alınmış sonuç kümesi kullanan sorgular herhangi bir eşzamanlılık yuvası kullanmaz ve bu nedenle mevcut eşzamanlılık sınırlarına göre sayılmaz. Güvenlik için, kullanıcılar önbelleğe alınan sonuçlara yalnızca önbelleğe alınmış sonuçları oluşturan kullanıcılarla aynı veri erişim izinlerine sahipse erişebilir. Sonuç kümesi önbelleğe alma, veritabanı ve oturum düzeylerinde varsayılan olarak KAPALI'dır.

Not

Sonuç kümesi önbelleği DECRYPTBYKEY ile birlikte kullanılmamalıdır. Bu şifreleme işlevinin kullanılması gerekiyorsa, yürütme sırasında sonuç kümesi önbelleğinin devre dışı bırakıldığından emin olun ( oturum düzeyinde veya veritabanı düzeyinde).

Tuş komutları

Kullanıcı veritabanı için AÇI/KAPALI sonuç kümesi önbelleğini açma

Oturum için AÇI/KAPALI sonuç kümesi önbelleğe alma özelliğini açma

Önbelleğe alınmış sonuç kümesinin boyutunu denetleme

Önbelleği temizleme

Önbelleğe alınmayanlar

Bir veritabanı için sonuç kümesi önbelleğe alma açık olduğunda, bu sorgular dışında sonuçlar önbellek dolana kadar tüm sorgular için önbelleğe alınır:

  • Temel tabloların verilerinde veya sorgularında değişiklik olmasa bile belirlenimci olmayan yerleşik işlevler veya çalışma zamanı ifadelerine sahip sorgular. Örneğin, DateTime.Now(), GetDate().
  • Kullanıcı tanımlı işlevleri kullanan sorgular
  • Satır düzeyi güvenlik içeren tabloları kullanan sorgular
  • Satır boyutu 64 KB'tan büyük olan verileri döndüren sorgular
  • Büyük boyutlu veri döndüren sorgular (>10 GB)

Not

  • Bazı belirleyici olmayan işlevler ve çalışma zamanı ifadeleri, aynı verilere yönelik yinelenen sorgular için belirleyici olabilir. Örneğin, ROW_NUMBER().
  • Sorgu sonuç kümesindeki satırların sırası/sırası uygulama mantığınız için önemliyse sorgunuzda ORDER BY kullanın.
  • ORDER BY sütunlarındaki veriler benzersiz değilse, sonuç kümesi önbelleğe alma özelliğinin etkin veya devre dışı olmasına bakılmaksızın ORDER BY sütunlarında aynı değerlere sahip satırlar için garanti edilen satır sırası yoktur.

Önemli

Sonuç kümesi önbelleği oluşturma ve önbellekten veri alma işlemleri, ayrılmış bir SQL havuzu örneğinin denetim düğümünde gerçekleşir. Sonuç kümesi önbelleğe alma açık olduğunda, büyük sonuç kümesi (örneğin, >1 GB) döndüren sorguları çalıştırmak denetim düğümünde yüksek azaltmaya neden olabilir ve örnekteki genel sorgu yanıtını yavaşlatabilir. Bu sorgular genellikle veri keşfi veya ETL işlemleri sırasında kullanılır. Denetim düğümünün strese girmemesi ve performans sorununa neden olması için, kullanıcıların bu tür sorguları çalıştırmadan önce veritabanında sonuç kümesi önbelleğini KAPATMASI gerekir.

Bir sorgu için sonuç kümesi önbelleğe alma işlemleri tarafından geçen süre için bu sorguyu çalıştırın:

SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id  = <'request_id'>;

Sonuç kümesi önbelleğe alma devre dışı bırakılmış olarak yürütülen bir sorgu için örnek çıktı aşağıda verilmiştir.

Konum türü ve komut dahil olmak üzere sorgu sonuçlarını gösteren ekran görüntüsü.

Sonuç kümesi önbelleğe alma etkinken yürütülen bir sorgu için örnek çıktı aşağıda verilmiştir.

[D W ResultCache D b] nokta d b o'dan * seçilen komutun vurgulu olduğu sorgu sonuçlarını gösteren ekran görüntüsü.

Önbelleğe alınan sonuçlar kullanıldığında

Aşağıdaki gereksinimlerin tümü karşılanırsa, önbelleğe alınmış sonuç kümesi sorgu için yeniden kullanılır:

  • Sorguyu çalıştıran kullanıcının sorguda başvuruda bulunan tüm tablolara erişimi vardır.
  • Yeni sorgu ile sonuç kümesi önbelleğini oluşturan önceki sorgu arasında tam bir eşleşme vardır.
  • Önbelleğe alınan sonuç kümesinin oluşturulduğu tablolarda veri veya şema değişikliği yoktur.

Bu komutu çalıştırarak bir sorguyu önbellek isabetiyle mi yoksa isabetsiz mi çalıştırıp yürütmediğini denetleyin. result_cache_hit sütunu önbellek isabeti için 1, önbellek isabeti için 0 ve sonuç kümesi önbelleğinin kullanılmaması nedeniyle negatif değerler döndürür. Ayrıntılar için sys.dm_pdw_exec_requests denetleyin.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

Önbelleğe alınan sonuçları yönetme

Sonuç kümesi önbelleğinin boyut üst sınırı veritabanı başına 1 TB'tır. Temel alınan sorgu verileri değiştiğinde önbelleğe alınan sonuçlar otomatik olarak geçersiz kılınır.

Önbellek çıkarma, bu zamanlamaya göre ayrılmış SQL havuzu tarafından otomatik olarak yönetilir:

  • Sonuç kümesi kullanılmadıysa veya geçersiz kılındıysa 48 saatte bir.
  • Sonuç kümesi önbelleği boyut üst sınırına yaklaştığında.

Kullanıcılar şu seçeneklerden birini kullanarak sonuç kümesi önbelleğinin tamamını el ile boşaltabilir:

  • Veritabanı için sonuç kümesi önbellek özelliğini KAPALI duruma getirin
  • Veritabanına bağlıyken DBCC DROPRESULTSETCACHE çalıştırma

Veritabanının duraklatılması önbelleğe alınmış sonuç kümesini boşaltmaz.

Sonraki adımlar

Daha fazla geliştirme ipucu için bkz. geliştirmeye genel bakış.