最近,我遇到了一个情况,我被请去帮助管理一个托管系统,在这个系统中,我们为客户托管我们自己的产品。每个客户都被赋予一个特定 SQL 实例的唯一用户,我们正在运行多个实例,但一个实例可能有 50 到 100 个用户。我们还允许合作的第三方供应商运行软件,这些软件也可以访问同一个客户的数据库,就像我们自己的软件允许同一个用户访问数据库一样。然而,我遇到的情况是,第三方程序通常实施得不好,会消耗大量的 CPU,使客户陷入困境。我知道,使用资源管理器,你可以限制特定用户可以访问的资源量。但是,我想知道是否有办法限制特定程序名称可以访问的资源,或者将其设置为较低的优先级?这些第三方应用程序的运行时间有限,所以我无法进一步延长应用程序的时间。到目前为止,我还没有找到任何方法来限制特定程序访问 SQL 时的资源或优先级,我想知道是否有任何资源可以提供我搜索不到的此类信息?
答案1
我读了一些资料,从表面上看,使用资源管理器,您可以对每个会话/连接进行分类并将其分配给特定的资源池。资源池可以根据您的需要限制资源。但是,为了实现这一点,您需要定义一个分类器函数,该函数将查看会话的属性并确定连接属于哪个资源池。
您可以使用APP_NAME()
SQL 中的函数(在分类器函数内)来获取正在建立连接的应用程序名称。然后将其分配给分配了较少资源的资源池。
参考链接:
资源管理器 -https://msdn.microsoft.com/en-us/library/bb933866(v=sql.105).aspx
创建并测试分类器用户定义函数 -https://msdn.microsoft.com/en-us/library/cc645892(v=sql.105).aspx