sys.dm_exec_query_optimizer_info (Transact-SQL)
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_info
adı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_info
değ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_info
iç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 JOIN gibi 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 MAXDOP en 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'
);
İlgili içerik
- dinamik yönetim görünümlerini ve işlevlerini (Transact-SQL)
- Yürütmeyle İlgili Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)