以下のクエリが実行されるのに1分以上かかる理由を誰かに教えてもらえますか?SQL Serverの実行時間が長い
私は下の行コメントをする場合:
AND sys.fn_hadr_backup_is_preferred_replica(d.name) = 1
をクエリが1秒未満で実行されます。
私はいくつかの代替案を探しています。
SELECT
DISTINCT @@SERVERNAME AS ServerName ,
d.name AS DatabaseName ,
'Diff Backups Not Performed Recently' AS Finding ,
'Last differential backup: ' + COALESCE(CAST(MAX(b.backup_finish_date) AS VARCHAR(25)),'never') AS Details
FROM master.sys.databases d
LEFT OUTER JOIN msdb.dbo.backupset b ON d.name COLLATE SQL_Latin1_General_CP1_CI_AS = b.database_name COLLATE SQL_Latin1_General_CP1_CI_AS
AND b.type = 'I'
AND b.server_name = SERVERPROPERTY('ServerName') /*Backupset ran on current server */
WHERE d.database_id <> 2
AND d.state NOT IN(1, 6, 10) /* Not currently offline or restoring, like log shipping databases */
AND d.is_in_standby = 0 /* Not a log shipping target database */
AND d.source_database_id IS NULL /* Excludes database snapshots */
AND b.user_name = 'tsmadmin'
AND sys.fn_hadr_backup_is_preferred_replica(d.name) = 1
GROUP BY d.name
HAVING MAX(b.backup_finish_date) <= DATEADD(dd, -2, GETDATE())
OR MAX(b.backup_finish_date) IS NULL;
使用のクロスが適用されますか? –
UDFは、実行速度が遅く、オプティマイザがクエリを実行するのを妨げるために有名です。 –
1つの方法は、列に関数を適用しないようにすることです。あなたの 'sys.fn_hadr_backup_is_preferred_replica'は何をしますか?決定的なのでインデックスに登録できますか?あなたの質問にそれを示すことができますか? –