我有一组用户可以访问Prod上的SSMS。我不允许撤销他们的访问权限,但每隔一段时间他们就会运行一个足够大的查询,以便临时文件占用C:\上的所有可用空间并崩溃服务器。
我正在寻找一种方法来将返回到任何SSMS连接的结果集大小限制为小于2gb或类似的限制。
我在2005年至2014年的所有版本上遇到此问题,因此欢迎任何或所有版本的解决方案。
目前我唯一想要解决这个问题的是大型临时结果文件的Nagios警报。
仅供参考我非常清楚这个问题有多糟糕,所以我宁愿不讨论为什么会出现这种情况。
答案 0 :(得分:1)
第1步是限制用户通过系统配置可以造成的损害。通常,在设置SQL Server时,您希望拥有4个不同的分区:
这样做不仅可以提高性能,还可以防止Logs或TempDB上的Autogrowth在您的操作系统分区上进行转储。您只在磁盘用完时才终止SQL Server实例,而不是操作系统本身。作为第一步,我将为您的Temp DB创建一个新分区并移动它:
至于实际限制它们可以运行的查询的大小,它并不那么简单。 SQL Server确实有一个资源调控器,它允许您按用户限制CPU利用率和磁盘利用率,但不限制查询中返回的数据总量。
最后,考虑一下他们试图通过如此大规模的查询来解决它们的问题。也许他们有不良联接导致笛卡尔结果,并没有意识到它。考虑为那些繁重的工作(主要表连接和其他)设置几个视图,这样他们就不再需要直接访问表(提示 - 提示 - 眨眼),你可以因为你控制了视图定义,所以更适当地管理他们在数据库中做了什么。