Aracılığıyla paylaş


sys.dm_exec_query_optimizer_info (Transact-SQL)

Şunlar için geçerlidir: Sql ServerAzure SQL VeritabanıAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Azure SQL Veritabanı

SQL Server sorgu iyileştiricisinin işlemi hakkında ayrıntılı istatistikler döndürür. Sorgu iyileştirme sorunlarını veya iyileştirmelerini belirlemek için iş yükünü ayarlarken bu görünümü kullanabilirsiniz. Örneğin, geçerli iş yükünün sorgu iyileştirmelerini ve ayarlama işlemi sırasında gözlemlenen değişiklikleri karşılaştırmak için toplam iyileştirme sayısını, geçen süre değerini ve son maliyet değerini kullanabilirsiniz. Bazı sayaçlar yalnızca SQL Server iç tanılama kullanımı için uygun veriler sağlar. Bu sayaçlar "Yalnızca iç" olarak işaretlenir.

Not

Bunu Azure Synapse Analytics veya Analytics Platform Sistemi'nden (PDW) çağırmak için sys.dm_pdw_nodes_exec_query_optimizer_infoadını kullanın. Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.

Ad Veri tipi Açıklama
counter nvarchar(4000) İyileştirici istatistikleri olayının adı.
occurrence bigint Bu sayaç için iyileştirme olayının oluşum sayısı.
value float Olay oluşumu başına ortalama özellik değeri.
pdw_node_id int Bu dağıtımın üzerinde olduğu düğümün tanımlayıcısı.

için geçerlidir: Azure Synapse Analytics, Analiz Platformu Sistemi (PDW)

İzinler

SQL Server 2019 (15.x) ve önceki sürümleri ve Azure SQL Yönetilen Örneği, VIEW SERVER STATE izin gerektirir.

SQL Server 2022 (16.x) ve sonraki sürümleri sunucuda VIEW SERVER PERFORMANCE STATE izin gerektirir.

Azure SQL Veritabanı Temel,S0ve S1 hizmet hedefleri ve elastik havuzlardaki veritabanları için, sunucu yöneticisi hesabı, Microsoft Entra yönetici hesabı veya ##MS_ServerStateReader##sunucu rolü üyeliği gerekir. Diğer tüm SQL Veritabanı hizmet hedeflerinde, veritabanındaki VIEW DATABASE STATE izni veya ##MS_ServerStateReader## sunucu rolü üyeliği gereklidir.

Açıklamalar

sys.dm_exec_query_optimizer_info aşağıdaki özellikleri (sayaçlar) içerir. Tüm oluşum değerleri kümülatiftir ve sistem yeniden başlatıldığında 0 olarak ayarlanır. Değer alanlarının tüm değerleri, sistem yeniden başlatıldığında NULL olarak ayarlanır. Ortalamayı belirten tüm değer sütunu değerleri, ortalama hesaplamasında payda ile aynı satırdaki oluşum değerini kullanır. SQL Server hem kullanıcı tarafından oluşturulan hem de sistem tarafından oluşturulan sorgular dahil olmak üzere dm_exec_query_optimizer_infodeğişikliklerini belirlediğinde tüm sorgu iyileştirmeleri ölçülür. Önceden önbelleğe alınmış bir planın yürütülmesi dm_exec_query_optimizer_infoiçindeki değerleri değiştirmez, yalnızca iyileştirmeler önemlidir.

