Aracılığıyla paylaş


Sorgu Deposu'nı yönetmek için en iyi yöntemler

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bu makalede SQL Server Sorgu Deposu'nun yönetimi ve çevresindeki özellikler özetlenmektedir.

  • Sorgu Deposu ile yapılandırma ve yönetme hakkında daha fazla bilgi için bkz. Sorgu Deposukullanarak performansı izleme.

Not

SQL Server 2022'de (16.x), performans geçmişini daha iyi izlemeye, sorgu planıyla ilgili sorunları gidermeye ve yeni sorgu işlemcisi özelliklerini etkinleştirmeye yardımcı olmak için Sorgu Deposu artık yeni oluşturulan tüm SQL Server veritabanları için varsayılan olarak etkindir.

Azure SQL Veritabanı'nda Sorgu Deposu varsayılanları

Bu bölümde, Azure SQL Veritabanı'nda Sorgu Deposu'nun ve bağımlı özelliklerin güvenilir bir şekilde çalışmasını sağlamak için tasarlanmış en iyi yapılandırma varsayılanları açıklanmaktadır. Varsayılan yapılandırma, KAPALI/READ_ONLY durumlarında harcanan en az zaman olan sürekli veri toplama için iyileştirilmiştir. Kullanılabilir tüm Sorgu Deposu seçenekleri hakkında daha fazla bilgi için bkz. ALTER DATABASE SET seçenekleri (Transact-SQL).

Konfigürasyon Açıklama Varsayılan Yorum
MAX_STORAGE_SIZE_MB Sorgu Deposunun müşteri veritabanında alabileceği veri alanı sınırını belirtir SQL Server 2019 öncesi 100 (15.x)
SQL Server 2019 (15.x) ile başlayan 1000
Yeni veritabanları için zorunlu hale getirildi
ARALIK_UZUNLUĞU_DAKİKA Sorgu planları için toplanan çalışma zamanı istatistiklerinin toplandığı ve kalıcı olduğu zaman penceresinin boyutunu tanımlar. Her etkin sorgu planında bu yapılandırmayla tanımlanan bir süre için en fazla bir satır vardır 60 Yeni veritabanları için zorunlu kılındı
BAYAT_SORGU_EŞİK_GÜNLER Kalıcı çalışma zamanı istatistiklerinin ve etkin olmayan sorguların saklama süresini denetleyan zamana dayalı temizleme ilkesi 30 Önceki varsayılana sahip veritabanları ve yeni veritabanları için uygulanmaktadır (367)
BOYUT_TABANLI_TEMIZLEME_MODU Sorgu Deposu veri boyutu sınıra yaklaştığında otomatik veri temizlemenin yapılıp yapılmayacağını belirtir OTOMATİK Tüm veritabanları için zorunlu kılındı
SORGU YAKALAMA MODU Tüm sorguların mı yoksa yalnızca bir sorgu alt kümesinin mi izlendiğini belirtir OTOMATİK Tüm veritabanları için zorunlu kılındı
VERİ BOŞALTMA ARALIĞI SANIYELER Yakalanan çalışma zamanı istatistiklerinin diske boşaltmadan önce bellekte tutulacak en uzun süreyi belirtir 900 Yeni veritabanları için zorunlu kılındı

Önemli

Bu varsayılanlar, Azure SQL Veritabanı'nda Sorgu Deposu etkinleştirmesinin son aşamasında otomatik olarak uygulanır. Etkinleştirildikten sonra Azure SQL Veritabanı, birincil iş yükünü veya Sorgu Deposu'nun güvenilir işlemlerini olumsuz etkilemediği sürece müşteriler tarafından ayarlanan yapılandırma değerlerini değiştirmez.

Not

Sorgu Deposu, Azure SQL Veritabanı tek veritabanında ve Elastik Havuz'da devre dışı bırakılamaz. ALTER DATABASE [database] SET QUERY_STORE = OFF yürütülürken uyarı 'QUERY_STORE=OFF' is not supported in this version of SQL Server. döndürülür

