Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'teki SQL veritabanı
Bu makalede, Sorgu Deposu ipuçlarını kullanmaya yönelik en iyi yöntemler ayrıntılı olarak verilmiştir. Sorgu Deposu ipuçları, uygulama kodunu değiştirmeden sorgu planı şekillerinin şekillendirilmesine olanak tanır.
- Sorgu Deposu ile yapılandırma ve yönetme hakkında daha fazla bilgi için bkz. Sorgu Deposu kullanarak performansı izleme.
- Sorgu Deposu ile eyleme dönüştürülebilir bilgileri bulma ve performansı ayarlama hakkında bilgi için bkz. Sorgu Deposu ile performansı ayarlama.
- Sorgu Deposu'nda genel en iyi yöntemler için bkz. Sorgu Deposu ile iş yüklerini izlemeye yönelik en iyi yöntemler.
Sorgu Deposu ipuçları için kullanım örnekleri
Aşağıdaki kullanım örneklerini Sorgu Deposu ipuçları için ideal olarak düşünün. Daha fazla bilgi için bkz. Sorgu Deposu ipuçları ne zaman kullanılır?
Caution
SQL Server Sorgu İyileştiricisi genellikle sorgu için en iyi yürütme planını seçtiğinden, deneyimli geliştiriciler ve veritabanı yöneticileri için son çare olarak yalnızca ipuçlarını kullanmanızı öneririz. Daha fazla bilgi için bkz. Sorgu ipuçları.
Kod değiştirilemediğinde
Sorgu Deposu ipuçlarını kullanmak, uygulama kodunu veya veritabanı nesnelerini değiştirmeden sorguların yürütme planlarını etkilemenizi sağlar. Sorgu ipuçlarını hızlı ve kolay bir şekilde uygulamanıza olanak tanıyan başka bir özellik yoktur.
Kod yeniden dağıtılmadan ayıklama-dönüştürme-yükleme (ETL) iş yüklerinden yararlanmak için sorgu deposu ipuçlarını kullanabilirsiniz. Bu 14 dakikalık videoyla Sorgu Deposu ipuçlarıyla toplu yüklemeyi iyileştirmeyi öğrenin:
Sorgu Deposu ipuçları basit sorgu ayarlama yöntemleridir, ancak bir sorgu sorunlu hale gelirse daha önemli kod değişiklikleriyle ele alınmalıdır. Bir sorguya Sorgu Deposu önerilerini düzenli olarak uygulama gereksinimi duyuyorsanız, daha kapsamlı bir sorgu yeniden yazmayı göz önünde bulundurun. SQL Server Sorgu İyileştiricisi genellikle sorgu için en iyi yürütme planını seçer. Deneyimli geliştiriciler ve veritabanı yöneticileri için ipuçlarını yalnızca son çare olarak kullanmanızı öneririz.
Hangi sorgu ipuçlarının uygulanabileceği hakkında bilgi için bkz. Desteklenen sorgu ipuçları.
Yüksek işlem yükü altında veya görev açısından kritik kod söz konusu olduğunda
Yüksek çalışma süresi gereksinimleri veya işlem yükü nedeniyle kod değişiklikleri pratik değilse, Sorgu Deposu ipuçları mevcut sorgu iş yüklerine hızlı bir şekilde sorgu ipuçları uygulayabilir. Sorgu Deposu ipuçlarını eklemek ve kaldırmak kolaydır.
Sorgu Deposu ipuçları, olağanüstü iş yükü artışları için zaman dilimleri boyunca performansı ayarlamak amacıyla sorgu gruplarına eklenebilir ve kaldırılabilir.
Plan kılavuzlarının yerine
Sorgu Deposu ipuçları öncesinde, geliştiricinin kullanımı karmaşık olabilecek benzer görevleri gerçekleştirmek için plan kılavuzlarına güvenmesi gerekirdi. Sorgu Deposu ipuçları, sorguların görsel olarak keşfi için SQL Server Management Studio'nun (SSMS) Sorgu Deposu özellikleriyle tümleştirilir.
Plan kılavuzları kullanarak, sorgu kod parçacıklarıyla tüm planlarda arama yapmanız gerekir. Sorgu Deposu ipuçları özelliği, sonuçta elde edilen sorgu planını etkilemek için tam olarak eşleşen sorgular gerektirmez. Sorgu Deposu'ndaki bir query_id'a, Sorgu Deposu ipuçları uygulanabilir.
Sorgu Deposu ipuçları, sabit kodlanmış deyim düzeyi ipuçlarını ve mevcut plan kılavuzlarını geçersiz kılar.
Daha yeni bir uyumluluk düzeyi düşünün
Yeni bir veritabanı uyumluluk düzeyi, örneğin satıcı belirtimleri veya daha büyük test gecikmeleri nedeniyle kullanılamadığında, Query Store ipuçları değerli bir yöntem olabilir. Bir veritabanı için daha yüksek bir uyumluluk düzeyi kullanılabiliyorsa, SQL Server'ın en son performans iyileştirmelerinden ve özelliklerinden yararlanmak için tek bir sorgunun veritabanı uyumluluk düzeyini yükseltmeyi göz önünde bulundurun.
Örneğin, uyumluluk düzeyi 140 olan bir veritabanına sahip bir SQL Server 2022 (16.x) örneğiniz varsa, uyumluluk düzeyi 160'ta tek tek sorguları çalıştırmak için Sorgu Deposu ipuçlarını kullanmaya devam edebilirsiniz. Aşağıdaki ipucunu kullanabilirsiniz:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Tam bir ders için bkz. Sorgu Deposu ipucu örnekleri.
Yükseltmeden sonra daha eski bir uyumluluk düzeyini göz önünde bulundurun
Sorgu Deposu ipuçlarının yardımcı olabileceği bir diğer durum da sql Server örneği geçişi veya yükseltmesi sonrasında sorguların doğrudan değiştirilememe durumudur. Yeniden yazılana veya en son uyumluluk düzeyinde iyi performans gösteren başka bir şekilde ele alınana kadar sorgu için önceki uyumluluk düzeyini uygulamak için Sorgu Deposu ipuçlarını kullanın. Sorgu Deposu'nun gerileyen sorgular raporunu kullanarak, geçiş sırasında Sorgu Ayarlama Yardımcısı aracını veya diğer sorgu düzeyinde uygulama telemetrisini kullanarak daha yüksek bir uyumluluk düzeyiyle gerileyen aykırı sorgular belirleyin. Uyumluluk düzeyleri arasındaki farklar hakkında daha fazla bilgi için uyumluluk düzeyleri arasındaki farklarbölümünü gözden geçirin.
Yeni uyumluluk düzeyini performans test ettikten ve Sorgu Deposu ipuçlarını bu şekilde dağıttığınızda, kod değişikliği yapmadan önemli sorunlu sorguları önceki uyumluluk düzeyinde tutarken veritabanının uyumluluk düzeyinin tamamını yükseltebilirsiniz.
Sorunlu sorguların gelecekte yürütülmesini engelle
Sorgu ipucunu ABORT_QUERY_EXECUTION kullanarak bilinen sorunlu sorguların gelecekte yürütülmesini engelleyebilirsiniz; örneğin, yüksek kaynak tüketimine neden olan ve kritik uygulama iş yüklerini etkileyen önemsiz sorgular.
Note
ABORT_QUERY_EXECUTION sorgu ipucu yalnızca Azure SQL Veritabanı, Azure SQL Yönetilen ÖrneğiAUTD ve SQL Server 2025 'te (17.x) kullanılabilir.
Örneğin, 39'un gelecekteki yürütmesini query_id engellemek için aşağıdaki gibi sys.sp_query_store_set_hints yürütebilirsiniz:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Aynı sorgunun engelini kaldırmak için sys.sp_query_store_clear_hints yürütür:
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;
Daha fazla bilgi için bkz. Sorgu Deposu ipucu örnekleri.
Aşağıdaki noktalara dikkat edilmelidir:
Bir sorgu için bu ipucunu belirttiğinizde, sorguyu yürütme girişimi 8778, önem derecesi 16 hatasıyla başarısız olur, ABORT_QUERY_EXECUTION ipucu belirtildiğinden sorgu yürütme durduruldu.
Bir sorgunun engelini kaldırmak için,
query_iddeğerini@query_idparametresine geçirerek sys.sp_query_store_clear_hints saklı yordamında ipucunu temizleyebilirsiniz.- Bu saklı yordam, bir sorgu için tüm ipuçlarını temizler. Mevcut ipuçlarını koruyarak sorgunun engelini kaldırmak istiyorsanız, sys.sp_query_store_set_hints kullanarak
ABORT_QUERY_EXECUTIONipucunu kaldırın, ancak diğer ipuçlarını koruyun.
- Bu saklı yordam, bir sorgu için tüm ipuçlarını temizler. Mevcut ipuçlarını koruyarak sorgunun engelini kaldırmak istiyorsanız, sys.sp_query_store_set_hints kullanarak
Aşağıdaki örnek sorguda olduğu gibi Sorgu Deposu'nda engellenen sorguları bulmak için sistem görünümlerini kullanabilirsiniz:
SELECT qsh.query_id, q.query_hash, qt.query_sql_text FROM sys.query_store_query_hints AS qsh INNER JOIN sys.query_store_query AS q ON qsh.query_id = q.query_id INNER JOIN sys.query_store_query_text AS qt ON q.query_text_id = qt.query_text_id WHERE UPPER(qsh.query_hint_text) LIKE '%ABORT[_]QUERY[_]EXECUTION%';Değeri
query_idalmak için, Sorgu Deposu'na en az bir sorgu yürütmesinin kaydedilmesi gerekir. Bu yürütmenin başarılı olması gerekmez. Bu, zaman aşımına uğradı veya iptal edilen sorguların gelecekte yürütülmesinin engellenebileceği anlamına gelir.Belirli bir sorgu karması olan tüm sorguları engellemeniz veya engellemeyi kaldırmanız gerekiyorsa otomasyon scripti kullanmayı göz önünde bulundurun. Örneğin dbo.sp_query_store_modify_hints_by_query_hash, sorgu karmasıyla eşleşen tüm
sys.sp_query_store_set_hintsdeğerleri için döngüdesys.sp_query_store_clear_hintsvequery_idsistem saklı yordamlarını çağıran örnek bir saklı yordamdır.Bir sorguyu engellediğinizde zaten yürütülüyorsa, yürütmesi devam eder. Sorguyu durdurmak için KILL deyimini kullanabilirsiniz.
- Sorgu Deposu'nda, sonlandırılan sorguların yürütülmesi kaydedilmez. Sorgu henüz Sorgu Deposu'nda değilse, engelleyebileceğiniz bir
query_idsorgu elde etmek için sorgunun bitmesine ya da zaman aşımına uğramasına izin vermeniz gerekir.
- Sorgu Deposu'nda, sonlandırılan sorguların yürütülmesi kaydedilmez. Sorgu henüz Sorgu Deposu'nda değilse, engelleyebileceğiniz bir
Bir sorgu
ABORT_QUERY_EXECUTIONipucu tarafından engellendiğinde,execution_typegörünümündekiexecution_type_descve sütunları sırasıyla 4 ve İstisna olarak ayarlanır.Tüm Sorgu Deposu ipuçlarında olduğu gibi,
ALTERipucunu ayarlamak veABORT_QUERY_EXECUTIONipucunu temizlemek için veritabanında izninizin olması gerekir.
Sorgu Deposu İpuçlarıyla İlgili Dikkat Edilmesi Gerekenler
Sorgu Deposu ipuçlarını dağıtırken aşağıdaki senaryoları göz önünde bulundurun.
Veri dağıtımı değişiklikleri
Plan kılavuzları, Sorgu Deposu aracılığıyla zorlanan planlar ve Sorgu Deposu ipuçları, iyileştiricinin karar verme sürecini geçersiz kılar. Sorgu Deposu ipucu şu anda yararlı olabilir, ancak gelecekte yararlı olmayabilir. Örneğin, bir Sorgu Deposu önerisi önceki veri dağıtımında bir sorguya yardımcı olduysa, büyük ölçekli DML işlemlerinin verileri değiştirmesi durumunda bu ters etki yaratabilir. Yeni bir veri dağıtımı, iyileştiricinin ipucundan daha iyi bir karar vermesine neden olabilir. Bu senaryo, plan davranışını zorlamanın en yaygın sonucudur.
Sorgu Deposu ipuçları stratejinizi düzenli olarak yeniden değerlendirme
Aşağıdaki durumlarda mevcut Sorgu Deposu ipuçları stratejinizi yeniden değerlendirin:
- Bilinen büyük veri dağıtımı değişikliklerinin ardından.
- Veritabanı için kullanılabilir kaynaklar değiştiğinde. Örneğin, Azure SQL Veritabanınızın, SQL Yönetilen Örneğinizin veya SQL Server sanal makinenizin işlem boyutu değiştiğinde.
- Plan düzeltmenin kalıcılaştığı yer. Sorgu Deposu ipuçları en iyi kısa vadeli düzeltmeler için kullanılır.
- Beklenmeyen performans regresyonları.
Geniş etki potansiyeli
Sorgu Deposu ipuçları parametre kümesi, kaynak uygulama, kullanıcı veya sonuç kümesinden bağımsız olarak sorgunun tüm yürütmelerini etkiler. Yanlışlıkla performans gerilemesi durumunda, sys.sp_query_store_set_hints ile oluşturulan Sorgu Deposu ipuçları sys.sp_query_store_clear_hintsile kolayca kaldırılabilir.
Sorgu Deposu ipuçlarını üretime uygulamadan önce görev açısından kritik veya hassas sistemler için test değişikliklerini dikkatle yükleyin.
Zorlamalı parametreleştirme ve YENIDEN DERLE ipucu desteklenmiyor
RECOMPILE
PARAMETRELEME veritabanı seçeneği FORCED olarak ayarlandığında Sorgu Deposu ipuçlarıyla sorgu ipucunun uygulanması desteklenmez. Daha fazla bilgi için bkz. Zorlamalı ParametreleştirmeKullanma Yönergeleri.
İpucu RECOMPILE , veritabanı düzeyinde ayarlanmış zorlamalı parametreleme ile uyumlu değildir. Veritabanı zorlamalı parametreleştirme kullanıyorsa ve RECOMPILE ipucu sorgu için Sorgu Deposu'nda ayarlanan ipuçları dizesinin bir parçasıysa, Veritabanı Altyapısı ipucunu yoksayar RECOMPILE ve belirtilirse diğer ipuçlarını uygular. Ayrıca, Temmuz 2022'den itibaren Azure SQL Veritabanı'nda, RECOMPILE ipucunun yoksayıldığını belirten bir uyarı (hata kodu 12461) verilir.
Hangi sorgu ipuçlarının uygulanabileceği hakkında bilgi için bkz. Desteklenen sorgu ipuçları.