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 2017 (14.x) ve sonraki sürümleri
Microsoft Fabric'te
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği SQL veritabanı
Otomatik ayarlama önerileri hakkında ayrıntılı bilgi döndürür. Daha fazla bilgi için bkz. Otomatik ayarlama
Daha fazla bilgi için bkz. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde izleme ve performans ayarlama.
Azure SQL Veritabanı'nda dinamik yönetim görünümleri, veritabanı kapsamasını etkileyecek bilgileri veya kullanıcının erişimi olan diğer veritabanları hakkındaki bilgileri kullanıma sunmaz. Bu bilgilerin açığa çıkmasını önlemek için, bağlı kiracıya ait olmayan verileri içeren her satır filtrelenir.
| Sütun adı | Veri türü | Açıklama |
|---|---|---|
| name | nvarchar(4000) | Önerinin benzersiz adı. |
| type | nvarchar(4000) | Öneriyi oluşturan otomatik ayarlama seçeneğinin adı, örneğin, FORCE_LAST_GOOD_PLAN |
| neden | nvarchar(4000) | Bu önerinin neden sağlandığının nedeni. |
| valid_since | datetime2 | Bu öneri ilk kez oluşturuldu. |
| last_refresh | datetime2 | Bu önerinin en son oluşturulduğu zaman. |
| state | nvarchar(4000) | Önerinin durumunu açıklayan JSON belgesi. Aşağıdaki alanlar kullanılabilir: - currentValue - önerinin geçerli durumu.- reason - önerinin neden geçerli durumda olduğunu açıklayan sabit. |
| is_executable_action | bit | 1 = Öneri, Transact-SQL betiği aracılığıyla veritabanına karşı yürütülebilir. 0 = Öneri veritabanında yürütülemez (örneğin: yalnızca bilgi veya geri alınan öneri) |
| is_revertable_action | bit | 1 = Öneri Veritabanı altyapısı tarafından otomatik olarak izlenebilir ve geri döndürülebilir. 0 = Öneri otomatik olarak izlenemez ve geri döndürülemez. Yürütülebilir eylemlerin çoğu geri döndürülebilir. |
| execute_action_start_time | datetime2 | Önerinin uygulandığı tarih. |
| execute_action_duration | time | Yürütme eyleminin süresi. |
| execute_action_initiated_by | nvarchar(4000) |
User = Öneride kullanıcı tarafından el ile zorlanan plan.System = Sistem otomatik olarak uygulanan öneri. |
| execute_action_initiated_time | datetime2 | Önerinin uygulandığı tarih. |
| revert_action_start_time | datetime2 | Önerinin geri alındığı tarih. |
| revert_action_duration | time | Geri döndürme eyleminin süresi. |
| revert_action_initiated_by | nvarchar(4000) |
User = Kullanıcı el ile uygulanamayan önerilen plan.System = Sistem öneriyi otomatik olarak geri döndürüyor. |
| revert_action_initiated_time | datetime2 | Önerinin geri alındığı tarih. |
| Puan | int | 0-100 ölçeğinde bu öneri için tahmini değer/etki (ne kadar büyük ise o kadar iyi) |
| Şey | nvarchar(max) | Öneri hakkında daha fazla ayrıntı içeren JSON belgesi. Aşağıdaki alanlar kullanılabilir:planForceDetails- queryId - Gerileyen sorgunun query_id.- regressedPlanId - Gerileyen planın plan_id.- regressedPlanExecutionCount - Regresyon algılanana kadar gerileyen planlı sorgu yürütme sayısı.- regressedPlanAbortedCount - Gerileyen planın yürütülmesi sırasında algılanan hataların sayısı.- regressedPlanCpuTimeAverage - Regresyon algılanmasından önce regresyon sorgusu tarafından kullanılan ortalama CPU süresi (mikro saniye olarak).- regressedPlanCpuTimeStddev - Regresyon algılanana kadar gerileyen sorgu tarafından tüketilen CPU süresinin standart sapması.- recommendedPlanId - Zorlanması gereken planın plan_id.- recommendedPlanExecutionCount- Regresyon algılanmadan önce zorlanması gereken planlı sorgu yürütme sayısı.- recommendedPlanAbortedCount - Planın yürütülmesi sırasında algılanan ve zorlanması gereken hata sayısı.- recommendedPlanCpuTimeAverage - Zorlanması gereken planla yürütülen sorgu tarafından tüketilen ortalama CPU süresi (mikro saniye olarak) (regresyon algılanmadan önce hesaplanır).- recommendedPlanCpuTimeStddev Regresyon algılanana kadar gerileyen sorgu tarafından tüketilen CPU süresinin standart sapması.implementationDetails- method - Regresyonu düzeltmek için kullanılması gereken yöntem. Değer her zaman TSqlşeklindedir.- script - Önerilen planı zorlamak için yürütülmesi gereken Transact-SQL betik. |
Açıklamalar
Veritabanı altyapısı olası sorgu performansı regresyonu tanımladığında ve kalıcı olmadığında tarafından sys.dm_db_tuning_recommendations döndürülen bilgiler güncelleştirilir. Öneriler yalnızca veritabanı altyapısı yeniden başlatılana kadar tutulur.
sqlserver_start_time Son veritabanı altyapısı başlangıç zamanını bulmak için sys.dm_os_sys_info sütununu kullanın. Veritabanı yöneticileri, sunucu geri dönüşümünün ardından saklamak istediklerinde ayarlama önerisinin yedek kopyalarını düzenli aralıklarla oluşturmalıdır.
currentValue Sütundaki state alanda aşağıdaki değerler olabilir:
| Statü | Description |
|---|---|
Active |
Öneri etkin ve henüz uygulanmadı. Kullanıcı öneri betiğini alabilir ve el ile yürütebilir. |
Verifying |
Öneri Veritabanı Altyapısı tarafından uygulanır ve iç doğrulama işlemi zorlanan planın performansını gerileyen planla karşılaştırır. |
Success |
Öneri başarıyla uygulandı. |
Reverted |
Önemli bir performans kazancı olmadığından öneri geri döndürülür. |
Expired |
Önerinin süresi doldu ve artık uygulanamıyor. |
Sütundaki state JSON belgesi, önerinin neden geçerli durumda olduğunu açıklayan nedeni içerir. Neden alanındaki değerler:
| Reason | Description |
|---|---|
SchemaChanged |
Başvurulan tablonun şeması değiştirildiğinden önerinin süresi doldu. Yeni şemada yeni bir sorgu planı regresyonu algılanırsa yeni öneri oluşturulur. |
StatisticsChanged |
Başvurulan tablodaki istatistik değişikliği nedeniyle önerinin süresi doldu. Yeni istatistikler temelinde yeni bir sorgu planı regresyonu algılanırsa yeni öneri oluşturulur. |
ForcingFailed |
Önerilen plan sorguda zorlanamaz.
last_force_failure_reason Hatanın nedenini bulmak için sys.query_store_plan görünümünde öğesini bulun. |
AutomaticTuningOptionDisabled |
FORCE_LAST_GOOD_PLAN seçeneği doğrulama işlemi sırasında kullanıcı tarafından devre dışı bırakılır.
FORCE_LAST_GOOD_PLAN deyimini kullanarak seçeneği etkinleştirin veya sütundaki details betiği kullanarak planı el ile zorlayın. |
UnsupportedStatementType |
Plan sorguda zorlanamaz. Desteklenmeyen sorgulara örnek olarak imleçler ve INSERT BULK deyim verilebilir. |
LastGoodPlanForced |
Öneri başarıyla uygulandı. |
AutomaticTuningOptionNotEnabled |
Veritabanı Altyapısı olası performans regresyonunu FORCE_LAST_GOOD_PLAN belirledi, ancak seçenek etkinleştirilmedi. Bkz. ALTER DATABASE SET AUTOMATIC_TUNING (Transact-SQL). Öneriyi el ile uygulayın veya seçeneği etkinleştirin FORCE_LAST_GOOD_PLAN . |
VerificationAborted |
Yeniden başlatma veya Sorgu Deposu temizlemesi nedeniyle doğrulama işlemi durduruldu. |
VerificationForcedQueryRecompile |
Önemli bir performans artışı olmadığından sorgu yeniden derlendi. |
PlanForcedByUser |
Kullanıcı , sp_query_store_force_plan (Transact-SQL) yordamını kullanarak planı el ile zorunlu bıraktı. Kullanıcı açıkça bir planı zorlamaya karar verirse veritabanı altyapısı öneriyi uygulamaz. |
PlanUnforcedByUser |
Kullanıcı , sp_query_store_unforce_plan (Transact-SQL) yordamını kullanarak planı el ile kaldırmış. Kullanıcı önerilen planı açıkça geri döndürdiğinden, veritabanı altyapısı geçerli planı kullanmaya devam eder ve gelecekte bir plan regresyonu oluşursa yeni bir öneri oluşturur. |
UserForcedDifferentPlan |
Kullanıcı , sp_query_store_force_plan (Transact-SQL) yordamını kullanarak el ile farklı bir plana zorlandı. Kullanıcı açıkça bir planı zorlamaya karar verirse veritabanı altyapısı öneriyi uygulamaz. |
TempTableChanged |
Planda kullanılan geçici bir tablo değiştirilir. |
Sütundaki details istatistikler çalışma zamanı planı istatistiklerini (örneğin, geçerli CPU zamanı) göstermez. Öneri ayrıntıları regresyon algılama sırasında alınır ve Veritabanı Altyapısı'nın performans regresyonunu neden tanımladığını açıklar. Tam çalışma zamanı planı istatistiklerini bulmak için regressedPlanId sorgulamak için ve recommendedPlanId kullanın.
Ayarlama önerileri bilgilerini kullanma örnekleri
Örnek 1
Aşağıdaki örnek kod, belirli bir sorgu için iyi bir planı zorlayan oluşturulan Transact-SQL betiğini alır:
SELECT name,
reason,
score,
JSON_VALUE(details, '$.implementationDetails.script') AS script,
details.*
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON(details, '$.planForceDetails') WITH (
[query_id] INT '$.queryId',
regressed_plan_id INT '$.regressedPlanId',
last_good_plan_id INT '$.recommendedPlanId'
) AS details
WHERE JSON_VALUE(STATE, '$.currentValue') = 'Active';
Örnek 2
Aşağıdakiler, belirli bir sorgu için iyi bir planı zorlayan oluşturulan Transact-SQL betiğini ve tahmini kazanç hakkında ek bilgileri alır:
SELECT reason,
score,
script = JSON_VALUE(details, '$.implementationDetails.script'),
planForceDetails.*,
estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount) * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage) / 1000000,
error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES', 'NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON(Details, '$.planForceDetails') WITH (
[query_id] INT '$.queryId',
regressedPlanId INT '$.regressedPlanId',
recommendedPlanId INT '$.recommendedPlanId',
regressedPlanErrorCount INT,
recommendedPlanErrorCount INT,
regressedPlanExecutionCount INT,
regressedPlanCpuTimeAverage FLOAT,
recommendedPlanExecutionCount INT,
recommendedPlanCpuTimeAverage FLOAT
) AS planForceDetails;
Örnek 3
Aşağıdakiler, belirli bir sorgu için iyi bir plan ve sorgu metnini ve Sorgu Deposu'nda depolanan sorgu planlarını içeren ek bilgileri zorlayan oluşturulan Transact-SQL betiğini alır:
WITH cte_db_tuning_recommendations
AS (
SELECT reason,
score,
query_id,
regressedPlanId,
recommendedPlanId,
current_state = JSON_VALUE(STATE, '$.currentValue'),
current_state_reason = JSON_VALUE(STATE, '$.reason'),
script = JSON_VALUE(details, '$.implementationDetails.script'),
estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount) *
(regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage) / 1000000,
error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES', 'NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON(Details, '$.planForceDetails') WITH (
[query_id] INT '$.queryId',
regressedPlanId INT '$.regressedPlanId',
recommendedPlanId INT '$.recommendedPlanId',
regressedPlanErrorCount INT,
recommendedPlanErrorCount INT,
regressedPlanExecutionCount INT,
regressedPlanCpuTimeAverage FLOAT,
recommendedPlanExecutionCount INT,
recommendedPlanCpuTimeAverage FLOAT
)
)
SELECT qsq.query_id,
qsqt.query_sql_text,
dtr.*,
CAST(rp.query_plan AS XML) AS RegressedPlan,
CAST(sp.query_plan AS XML) AS SuggestedPlan
FROM cte_db_tuning_recommendations AS dtr
INNER JOIN sys.query_store_plan AS rp
ON rp.query_id = dtr.query_id
AND rp.plan_id = dtr.regressedPlanId
INNER JOIN sys.query_store_plan AS sp
ON sp.query_id = dtr.query_id
AND sp.plan_id = dtr.recommendedPlanId
INNER JOIN sys.query_store_query AS qsq
ON qsq.query_id = rp.query_id
INNER JOIN sys.query_store_query_text AS qsqt
ON qsqt.query_text_id = qsq.query_text_id;
Öneri görünümünde değerleri sorgulamak için kullanılabilecek JSON işlevleri hakkında daha fazla bilgi için bkz. Veritabanı Altyapısı'nda JSON Desteği .
Permissions
VIEW SERVER STATE SQL Server'da izin gerektirir.
VIEW DATABASE STATE Azure SQL Veritabanı'ndaki veritabanı için izin gerektirir.
SQL Server 2022 ve üzeri için izinler
VIEW SERVER PERFORMANCE STATE Sunucuda izin gerektirir.