Varsayılan ayarlarınızı korumak istiyorsanız, yapılandırmayı önceki duruma döndürmek için ALTER DATABASE komutunu, Sorgu Deposu seçenekleri ile birlikte kullanın. En iyi yapılandırma parametrelerini seçmeyi öğrenmek için Sorgu Deposu ile En İyi Yöntemler'e göz atın.

En uygun Sorgu Deposu Yakalama Modunu ayarlama

Sorgu Deposu'nda en uygun verileri tutun. Aşağıdaki tabloda her Sorgu Deposu Yakalama Modu için tipik senaryolar açıklanmaktadır:

Sorgu Deposu Yakalama Modu Senaryo
Tüm İş yükünüzü tüm sorguların şekilleri, yürütme sıklıkları ve diğer istatistikler açısından kapsamlı bir şekilde analiz edin.

İş yükünüzdeki yeni sorguları belirleyin.

Geçici sorguların kullanıcı veya otomatik parametreleme fırsatlarını tanımlamak için kullanılıp kullanılmadiğini algılayın.

Not: Bu, SQL Server 2016 (13.x) ve SQL Server 2017 'de (14.x) varsayılan yakalama modudur.
Otomatik Dikkatinizi ilgili ve eyleme dönüştürülebilir sorgulara odaklayın. Düzenli olarak yürütülen veya önemli kaynak tüketimi olan sorgular buna örnek olarak verilmiştir.

Not: SQL Server 2019 (15.x) ve sonraki sürümlerinde bu varsayılan yakalama modudur.
Yok Çalışma zamanında izlemek istediğiniz sorgu kümesini zaten yakaladınız ve diğer sorguların ortaya koyabileceği dikkat dağıtıcı öğeleri ortadan kaldırmak istiyorsunuz.

Hiçbiri, test ve karşılaştırma ortamları için uygun değildir.

Hiçbiri, uygulama iş yüklerini izlemek üzere yapılandırılmış Sorgu Deposu yapılandırmasını gönderen yazılım satıcıları için de uygun değildir.

Önemli yeni sorguları izleme ve iyileştirme fırsatını kaçırabileceğiniz için hiçbiri dikkatli kullanılmamalıdır. Bunu gerektiren belirli bir senaryonuz yoksa None kullanmaktan kaçının.
özel SQL Server 2019 (15.x), ALTER DATABASE ... SET QUERY_STORE komutu altında özel bir yakalama modu kullanıma sunulmuştur. Otomatik varsayılan ve önerilendir; ancak Sorgu Deposu'nun oluşturabileceği ek yük konusunda hala bir endişe varsa, veritabanı yöneticileri Sorgu Deposu yakalama davranışını daha fazla ayarlamak için özel yakalama politikalarını kullanabilir. Daha fazla bilgi ve öneri için bu makalenin devamında Özel yakalama ilkelerine bakın. Bu söz dizimi hakkında daha fazla bilgi için bkz. ALTER DATABASE SET Options.

Not

Sorgu Deposu Yakalama Modu Tüm, Otomatikveya Özelolarak ayarlandığında, imleçler, saklı yordamlar içindeki sorgular ve yerel olarak derlenmiş sorgular her zaman yakalanır. Yerel olarak derlenmiş sorguları yakalamak için sys.sp_xtp_control_query_exec_statskullanarak sorgu başına istatistiklerin toplanmasını etkinleştirin.

Sorgu Deposu'nda en uygun verileri tutma

Sorgu Deposu'nı yalnızca ilgili verileri içerecek şekilde yapılandırın, böylece sürekli çalışır ve normal iş yükünüz üzerinde en az etkiyle harika bir sorun giderme deneyimi sağlar.

Aşağıdaki tablo en iyi uygulamaları içerir.

En iyi yöntem Ayar
Korunan geçmiş verileri sınırlayın. Otomatik temizlemeyi etkinleştirmek için zamana bağlı ilkeyi yapılandırın.
İlgisiz sorguları filtreleyin. Sorgu Deposu Yakalama Modu'u Otomatikolarak yapılandırın.
Boyut üst sınırına ulaşıldığında daha az ilgili sorguları silin. Boyut tabanlı temizleme ilkesini etkinleştirin.

Özel yakalama ilkeleri

