2

我经营着一个在线摄影社区,似乎该网站在数据库访问方面陷入了爬行,有时会超时。

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

一些背景:

  1. 我的站点和 SQL 服务器正在远程主机上运行。我通过 SQL Server Mgmt 从 Visual Studio 和 SQL 更新 ASP.NET 代码。工作室快车。我没有对服务器的物理访问权限。

  2. 我所有存储的过程(我想我都得到了)都包含在事务中。

  3. 此时主表只有9400条记录。我每晚向该表添加 12 条新记录。

  4. 这个主表上有一个视图,它将其他几个表中的数据汇集到一个视图中。

  5. 辅助表是较小的记录,但更多。一个是 70,000,另一个是 115,000。这些是#3 中项目的评论和评分记录。

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

当站点停止运行时,如果我运行代码来清除事务日志、更新统计信息、重建主视图以及重建存储过程以获取评论,速度就会恢复。但是,我必须手动执行此操作。

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

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

非常感谢!KLK

4

2 回答 2

2

我的直觉说你做错了什么。这听起来有点像您听到的那些故事,除非您每晚重新启动服务器,否则某些系统无法保持正常运行:-)

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

我真的听起来像您缺少索引。当然,您可能认为您已经添加了正确的索引,但在您确认正在使用之前,这并不重要。也许你认为你有正确的,但你的查询表明不是这样。

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

其次,您可能有一堆小查询正在杀死它。例如,您可能有一些“用户”对象,每次您从 user_id 查找用户名时都会访问数据库。寻找你查询数据库一百次的地方并用缓存替换它——即使那个“缓存”只不过是一个在请求结束时被擦除的私有变量。

底线是,我真的怀疑它在 SQL Server 中配置错误。我的意思是,如果你因为系统停顿而不得不每晚重新启动服务器,你会责怪系统还是你的代码?同样的交易......学习 SQL Server 提供的工具,我敢打赌它们非常漂亮:-)

话虽如此,一旦你承认自己做错了什么,享受这个过程。对我来说,没有什么比优化慢速数据库查询更有趣了。令人惊奇的是,您可以使用 10 秒的运行时间将其转换为具有 50 毫秒运行时间的查询,并使用一个放置良好的索引。

于 2009-03-02T17:42:07.423 回答
0

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

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

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

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

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

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

干杯,约翰

于 2009-03-02T17:01:12.577 回答