VK_*_*217 1 performance sql-server-2008 sql-server linked-server query-performance
我有以下存储过程需要将近一个小时才能完成。结果集大约有 20 万台机器。
我所做的只是从链接服务器中提取一组 id,在本地服务器中删除这些 id,然后从远程服务器中提取这些 id 的所有详细信息并插入它们。INSERT 占 90%,DELETE 表占 9%,SELECT INTO 占 1%。
id 是主键/聚集索引。
DECLARE @ProcessDate DATETIME
SET @ProcessDate = CONVERT(VARCHAR(10), DATEADD(DAY, -3,
GETDATE()), 111)
SELECT DISTINCT id
INTO #temp_machines
FROM remote_server.db.dbo.table1
WHERE dt_modify >= @ProcessDate
DELETE FROM local_server.db.dbo.table2
WHERE id IN ( SELECT id FROM #temp_machines )
INSERT INTO local_server.db.dbo.table2
SELECT *
FROM remote_server.db.dbo.table1
WHERE id IN ( SELECT id FROM #temp_machines )
Run Code Online (Sandbox Code Playgroud)
有什么关于提高性能的建议吗?
第一步:确保有一些东西需要调整,并且您的查询不仅仅是被阻止。您可以使用sp_WhoIsActive或sp_BlitzFirst等免费工具(免责声明,我是 First Responder Kit 的贡献者)来执行此操作。
第二步:不要使用局部变量。
第三步:也许索引临时表会有所帮助。
第四步: 使用 sp_BlitzFirst检查您的等待统计数据(同样的免责声明,我对此做出了贡献,等等等等)。可能是所写的查询很好,但您遇到了其他一些问题,例如 tempdb 争用。
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |