Apakah SQL Server 2008 menyimpan tanggal pembuatan rencana eksekusi?

13

Kami baru saja memutakhirkan aplikasi yang kami gunakan, yang melibatkan memodifikasi skema untuk database. Perubahan ini bisa memaksa rencana eksekusi yang di-cache dibuang. Jika SQL Server terpaksa membuat banyak paket baru, ini bisa memperlambat pengalaman pengguna. Saya ingin mencari tahu apakah ini masalahnya.

Jadi, pertanyaan saya adalah, apakah SQL Server 2008 menyimpan tanggal pembuatan rencana eksekusi yang di-cache? Tampilan manajemen sys.dm_exec_cached_planstidak memiliki bidang tanggal, jadi saya kira tidak.

Eugene M
sumber

Jawaban:

12

Itu tidak disimpan di sys.dm_exec_cached_plans, juga tidak dimakamkan di mana saja dalam XML rencana yang dapat saya temukan. Namun ada informasi yang berguna dalam DMV lain.

Untuk prosedur tersimpan, kami dapat memperoleh waktu ketika sebuah rencana di-cache dari sys.dm_exec_procedure_stats:

SELECT TOP(250) 
    p.name AS [SP Name]
    , ps.execution_count
    , ps.cached_time
FROM 
    sys.procedures p WITH (NOLOCK)
INNER JOIN 
    sys.dm_exec_procedure_stats ps WITH (NOLOCK)
ON  p.[object_id] = ps.[object_id]
WHERE 
    ps.database_id = DB_ID()
ORDER BY 
    ps.cached_time DESC 
OPTION 
    (RECOMPILE);

Untuk kueri ad-hoc, ada waktu pembuatan di sys.dm_exec_query_stats:

SELECT TOP(250) 
    st.[text] AS [QueryText]
    , qs.execution_count
    , qs.creation_time
FROM 
    sys.dm_exec_cached_plans cp WITH (NOLOCK)
INNER JOIN
    sys.dm_exec_query_stats qs WITH (NOLOCK)
ON  qs.plan_handle = cp.plan_handle
CROSS APPLY 
    sys.dm_exec_sql_text(cp.plan_handle) st
WHERE 
    cp.objtype = N'Adhoc' 
ORDER BY 
    qs.creation_time DESC 
OPTION 
    (RECOMPILE);

Menurut @SqlKiwi ... perubahan dari creation_time ke cached_time hanya karena prosedur dan pemicu ditambahkan pada 2008 dan kesempatan diambil untuk memilih nama yang lebih deskriptif. Waktu yang dibuat / di-cache mencerminkan kompilasi terakhir, bukan waktu pembuatan rencana asli.

Mark Storey-Smith
sumber