我经营着一个在线摄影社区,似乎该网站在数据库访问方面有所收获,有时会超时。

我认为自己是相当有能力编写SQL查询和设计表格,但绝不是DBA ...因此问题。

一些背景知识:

  1. 我的网站和SQL服务器正在远程主机上运行。我从Visual Studio更新ASP.NET代码,通过SQL Server Mgmt更新SQL。 Studio Express。我没有物理访问服务器。

  2. 我所有的存储过程(我想我得到了所有这些)都包含在交易中。

  3. 此时主表只有9400条记录。我每晚在这张桌子上添加12条新记录。

  4. 此主表上有一个视图,它将来自其他几个表的数据汇总到一个视图中。

  5. 次要表是较小的记录,但更多的记录。 70,000合1,115,000合一。这些是#3中项目的评论和评级记录。

  6. 索引位于最需要的字段上。我将它们设置为大表上的自动重新计算统计。

  7. 当网站停止运行时,如果我运行代码来清除事务日志,更新统计信息,重建主视图,以及重建存储过程以获取注释,则返回速度。但是,我必须手动执行此操作。

    可悲的是,我的用户对这些问题感到沮丧,他们的参与减少了。

    所以我的问题是......在远程环境中,设置和安排维护计划以保持我的SQL数据库运行达到峰值的最佳方法是什么?

    非常感谢! KLK

有帮助吗?

解决方案

您无需将维护任务设置为维护计划。

只需创建一个存储过程,执行您希望执行的维护任务,索引重建,统计更新等。

然后创建一个调用存储过程的作业。可以将作业配置为按照您希望的时间表运行。

要创建作业,请使用过程sp_add_job。

要创建计划,请使用过程sp_add_schedule。

我希望我所详述的内容清晰易懂,但如果您需要进一步的帮助,请随时给我留言。

干杯,约翰

其他提示

我的直觉说你做错了什么。听起来有点像你听到的故事,除非你每晚重启服务器,否则某些系统无法熬夜: - )

您的查询出了问题,您拥有的行数几乎总是与性能无关,而且您的数据库无论如何都非常小。我对SQL服务器不太熟悉,但我想它有一些非常好的查询分析工具。我还想象它有一种记录慢查询的方法。

我听起来确实缺少索引。当然你可能认为你已经添加了正确的索引,但在你验证它们被使用之前,它并不重要。也许你认为你有正确的,但你的问题建议不然。

首先,弄清楚如何记录您的查询。很有可能你在做一些索引修复的顺序扫描时有一个杀手。

其次,你可能会有一堆小查询而不是杀死它。例如,您可能有一些“用户”每次从user_id查找用户名时访问数据库的对象。查找您要查询数据库一百次的位置并将其替换为缓存 - 即使该缓存“缓存”也是如此。只不过是一个在请求结束时被擦除的私有变量。

底线是,我真的怀疑它是SQL Server中配置错误的东西。我的意思是,如果你因为系统停止而每晚都要重启你的服务器,你会责怪系统或你的代码吗?在这里同样的交易...学习SQL Server提供的工具,我敢打赌它们很漂亮: - )

所有人都说,一旦你接受了你做错了什么,就享受这个过程吧。对我来说,没有什么比优化慢速数据库查询更有趣。令人惊讶的是,您可以使用10秒的运行时间进行查询,并将其转换为具有50毫秒运行时间且具有单个,良好放置索引的查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top