ÖZEL Sorgu Deposu Yakalama Modu etkinleştirildiğinde, belirli bir sunucudaki veri toplamaya ince ayar yapmak için yeni bir Sorgu Deposu yakalama ilkesi ayarı altında ek Sorgu Deposu yapılandırmaları kullanılabilir.

Yeni özel ayarlar, iç yakalama ilkesi zaman eşiği sırasında ne olacağını tanımlar. Bu, yapılandırılabilir koşulların değerlendirildiği ve varsa sorgunun Sorgu Deposu tarafından yakalanmaya uygun olduğu bir zaman sınırıdır.

Sorgu Deposu Yakalama Modu Sorgu Deposu için sorgu yakalama ilkesini belirtir.

  • Tüm: Tüm sorguları yakalar. Bu seçenek SQL Server 2016 (13.x) ve SQL Server 2017'de (14.x) varsayılan seçenektir.
  • Otomatik: Seyrek sorgular ve önemsiz derleme ve yürütme süresi olan sorgular yoksayılır. Yürütme sayısı, derleme ve çalışma zamanı süresi eşikleri dahili olarak belirlenir. SQL Server 2019 (15.x) ile başlayarak bu varsayılan seçenektir.
  • Hiçbiri: Sorgu Deposu yeni sorguları yakalamayı durdurur.
  • Özel: Ek denetime ve veri toplama ilkesinde ince ayar yapma özelliğine izin verir. Yeni özel ayarlar, iç yakalama ilkesi zaman eşiği sırasında ne olacağını tanımlar. Bu, yapılandırılabilir koşulların değerlendirildiği ve varsa sorgunun Sorgu Deposu tarafından yakalanmaya uygun olduğu bir zaman sınırıdır.

Ortamınız için uygun bir özel yakalama ilkesinin ayarlanması aşağıdaki durumlarda dikkate alınmalıdır:

  • Veritabanı çok büyük.
  • Veritabanında çok sayıda benzersiz, geçici sorgu vardır.
  • Veritabanının belirli boyut veya büyüme sınırlamaları vardır.

SQL Server Management Studio'nun (SSMS) en son sürümünü indirme

Management Studio'da geçerli ayarları görüntülemek için:

  1. SQL Server Management Studio Nesne Gezgini'nde veritabanına sağ tıklayın.
  2. Özellikleröğesini seçin.
  3. sorgu deposu seçin. Sorgu Deposu sayfasında, İşlem Modu (İstenen)'nın "okuma yazma"olduğunu doğrulayın.
  4. Sorgu Deposu Yakalama Modu'Özelolarak ayarlayın.
  5. Sorgu Deposu Yakalama İlkesi altındaki dört yakalama ilkesi alanının artık etkinleştirildiğini ve yapılandırılabilir olduğunu unutmayın.

Örnek özel yakalama ilkeleri

Aşağıdaki örnek, QUERY_CAPTURE_MODE AUTO olarak ayarlar ve özel yakalama modunu ayarlar. Aşağıdakilerin her biri özel yakalama ilkelerini SQL Server 2022'deki (16.x) varsayılan değerine ayarlar. Yakalanan sorgu sayısını azaltmak ve bu nedenle Sorgu Deposu'nun disk üzerindeki ayak izini azaltmak için bu değerleri ayarlamayı göz önünde bulundurun. Bu değerlerin küçük artışlarla aşamalı olarak değiştirilmesi önerilir.

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1000,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

Aşağıdaki örnek sorgu, EXECUTION_COUNT ve TOTAL_COMPILE_CPU_TIME_MSiçin varsayılan ayarları geçersiz kılan bir özel yakalama ilkesi kullanmak üzere var olan sorgu deposunu değiştirir.

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
    (
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        EXECUTION_COUNT = 100,
        TOTAL_COMPILE_CPU_TIME_MS = 10000
      )
    );

Sorgu Deposu maksimum boyutu

