繁体   English   中英

SQL 服务器维护建议?

[英]SQL Server Maintenance Suggestions?

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

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

一些背景:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

干杯,约翰

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM