暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式数据库学习Note197:OceanBase社区版中,如何解决租户请求队列积压的问题?

欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/


OceanBase是多租户的数据库集群,租户之间通过线程和协程分配调度 CPU 资源。当集群租户请求量升高,或者复杂的查询处理,CPU 资源不足就会表现为队列请求积压的情况,主要现象为 SQL 响应时间变长,处理响应速度变慢等,本文针对这种情况介绍了应急处理方法。

应急处理方法

当目前集群中租户遇到队列请求积压的情况时,我们可以从以下几个方面入手处理:

  1. 尝试扩容租户 CPU 资源,或切主到负载较小的机器。

    对租户内 CPU 的扩容可以通过修改 UNIT_CONFIGUNIT_NUM 来实现扩容 CPU;建议通过 OCP 执行操作。命令行的操作方法如下:

    i. 执行以下 SQL 语句,确认当前租户使用的 unit_config

    注意

    多个副本可能使用了不同的 resource_pool,您需分别做出调整。

    SELECT a.tenant_name,a.tenant_id,b.name unit_config,c.name pool_name,b.max_cpu,b.min_cpu
    FROM
    OCEANBASE.DBA_OB_TENANTS a,
    OCEANBASE.DBA_OB_UNIT_CONFIGS b,
    OCEANBASE.DBA_OB_RESOURCE_POOL c
    WHERE a.tenant_id=c.tenant_id
    AND b.unit_config_id = c.unit_config_id
    ORDER BY a.tenant_id desc;
    

    ii. 执行生成的 SQL 语句。

    注意

    截止 OceanBase V3.2 版本,修改 resource unit 配置仅 CPU、Memory 配置是实际生效的,其他 IO 参数,例如磁盘、iops 等都暂时无效,默认即可。

    ALTER RESOURCE UNIT unit_config_name min_cpu=2,max_cpu=2,memory_size ='2G',max_iops=10000,min_iops=10000;
    
  2. 对于多 unit 的租户,集群级别的扩容可以向 Zone 内添加 OBServer 节点,然后增加 unit_num 来实现。详情请参见 数据库基础管理 章节中的 扩容和缩容 。

  3. 如果发现执行次数出现异常突刺的 SQL,和业务确认后执行限流。

    1. 判断执行次数有突刺的 SQL。

      参考 OCP 中的 SQL 诊断功能,查看 SQL 的历史执行趋势,勾选执行次数选项,即可查看指定时间内某条 SQL 的执行次数趋势。

    2. 进行 SQL 限流。

      通过绑定 SQL 的执行计划加入 hint max_concurrent 来限制 SQL 并发,实现对 SQL 的限流。示例如下:

      CREATE OUTLINE outline_name ON sql_id USING HINT /*+max_concurrent(1)*/;
      

      更多信息请参见 《SQL 参考(MySQL 模式)》 中的 SQL语句 。


欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论