Sql Server 2019'dan (15.x) başlayarak Sorgu Deposu'nun varsayılan en büyük boyut değeri 1000 MB'tır. Önceki sürümlerde varsayılan değer 100 MB'tı. Çok sayıda benzersiz sorgu planına sahip meşgul bir veritabanında Sorgu Deposu'nun boyut üst sınırını artırmak uygundur. Yakalama ilkesinin ayarlanması (önceki bölüme bakın), Sorgu Deposu'nun disk içi boyutunu sınırlamak ve Sorgu Deposu'nun READ_ONLY moduna girmesini önlemek için daha önemli bir noktadır. Sorgu Deposu sorguları, yürütme planlarını ve istatistikleri toplasa da, veritabanındaki boyutu bu sınıra ulaşılana kadar artar. Bu durumda Sorgu Deposu, işlem modunu otomatik olarak READ_ONLY olarak değiştirir ve yeni veri toplamayı durdurur; bu da performans analizinizin artık doğru olmadığı anlamına gelir.

  • SQL Server ve Azure SQL Yönetilen Örneği'nde MAX_STORAGE_SIZE_MB sınırı sıkı bir şekilde uygulanmaz.
  • Azure SQL Veritabanı'nda izin verilen en fazla MAX_STORAGE_SIZE_MB değeri 10.240 MB'tır.

Depolama boyutu yalnızca Sorgu Deposu diske veri yazdığında denetlenmektedir. Bu aralık, DATA_FLUSH_INTERVAL_SECONDS seçeneği veya Management Studio Sorgu Deposu iletişim kutusundaki Veri Temizleme Aralığıseçeneği tarafından ayarlanır.

  • Aralık varsayılan değeri 900 saniyedir (veya 15 dakika).
  • Sorgu Deposu depolama boyutu denetimleri arasındaki MAX_STORAGE_SIZE_MB sınırını aştıysa salt okunur moda geçer.
  • SIZE_BASED_CLEANUP_MODE etkinleştirilirse, MAX_STORAGE_SIZE_MB sınırını zorlamak için temizleme mekanizması da tetiklenir.
    • Yeterli alan temizlendikten sonra Sorgu Deposu modu otomatik olarak READ_WRITE moduna geri döner.

Daha fazla bilgi için bakınız ALTER DATABASE SET OPTION MAX_STORAGE_SIZE_MB.

Veri Boşaltma Aralığı (dakika)

Veri Temizleme Aralığı, toplanan çalışma zamanı istatistikleri diskte kalıcı hale gelmeden önceki sıklığı tanımlar. SQL Server Management Studio'da değer dakika cinsindendir, ancak Transact-SQL saniye cinsinden ifade edilir. Varsayılan değer 15 dakikadır (900 saniye).

  • Veri temizleme aralığının artırılması Genel Sorgu Deposu depolama G/Ç etkisini azaltabilir, ancak depolama G/Ç iş yükünün disk kullanımına daha az ama daha ağır etki eden daha daha yüksekneden olur. İş yükünüz çok fazla sayıda farklı sorgu ve plan oluşturmuyorsa veya veritabanını kapatmadan önce verileri kalıcı hale getirmek için daha uzun süre dayanabiliyorsanız daha yüksek bir değer kullanmayı göz önünde bulundurun.
  • Veri temizleme aralığını azaltmak, kapatma, güç kaybı veya yük devretme durumunda kaybolacak Sorgu Deposu verilerinin miktarını azaltır. Ayrıca, diske daha sık ama daha az veriyle yazarak, Sorgu Deposu'nun depolama G/Ç üzerindeki etkisini de yumuşatabilir.

Not

İzleme bayrağı 7745 kullanıldığında, yük devretme veya kapatma komutu olması durumunda Sorgu Deposu verilerinin diske yazılması engellenir. Daha fazla bilgi için bkz. sorgu deposunu görev açısından kritik sunucularda kullanma.

Sorgu Deposu varsayılanlarını değiştirme

sorgu deposunu iş yükünüz ve performans sorunlarını giderme gereksinimlerinize göre yapılandırın. Varsayılan parametreler başlamak için yeterlidir, ancak Sorgu Deposu'un zaman içinde nasıl davrandığını izlemeli ve yapılandırmasını buna göre ayarlamalısınız.

Sorgu Deposu geçerli ayarlarını görüntüleme

SQL Server Management Studio (SSMS) veya T-SQL'de geçerli Sorgu Deposu ayarlarını görüntüleyin.

SQL Server Management Studio'nun (SSMS) en son sürümünü indirme

