【发布时间】:2013-10-17 22:10:45
【问题描述】:
我有一个 ASP .NET 4.5 应用程序。维护页面上有一个文本框,允许管理用户编写直接针对 SQL Server 2008 数据库执行的 SQL。
有时,某个管理用户编写了一些低效的 SQL,SQL Server 进程开始耗尽服务器上的所有内存和 CPU 周期。然后我们必须启动和停止服务以使服务器再次响应。
有什么方法可以阻止这些查询消耗所有资源?这些查询返回的速度不足以让用户看到它们,因此可以取消查询。
编辑 我意识到阻止用户编写 SQL 查询会更好,但不幸的是我无法从应用程序中删除此功能。管理员用户不想接受教育。
【问题讨论】:
-
如果您将 max degree of parallelism 设置为无限制(或超过 1 个),您可以执行所有查询
MAXDOP 1以防止它们吃掉所有内核。 -
也就是说,我不知道有什么技术方法,除了限制连接上的CommandTimeout,或者监控和教育导致这些问题的人。
-
假设您有一个生产/登台设置,让管理员首先在登台上测试查询,这样重要的机器就不会被占用。即使在时间限制后终止查询,您也可能在此期间占用重要资源(在生产中不好)。
-
我们鼓励管理员在暂存系统上测试查询,但我们不能强迫他们这样做。
标签: asp.net sql sql-server performance