具有利用率约束的数据库

时间:2010-11-01 23:45:55

标签: database

我有一个基于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?

2 个答案:

答案 0 :(得分:1)

SQL Server 2008支持资源调控器:

  

资源调控器是一项新技术   在SQL Server 2008中,您可以使用   管理SQL Server工作负载和   通过指定限制来限制资源   传入的资源消耗   要求。在资源调控器中   上下文,工作量是一组   类似大小的查询或请求   可以而且应该被视为一个   单一实体。这不是一个   要求,但更均匀   工作负载的资源使用模式   是的,你可能会受益越多   源自资源调控器。   可以重新配置资源限制   实时,对影响最小   正在执行的工作负载。

     

资源调控器提供:

     
      
  • 分类传入连接并路由其工作负载的能力   到特定的群体。

  •   
  • 监控组中每个工作负载的资源使用情况的能力。

  •   
  • 能够池化资源并设置特定于池的CPU使用限制   和内存分配。这可以防止   或最小化概率   失控的查询。

  •   
  • 将分组工作负载与特定池关联的功能   资源。

  •   
  • 识别和设置工作负载优先级的能力。

  •   

Ref

答案 1 :(得分:0)

资源限制可能会缓解您的问题,但我认为问题在于情况是资源的不可预测使用。

当数据库执行查询时,数据库需要将数据加载到内存中并锁定资源以保持状态的一致性。 无论约束系统能做什么,数据库内部机制中的不可预测的行为是您应该关注的最危险的事情。

如果我遇到这种情况,我会尝试找出用户真正需要的内容,并为其提供更精确的查询(在某些表格或某些数据条件下)。

但是,如果无法做到,我会尝试为重度用户克隆(复制)数据库。