Management Studio'da geçerli ayarları görüntülemek için:

  1. SQL Server Management Studio Nesne Gezgini'nde veritabanına sağ tıklayın.
  2. Özellikleröğesini seçin.
  3. Sorgu Deposuseçin.

Aşağıdaki betik, En Büyük Boyut (MB)için yeni bir değer ayarlar:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (MAX_STORAGE_SIZE_MB = 1024);

Veri Temizleme Aralığıiçin farklı bir değer ayarlamak üzere SQL Server Management Studio veya Transact-SQL kullanın:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (DATA_FLUSH_INTERVAL_SECONDS = 900);

İstatistik Toplama Aralığı: Toplanan çalışma zamanı istatistiği için dakika cinsinden ifade edilen ayrıntı düzeyini tanımlar. Varsayılan değer 60 dakikadır. Sorunları algılamak ve azaltmak için daha ince ayrıntı düzeyine veya daha az zamana ihtiyacınız varsa daha düşük bir değer kullanmayı göz önünde bulundurun. Değerin Sorgu Deposu verilerinin boyutunu doğrudan etkilediğini unutmayın. İstatistik Toplama Aralığıiçin farklı bir değer ayarlamak üzere SQL Server Management Studio veya Transact-SQL kullanın:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (INTERVAL_LENGTH_MINUTES = 60);

Eski Sorgu Eşiği (Gün): Kalıcı çalışma zamanı istatistiklerinin ve etkin olmayan sorguların saklama süresini gün cinsinden ifade eden ve denetleyen zamana dayalı bir temizleme politikası. Varsayılan olarak, Sorgu Deposu verileri 30 gün boyunca saklayacak şekilde yapılandırılır ve bu senaryonuz için gereksiz yere uzun olabilir.

Kullanmayı planlamadığınız geçmiş verileri saklamaktan kaçının. Bu uygulama, salt okunur durumdaki değişiklikleri azaltır. Sorgu Deposu verilerinin boyutu ve sorunu algılama ve azaltma süresi daha öngörülebilir olacaktır. Zamana dayalı temizleme ilkesini yapılandırmak için Management Studio'yu veya aşağıdaki betiği kullanın:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 90));

Boyut Tabanlı Temizleme Modu: Sorgu Deposu veri boyutu sınıra yaklaştığında otomatik veri temizlemenin yapılıp yapılmayacağını belirtir. Sorgu Deposu'nda her zaman okuma-yazma modunda çalıştığından ve en son verileri topladığından emin olmak için boyut tabanlı temizlemeyi etkinleştirin. Yoğun iş yükleri altında Sorgu Deposu temizleme işleminin veri boyutunu tutarlı bir şekilde sınır altında tutma garantisi yoktur. Otomatik veri temizleme işlemi geride kalarak geçici olarak salt okunur moda geçebilir.

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (SIZE_BASED_CLEANUP_MODE = AUTO);

Sorgu Deposu Yakalama Modu: Sorgu Deposu için sorgu yakalama ilkesini belirtir.

  • Tüm: Tüm sorguları yakalar. Bu seçenek SQL Server 2016 (13.x) ve SQL Server 2017'de (14.x) varsayılan seçenektir.
  • Otomatik: Seyrek sorgular ve önemsiz derleme ve yürütme süresi olan sorgular yoksayılır. Yürütme sayısı, derleme ve çalışma zamanı süresi eşikleri dahili olarak belirlenir. SQL Server 2019 (15.x) ile başlayarak bu varsayılan seçenektir.
  • Hiçbiri: Sorgu Deposu yeni sorguları yakalamayı durdurur.
  • Özel: Ek denetime ve veri toplama ilkesinde ince ayar yapma özelliğine izin verir. Yeni özel ayarlar, iç yakalama ilkesi zaman eşiği sırasında ne olacağını tanımlar. Bu, yapılandırılabilir koşulların değerlendirildiği ve varsa sorgunun Sorgu Deposu tarafından yakalanmaya uygun olduğu bir zaman sınırıdır.

Önemli

