2015-11-04 78 views
1

我们的LOB应用程序中有一些功能允许用户定义自己的查询以检索应用程序中报告和列表的数据。我们遇到的问题是,有时他们写的这些查询非常沉重(有时是错误的),并导致服务器上的大量负载。创建SQL Server沙箱

删除这些功能是没有问题的,但我想知道是否有办法在SQL Server中创建某种类型的沙箱,以便它们执行的查询只分配一定数量的资源来执行,因此不会让他们有机会对使用该系统的其他人造成任何损害。有任何想法吗?

+0

“,它允许用户定义自己的查询来检索应用程序中报告和列表的数据” - 这是您的第一个错误!为什么?因为“...有时这些查询他们写了一个非常沉重的(有时是错误的)”除了你必须小心SQL注入和你的用户可以自由地编写可怜的查询(并且可能不正确)之外,查找'资源总监“。 –

+0

这听起来像你想看看资源调控https://msdn.microsoft.com/en-us/library/bb933866(v=sql.120).aspx –

回答

0

资源调控器已在上述评论中提及。我能想到的另一个解决方案是使用SQL Server高可用性组

在我工作的最后一个地方有这样的设置。有一个主服务器负责将所有事务写入数据库的事务,并在主服务器出现故障时使用辅助服务器。除此之外,我们还向可用性组添加了只读副本。

这样做的主要目的是在主服务器停机的情况下,您将自动转移到另一个副本。将应用程序连接到数据库时,将其连接到可用性组而不是特定的服务器。然后,如果服务器出现故障,您将自动转到辅助服务器。但是,它也可以用于优化应用程序功能,只需要通过卸载主服务器进行只读访问。

,我们知道这只是需要只读访问那么我们就可以连接到可用性组,并添加到连接字符串ApplicationIntent=READONLY这意味着我们正在使用的只读副本而不是主,留下的任何功能常规交易的主要资料。 (IIRC,默认情况下,主要将接受任何读/写连接,所以你必须配置主不接受只读连接)

无论如何,阅读了有关这个开球点是在这里:https://msdn.microsoft.com/en-us/library/ms190202.aspx