我有一个已经在我的2人身上工作过的SP,仍然需要2分钟或更长时间才能运行。有没有办法让这些预运行和存储在缓存或其他地方,所以当我的客户需要在Web浏览器中查看这些数据时,他不想让自己或我自己挂上?保存/缓存存储过程结果以获得更好的性能? (SQL Server 2005)
我不是在靠近DBA的地方,所以我受到我雇用的人的摆布,以便为我解决这个问题,所以在前面有一点知识会帮助我。
我有一个已经在我的2人身上工作过的SP,仍然需要2分钟或更长时间才能运行。有没有办法让这些预运行和存储在缓存或其他地方,所以当我的客户需要在Web浏览器中查看这些数据时,他不想让自己或我自己挂上?保存/缓存存储过程结果以获得更好的性能? (SQL Server 2005)
我不是在靠近DBA的地方,所以我受到我雇用的人的摆布,以便为我解决这个问题,所以在前面有一点知识会帮助我。
如果确实需要很长时间才能运行,您可以安排使用SQL Agent运行进程,并将输出转到表中,然后更改Web应用程序以读取表而不是执行存储过程。您必须决定刷新的频率,并处理刷新时发生的请求,但也可以通过生成两个输出文件(一个用于最新刷新)和一个输出文件来处理。
但我会再看一下这个过程,看一下执行计划,看看它在哪里很慢,确保它没有进行全表扫描。
从“查询”菜单尝试“分析数据库引擎优化顾问中的查询”。 我通常将过程编写到一个新窗口中,取出查询定义部分并尝试临时表,常规表和表变量的不同组合。
您可以将结果集缓存在应用程序中而不是数据库中,或者在内存中保存数据表的实例,或者将其序列化到磁盘。它返回多少行? 在这里发布代码太长了吗?顺序
首选的解决方案:
OK首先第一件事情,索引:
其次,它的PROC使用下列性能杀手:
第三个
我建议你去购买你的开发者关于性能调优的书籍。
可能你的过程可能是固定的,但是如果没有看到代码,很难猜出问题可能是什么。
此查询的结果是否在线显示,即在浏览器中显示。如果是的话,你目前使用或正在使用哪种语言? – 2009-02-28 14:46:13
是的,它显示在网上 - 我使用.Net。我知道我可以在我的应用程序中缓存结果,但最初的调用需要几分钟的时间是一个真正的问题。 – Slee 2009-02-28 17:03:02