Sorgu Deposu Yakalama Modu Tümü, Otomatikveya Özelolarak ayarlandığında, imleçler, saklı yordamlar içindeki sorgular ve yerel olarak derlenmiş sorgular her zaman yakalanır. Yerel olarak derlenmiş sorguları yakalamak için sys.sp_xtp_control_query_exec_statskullanarak sorgu başına istatistiklerin toplanmasını etkinleştirin.

Aşağıdaki betik QUERY_CAPTURE_MODE AUTO olarak ayarlar:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE (QUERY_CAPTURE_MODE = AUTO);

Örnekler

Aşağıdaki örnek QUERY_CAPTURE_MODE AUTO olarak ayarlar ve SQL Server 2016'da (13.x) önerilen diğer seçenekleri ayarlar:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1000,
      INTERVAL_LENGTH_MINUTES = 60
    );

Aşağıdaki örnek QUERY_CAPTURE_MODE AUTO olarak ayarlar ve SQL Server 2017'de (14.x) önerilen diğer seçenekleri bekleme istatistiklerini içerecek şekilde ayarlar:

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1000,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON
    );

Aşağıdaki örnek, ÖZEL yakalama ilkesini yeni varsayılan AUTO yakalama modu yerine SQL Server 2019 (15.x) varsayılanlarına ayarlar. Özel yakalama ilkesi seçenekleri ve varsayılanları hakkında daha fazla bilgi için bkz. <query_capture_policy_option_list>.

ALTER DATABASE [QueryStoreDB]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1000,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

Sorgu Deposu bakımı

Bu bölümde Sorgu Deposu özelliğinin kendisini yönetmeyle ilgili bazı yönergeler sağlanmaktadır.

Sorgu Deposu durumu

Sorgu Deposu, verilerini kullanıcı veritabanı içinde depolar ve bu nedenle boyut sınırı vardır (MAX_STORAGE_SIZE_MBile yapılandırılmıştır). Sorgu Deposu'ndaki veriler bu sınıra ulaştığında, Sorgu Deposu otomatik olarak okuma-yazma durumundan salt okunura dönüşür ve yeni veri toplamayı durdurur.

Sorgu Mağazası'nın şu anda etkin olup olmadığını ve çalışma zamanı istatistiklerini toplayıp toplamadığını belirlemek için sys.database_query_store_options sorgusunu çalıştırın.

SELECT actual_state, actual_state_desc, readonly_reason,
    current_storage_size_mb, max_storage_size_mb
FROM sys.database_query_store_options;

Sorgu Deposu durumu actual_state sütunu tarafından belirlenir. İstenen durumdan farklıysa, readonly_reason sütunu size daha fazla bilgi verebilir. Sorgu Deposu boyutu kotayı aştığında, özellik read_only moduna geçer ve bir neden sağlar. Nedenlerle ilgili bilgi için bkz. sys.database_query_store_options.

"Sorgu Deposu seçeneklerini al"

Sorgu Deposu durumu hakkında ayrıntılı bilgi edinmek için kullanıcı veritabanında aşağıdaki komutu yürütebilirsiniz.

SELECT * FROM sys.database_query_store_options;

Sorgu Deposu aralığını ayarlama

Sorgu çalışma zamanı istatistiklerini toplama aralığını geçersiz kılabilirsiniz (varsayılan değer 60 dakikadır). Aralık için yeni değer, sys.database_query_store_options görünüm aracılığıyla kullanıma sunulur.

ALTER DATABASE <database_name>
SET QUERY_STORE (INTERVAL_LENGTH_MINUTES = 15);

INTERVAL_LENGTH_MINUTESiçin rastgele değerlere izin verilmez. Şu aralıklardan birini kullanın: 1, 5, 10, 15, 30, 60 veya 1440 dakika.

Not

Azure Synapse Analytics için, bu bölümde gösterildiği gibi Sorgu Deposu yapılandırma seçeneklerini özelleştirme desteklenmez.

Sorgu Mağazası alan kullanımı

Geçerli Sorgu Deposu boyutunu denetlemek ve sınırlamak için kullanıcı veritabanında aşağıdaki deyimi yürütür.

SELECT current_storage_size_mb, max_storage_size_mb
FROM sys.database_query_store_options;

Sorgu Deposu depolama alanı doluysa, depolama alanını genişletmek için aşağıdaki deyimi kullanın.