Sayaç Olay Değer
optimizations Toplam iyileştirme sayısı. Uygulanamaz
elapsed time Toplam iyileştirme sayısı. Saniye cinsinden tek bir deyimin (sorgu) iyileştirmesi başına geçen ortalama süre.
final cost Toplam iyileştirme sayısı. dahili maliyet birimlerinde iyileştirilmiş bir plan için ortalama tahmini maliyet.
trivial plan Yalnızca iç Yalnızca iç
tasks Yalnızca iç Yalnızca iç
no plan Yalnızca iç Yalnızca iç
search 0 Yalnızca iç Yalnızca iç
search 0 time Yalnızca iç Yalnızca iç
search 0 tasks Yalnızca iç Yalnızca iç
search 1 Yalnızca iç Yalnızca iç
search 1 time Yalnızca iç Yalnızca iç
search 1 tasks Yalnızca iç Yalnızca iç
search 2 Yalnızca iç Yalnızca iç
search 2 time Yalnızca iç Yalnızca iç
search 2 tasks Yalnızca iç Yalnızca iç
gain stage 0 to stage 1 Yalnızca iç Yalnızca iç
gain stage 1 to stage 2 Yalnızca iç Yalnızca iç
timeout Yalnızca iç Yalnızca iç
memory limit exceeded Yalnızca iç Yalnızca iç
insert stmt INSERT deyimleri için iyileştirme sayısı. Uygulanamaz
delete stmt DELETE deyimleri için iyileştirme sayısı. Uygulanamaz
update stmt UPDATE deyimleri için iyileştirme sayısı. Uygulanamaz
merge stmt MERGE deyimleri için iyileştirme sayısı. Uygulanamaz
contains subquery En az bir alt sorgu içeren bir sorgu için iyileştirme sayısı. Uygulanamaz
unnest failed Yalnızca iç Yalnızca iç
tables Toplam iyileştirme sayısı. Sorgu başına başvuruda olunan ortalama tablo sayısı iyileştirildi.
hints Bir ipucunun kaç kez belirtildiği. Sayılan ipuçları şunlardır: JOIN, GROUP, UNION ve FORCE ORDER sorgu ipuçları, FORCE PLAN ayarlama seçeneği ve birleştirme ipuçları. Uygulanamaz
order hint Katılma siparişinin zorlanma sayısı. Bu sayaç FORCE ORDER ipucuyla sınırlı değildir. INNER HASH JOINgibi bir sorgu içinde birleştirme algoritması belirtmek, birleştirme sırasını da zorlayarak sayacı artırır. Uygulanamaz
join hint Birleştirme algoritmasının birleştirme ipucu tarafından zorlanma sayısı. FORCE ORDER sorgu ipucu bu sayacı artırmaz. Uygulanamaz
view reference Sorguda bir görünüme başvuru sayısı. Uygulanamaz
remote query Sorgunun dört bölümlü ada veya OPENROWSET sonucuna sahip bir tablo gibi en az bir uzak veri kaynağına başvurduğu iyileştirme sayısı. Uygulanamaz
maximum DOP Toplam iyileştirme sayısı. İyileştirilmiş bir plan için ortalama etkin MAXDOP değeri. Varsayılan olarak, etkin MAXDOPen yüksek paralellik derecesi sunucu yapılandırma seçeneği tarafından belirlenir ve belirli bir sorgu için MAXDOP sorgu ipucunun değeriyle geçersiz kılınabilir.
maximum recursion level sorgu ipucuyla 0'den büyük bir MAXRECURSION düzeyinin belirtildiği iyileştirme sayısı. En yüksek özyineleme düzeyinin sorgu ipucuyla belirtildiği iyileştirmelerdeki ortalama MAXRECURSION düzeyi.
indexed views loaded Yalnızca iç Yalnızca iç
indexed views matched Bir veya daha fazla dizinlenmiş görünümün eşleştirildiği iyileştirme sayısı. Eşleşen ortalama görünüm sayısı.
indexed views used Eşleştirildikten sonra çıkış planında bir veya daha fazla dizinlenmiş görünümün kullanıldığı iyileştirme sayısı. Kullanılan ortalama görünüm sayısı.
indexed views updated Bir veya daha fazla dizine alınan görünümü koruyan bir plan oluşturan DML deyiminin iyileştirme sayısı. Tutulan ortalama görünüm sayısı.
dynamic cursor request Dinamik imleç isteğinin belirtildiği iyileştirmelerin sayısı. Uygulanamaz
fast forward cursor request hızlı imleç isteğinin belirtildiği iyileştirmelerin sayısı. Uygulanamaz

Örnekler

A. İyileştirici yürütme istatistiklerini görüntüleme

Bu SQL Server örneği için geçerli iyileştirici yürütme istatistikleri nelerdir?

SELECT * FROM sys.dm_exec_query_optimizer_info;

B. Toplam iyileştirme sayısını görüntüleme

Kaç iyileştirme gerçekleştirilir?

SELECT occurrence AS Optimizations
FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'optimizations';

C. İyileştirme başına geçen ortalama süre

İyileştirme başına geçen ortalama süre nedir?

SELECT ISNULL(value,0.0) AS ElapsedTimePerOptimization
FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'elapsed time';

D. Alt sorgular içeren iyileştirmelerin kesri

İyileştirilmiş sorguların hangi bölümü bir alt sorgu içeriyordu?

SELECT (
    SELECT CAST(occurrence AS FLOAT)
    FROM sys.dm_exec_query_optimizer_info
    WHERE counter = 'contains subquery'
) / (
    SELECT CAST(occurrence AS FLOAT)
    FROM sys.dm_exec_query_optimizer_info
    WHERE counter = 'optimizations'
) AS ContainsSubqueryFraction;

E. İyileştirme sırasındaki ipuçlarının toplam sayısını görüntüleme

Sorgu ipucu olarak FORCE ORDER eklendiğinde kaç ipucu sayılır?

-- Check hint count before query execution
SELECT ISNULL('', 0) AS [Before],
    [counter],
    occurrence
FROM sys.dm_exec_query_optimizer_info
WHERE [counter] IN (
    'hints',
    'order hint',
    'join hint'
);

SELECT poh.PurchaseOrderID,
    poh.OrderDate,
    pod.ProductID,
    pod.DueDate,
    poh.VendorID
FROM Purchasing.PurchaseOrderHeader AS poh
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod
    ON poh.PurchaseOrderID = pod.PurchaseOrderID
OPTION (
    FORCE ORDER,
    RECOMPILE
);

-- check hint count after query execution
SELECT ISNULL('', 0) AS [After],
    [counter],
    occurrence
FROM sys.dm_exec_query_optimizer_info
WHERE [counter] IN (
    'hints',
    'order hint',
    'join hint'
);