Performanstaki eğilimleri izlememize ve optimizasyon gerektiren alanları belirlememize izin vermek için, sorgu planlarıyla birlikte pahalı çalışan sorguların bir kaydını tutuyorum.
Ancak, sorgu planlarının çok fazla yer kapladığı noktaya geliyoruz (tüm planı her sorguya karşı sakladığımız için).
Bu nedenle başka bir tabloya QueryPlanHash ve QueryPlan ayıklayarak mevcut verileri normalleştirmeye çalışıyorum.
CREATE TABLE QueryPlans
(
QueryPlanHash VARBINARY(25),
QueryPlan XML,
CONSTRAINT PK_QueryPlans PRIMARY KEY
(
QueryPlanHash
)
);
Tanımı olarak query_plan_hash
in sys.dm_exec_query_stats
bir ikili alan (ve düzenli olarak yeni veri ekleme olacak), ben kullanıyordum VARBINARY
benim yeni tabloda veri türü için.
Ancak, aşağıdaki ekleme başarısız ...
INSERT INTO QueryPlans
( QueryPlanHash, QueryPlan )
SELECT queryplanhash, queryplan
FROM
(
SELECT
p.value('(./@QueryPlanHash)[1]', 'varchar(20)') queryplanhash,
QueryPlan,
ROW_NUMBER() OVER (PARTITION BY p.value('(./@QueryPlanHash)[1]', 'varchar(20)') ORDER BY DateRecorded) rownum
FROM table
CROSS APPLY QueryPlan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple[@QueryPlanHash]') t(p)
) data
WHERE rownum = 1
.... hata ile
Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.
Sorun sorgu planı karma zaten ikili biçimidir, ancak XML Sorgu Planı örn.
0x9473FBCCBC01AFE
ve BINARY'ye DÖNÜŞTÜR tamamen farklı bir değer verir
0x3078393437334642434342433031414645
İkili XQuery seçiminde değer tanımı değiştirmeyi denedim, ancak sonra hiçbir değer döndürdü.
0x9473FBCCBC01AFE
XML sorgu planından değerini a VARBINARY
yerine a olarak nasıl ayıklayabilirim VARCHAR
?
,1
eksik olduğum şey buydu. Beklediğimden daha kolaydı! Teşekkürler!