ALTER DATABASE <database_name>
SET QUERY_STORE (MAX_STORAGE_SIZE_MB = <new_size>);

Sorgu Deposu seçeneklerini ayarlama

Tek bir ALTER DATABASE deyimiyle aynı anda birden çok Sorgu Deposu seçeneği ayarlayabilirsiniz.

ALTER DATABASE <database name>
SET QUERY_STORE (
    OPERATION_MODE = READ_WRITE,
    CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30),
    DATA_FLUSH_INTERVAL_SECONDS = 3000,
    MAX_STORAGE_SIZE_MB = 500,
    INTERVAL_LENGTH_MINUTES = 15,
    SIZE_BASED_CLEANUP_MODE = AUTO,
    QUERY_CAPTURE_MODE = AUTO,
    MAX_PLANS_PER_QUERY = 1000,
    WAIT_STATS_CAPTURE_MODE = ON
);

Yapılandırma seçeneklerinin tam listesi için bkz. ALTER DATABASE SET Options (Transact-SQL) .

Alanı temizleme

Sorgu Deposu iç tabloları veritabanı oluşturma sırasında PRIMARY dosya grubunda oluşturulur ve bu yapılandırma daha sonra değiştirilemez. Alanınız tükeniyorsa, aşağıdaki deyimi kullanarak eski Sorgu Deposu verilerini temizlemek isteyebilirsiniz.

ALTER DATABASE <db_name> SET QUERY_STORE CLEAR;

Alternatif olarak, sorgu iyileştirmeleri ve plan analizi için daha az ilgili olduğundan ancak aynı kadar alan kapladığından yalnızca geçici sorgu verilerini temizlemek isteyebilirsiniz.

Azure Synapse Analytics'te Sorgu Deposu'nu temizlemek mümkün değildir. Veriler son yedi gün boyunca otomatik olarak korunur.

Geçici sorguları silme

Böylece Sorgu Deposu'ndan geçici ve iç sorgular temizlenir, böylece Sorgu Deposu'nun alanı tükenmiyor ve gerçekten izlememiz gereken sorguları kaldırıyoruz.

SET NOCOUNT ON
-- This purges adhoc and internal queries from
-- the Query Store in the current database
-- so that the Query Store does not run out of space
-- and remove queries we really need to track

DECLARE @id int;
DECLARE adhoc_queries_cursor CURSOR
FOR
    SELECT q.query_id
    FROM sys.query_store_query_text AS qt
    JOIN sys.query_store_query AS q
    ON q.query_text_id = qt.query_text_id
    JOIN sys.query_store_plan AS p
    ON p.query_id = q.query_id
    JOIN sys.query_store_runtime_stats AS rs
    ON rs.plan_id = p.plan_id
    WHERE q.is_internal_query = 1  -- is it an internal query then we dont care to keep track of it
       OR q.object_id = 0 -- if it does not have a valid object_id then it is an adhoc query and we don't care about keeping track of it
    GROUP BY q.query_id
    HAVING MAX(rs.last_execution_time) < DATEADD (minute, -5, GETUTCDATE())  -- if it has been more than 5 minutes since the adhoc query ran
    ORDER BY q.query_id;
OPEN adhoc_queries_cursor ;
FETCH NEXT FROM adhoc_queries_cursor INTO @id;
WHILE @@fetch_status = 0
BEGIN
    PRINT 'EXEC sp_query_store_remove_query ' + str(@id);
    EXEC sp_query_store_remove_query @id;
    FETCH NEXT FROM adhoc_queries_cursor INTO @id;
END
CLOSE adhoc_queries_cursor;
DEALLOCATE adhoc_queries_cursor;

Artık istemediğiniz verileri temizlemek için kendi yordamınızı farklı mantıklarla tanımlayabilirsiniz.

Önceki örnekte, gereksiz verileri kaldırmak için sp_query_store_remove_query genişletilmiş saklı yordamı kullanılır. Ayrıca şunları da yapabilirsiniz:

  • Belirli bir plana ilişkin çalışma zamanı istatistiklerini temizlemek için sp_query_store_reset_exec_stats kullanın.
  • Tek bir planı kaldırmak için sp_query_store_remove_plan kullanın.