详细说明: SQL Server 2012。 多租户数据库架构。
我遇到问题,用户生成临时报告查询干扰我的SQL框。
典型报告可能包括7个表格(从10k行到超过500k不等) 行),5个WHERE子句和2个排序过滤器。这些查询,你可以 想象一下,相当昂贵,可能需要几分钟。问题是 这些查询将最大化SQL CPU,并可占用超过20GB的tempdb 空间。因此导致使用数据库的每个其他应用程序超时。
由于这些是用户生成的报告,因此我无法真正调整查询的性能。在2000多个客户端上升,为每个客户提供自己的一组视图或模式是不可能的。
我的问题是如何调整我的数据库以进行即席查询或以某种方式限制查询,以便它不会占用所有服务器资源?截至目前,如果有人运行大报告,整个服务器将挂起,直到我重置SQL服务。显然这是不可持续的。
对于昂贵的查询多租户,是否有最佳做法 数据库?
编辑:
我有一个可以复制问题的查询,但是如果我在我的本地开发服务器上运行它,tempDB会增长相同,但是这个过程不会像在我的AWS实例上那样耗尽CPU。 (本地3%cpu vs EC2 m3.large 58%)。
本地CPU- Intel Xeon E3-1230 V2
EC2 CPU- Intel Xeon E5-2670 V2
从我所看到的,所有服务器设置都完全相同。
答案 0 :(得分:0)
我们公司遇到了类似的问题。我们使用多管齐下的解决方案来控制临时失控查询。它可能/可能对您没用。简而言之,我们的设计是:
这是一个全面的解决方案,您可以根据需要自定义和部署。