我有一个基于Web的应用程序,允许用户使用简化的脚本语言和GUI创建自己的复杂查询。问题是 - 有时我的用户很好,不那么明亮。通常,他们会创建一个执行大量连接的查询,或者对大型数据集进行无意义的比较,这些数据集会快速消耗机器上的大部分可用资源。实际上,少数人破坏了其他所有人的聚会。培训或禁止这些“特殊”用户不是一种选择。
所以这是我的问题:是否有任何数据库(NoSQL或SQL,或任何真正的)支持基于每个查询的资源限制?
限制CPU利用率是最低限度的,但其他约束如执行时间,内存使用和行返回限制也会很好。如果我能以编程方式指定限制,那么我可以特别方便,以便我可以针对我的问题用户。
编辑:开源和/或免费产品的额外积分。
EDIT2 :发现了一些相关问题,明确表示Oracle支持某种资源限制方案,但还有其他产品吗?只是Oracle和SQL Server?
https://serverfault.com/questions/124158/throttle-or-limit-resources-used-by-a-user-in-a-database Is there a way to throttle or limit resources used by a user in Oracle?
答案 0 :(得分:1)
SQL Server 2008支持资源调控器:
资源调控器是一项新技术 在SQL Server 2008中,您可以使用 管理SQL Server工作负载和 通过指定限制来限制资源 传入的资源消耗 要求。在资源调控器中 上下文,工作量是一组 类似大小的查询或请求 可以而且应该被视为一个 单一实体。这不是一个 要求,但更均匀 工作负载的资源使用模式 是的,你可能会受益越多 源自资源调控器。 可以重新配置资源限制 实时,对影响最小 正在执行的工作负载。
资源调控器提供:
分类传入连接并路由其工作负载的能力 到特定的群体。
监控组中每个工作负载的资源使用情况的能力。
能够池化资源并设置特定于池的CPU使用限制 和内存分配。这可以防止 或最小化概率 失控的查询。
将分组工作负载与特定池关联的功能 资源。
识别和设置工作负载优先级的能力。
答案 1 :(得分:0)
资源限制可能会缓解您的问题,但我认为问题在于情况是资源的不可预测使用。
当数据库执行查询时,数据库需要将数据加载到内存中并锁定资源以保持状态的一致性。 无论约束系统能做什么,数据库内部机制中的不可预测的行为是您应该关注的最危险的事情。
如果我遇到这种情况,我会尝试找出用户真正需要的内容,并为其提供更精确的查询(在某些表格或某些数据条件下)。
但是,如果无法做到,我会尝试为重度用户克隆(复制)数据库。