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ı etkileyen veya kullanıcının erişimi olan diğer veritabanları hakkındaki bilgileri kullanıma sunan 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ü | Description |
|---|---|---|
name |
nvarchar(4000) | Önerinin benzersiz adı. |
type |
nvarchar(4000) | Öneriyi oluşturan otomatik ayarlama seçeneğinin adı, örneğin, FORCE_LAST_GOOD_PLAN. |
reason |
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. |
score |
int | Bu önerinin 0-100 ölçeği üzerindeki tahmini değeri veya etkisi (ne kadar büyük ise o kadar iyi). |
details |
nvarchar(max) | Öneri hakkında daha fazla ayrıntı içeren bir JSON belgesi. Aşağıdaki alanlar kullanılabilir.planForceDetails:- queryId
-
query_id değerini seçin.- regressedPlanId
-
plan_id gerilemiş planın.- 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 tüketilen ortalama CPU süresi (mikrosaniye olarak).- regressedPlanCpuTimeStddev - Regresyon algılanana kadar gerileyen sorgu tarafından tüketilen CPU süresinin standart sapması.- recommendedPlanId
-
plan_id zorunlu olması gereken planın.- 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 (mikrosaniye 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
tarafından sys.dm_db_tuning_recommendations döndürülen bilgiler, veritabanı altyapısı olası bir sorgu performansı regresyonu tanımladığında ve kalıcı olmadığında güncelleştirilir. Veritabanı altyapısı, önerileri yalnızca yeniden başlatılana kadar tutar.
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 bir tablonun şeması değiştiğinden önerinin süresi doldu. Yeni şemada yeni bir sorgu planı regresyonu algılanırsa yeni bir ö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 bir ö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.
ALTER DATABASE SET AUTOMATIC_TUNING deyimini kullanarak seçeneği etkinleştirin FORCE_LAST_GOOD_PLAN 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 gerilemesi olduğunu belirledi, ancak FORCE_LAST_GOOD_PLAN seçenek etkinleştirilmedi. Daha fazla bilgi için bkz. ALTER DATABASE SET AUTOMATIC_TUNING. Ö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 yordamı 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 yordamı 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 yordamı 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] BIGINT '$.queryId',
regressed_plan_id BIGINT '$.regressedPlanId',
last_good_plan_id BIGINT '$.recommendedPlanId'
) AS details
WHERE JSON_VALUE(STATE, '$.currentValue') = 'Active';
Örnek 2
Aşağıdaki sorgu, belirli bir sorgu için iyi bir plan yapmayı zorlayan oluşturulan Transact-SQL betiğini ve tahmini kazanç hakkında ek bilgileri alır:
SELECT reason,
score,
JSON_VALUE(details, '$.implementationDetails.script') AS script,
planForceDetails.*,
(regressedPlanExecutionCount + recommendedPlanExecutionCount) * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage) / 1000000 AS estimated_gain,
IIF (regressedPlanErrorCount > recommendedPlanErrorCount, 'YES', 'NO') AS error_prone
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON (details, '$.planForceDetails') WITH (
[query_id] BIGINT '$.queryId',
regressedPlanId BIGINT '$.regressedPlanId',
recommendedPlanId BIGINT '$.recommendedPlanId',
regressedPlanErrorCount INT,
recommendedPlanErrorCount INT,
regressedPlanExecutionCount INT,
regressedPlanCpuTimeAverage FLOAT,
recommendedPlanExecutionCount INT,
recommendedPlanCpuTimeAverage FLOAT
) AS planForceDetails;
Örnek 3
Aşağıdaki sorgu, 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,
JSON_VALUE(STATE, '$.currentValue') AS current_state,
JSON_VALUE(STATE, '$.reason') AS current_state_reason,
JSON_VALUE(details, '$.implementationDetails.script') AS script,
(regressedPlanExecutionCount + recommendedPlanExecutionCount) * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage) / 1000000 AS estimated_gain,
IIF (regressedPlanErrorCount > recommendedPlanErrorCount, 'YES', 'NO') AS error_prone
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON (details, '$.planForceDetails') WITH (
[query_id] BIGINT '$.queryId',
regressedPlanId BIGINT '$.regressedPlanId',
recommendedPlanId BIGINT '$.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 kullanabileceğiniz JSON işlevleri hakkında daha fazla bilgi için bkz. SQL Server'da JSON verileri.
Permissions
SQL Server 2022 (16.x) ve önceki sürümler SQL Server'da izin gerektirir VIEW SERVER STATE .
SQL Server 2022 (16.x) ve Azure SQL Veritabanı sunucuda izin gerektirir VIEW SERVER PERFORMANCE STATE .