详情页标题前

阿里云RDS数据库Statement Concurrency Control-云淘科技

详情页1

为了应对突发的数据库请求流量、资源消耗过高的语句访问以及SQL访问模型的变化, 保证MySQL实例持续稳定运行,阿里云提供基于语句规则的并发控制CCL(Concurrency Control),并提供了工具包(DBMS_CCL)便于您快捷使用。

前提条件

实例版本如下:

  • MySQL 8.0

  • MySQL 5.7

注意事项

  • CCL的操作不产生日志,所以CCL的操作只影响当前实例。例如主实例进行CCL操作,不会同步到备实例、只读实例或灾备实例。

  • CCL提供超时机制以应对DML导致事务锁死锁,等待中的线程也会响应事务超时和线程KILL操作以应对死锁。

功能设计

CCL规则定义了如下四个维度的特征:

  • SQL command

    SQL命令类型,例如SELECT、UPDATE、INSERT、DELETE等。

  • Object

    SQL命令操作的对象,例如TABLE、VIEW等。

  • keywords

    SQL命令的关键字。

  • Template

    SQL命令的模板。

创建CCL规则

AliSQL设计了一个系统表(concurrency_control)保存CCL规则,系统启动时会自动创建该表,无需您手动创建。这里提供表的创建语句供您参考:

CREATE TABLE `concurrency_control` (
  `Id` bigint NOT NULL AUTO_INCREMENT,
  `Type` enum('SELECT','UPDATE','INSERT','DELETE','TEMPLATE') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'SELECT',
  `Schema_name` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `Table_name` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `Concurrency_count` bigint NOT NULL,
  `Keywords` text COLLATE utf8mb3_bin,
  `State` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'Y',
  `Ordered` enum('N','Y') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N',
  `Digest` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `SQL_template` longtext COLLATE utf8mb3_bin,
  PRIMARY KEY (`Id`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin STATS_PERSISTENT=0 COMMENT='Concurrency control'

参数

说明

Id

CCL规则ID。

Type

SQL command,即SQL命令类型。

Schema_name

数据库名。

Table_name

数据库内的表名。

Concurrency_count

并发数。

Keywords

关键字,多个关键字用英文分号(;)分隔。

State

本规则是否启用。

Ordered

Keywords中多个关键字是否按顺序匹配。

Digest

根据SQL_template进行Hash计算得到的64字节的Hash字符串。

SQL_template

SQL语句的特征。

管理CCL规则

为了便捷地管理CCL规则,AliSQL在DBMS_CCL中定义了四个本地存储规则。详细说明如下:

  • add_ccl_rule

    增加规则。命令如下:

    dbms_ccl.add_ccl_rule('','','',,'');

    示例:

    增加规则,SELECT语句的并发数为10。

    mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 10, '');

    增加规则,SELECT语句中出现关键字key1的并发数为20。

    mysql> call dbms_ccl.add_ccl_rule('SELECT', '', '', 20, 'key1');

    增加规则,test.t表的SELECT语句的并发数为20。

    mysql> call dbms_ccl.add_ccl_rule('SELECT', 'test', 't', 20, '');

    说明

    Id越大,规则的优先级越高。

  • add_ccl_template_rule

    增加模板规则。命令如下:

    dbms_ccl.add_ccl_rule('','','
  • ',,'');

    说明

    • Table_name、Keywords无需填写。SQL query不能为空并且只能填一条SQL。

    • 仅适用于MySQL 8.0版本(小版本为20230630及之后版本)。

    示例:

    增加模板规则,test库模板为'SELECT c FROM t1 WHERE id=?'的SQL并发数为30。

    mysql> call dbms_ccl.add_ccl_rule('SELECT', 'test', '', 30, SELECT c FROM t1 WHERE id=4');
  • del_ccl_rule

    删除规则。命令如下:

    dbms_ccl.del_ccl_rule();

    示例:

    删除规则ID为15的CCL规则。

    mysql> call dbms_ccl.del_ccl_rule(15);

    说明

    如果删除的规则不存在,系统会报相应的警告,您可以使用show warnings;查看警告内容。

    mysql> call dbms_ccl.del_ccl_rule(100);
      Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    mysql> show warnings;
    +---------+------+----------------------------------------------------+
    | Level   | Code | Message                                            |
    +---------+------+----------------------------------------------------+
    | Warning | 7514 | Concurrency control rule 100 is not found in table |
    | Warning | 7514 | Concurrency control rule 100 is not found in cache |
    +---------+------+----------------------------------------------------+
  • show_ccl_rule

    查看内存中已启用规则。命令如下:

    dbms_ccl.show_ccl_rule();

    示例:

    ​mysql> call dbms_ccl.show_ccl_rule();
    +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+
    | ID   | TYPE   | SCHEMA | TABLE | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS |
    +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+
    |   17 | SELECT | test   | t     | Y     | N     |                30 |       0 |       0 |        0 |          |
    |   16 | SELECT |        |       | Y     | N     |                20 |       0 |       0 |        0 | key1     |
    |   18 | SELECT |        |       | Y     | N     |                10 |       0 |       0 |        0 |          |
    +------+--------+--------+-------+-------+-------+-------------------+---------+---------+----------+----------+​

    关于MATCHED、RUNNING和WAITTING的说明如下。

  • 参数

    说明

    MATCHED

    规则匹配成功次数。

    RUNNING

    此规则下正在并发执行的线程数。

    WAITTING

    此规则下正在等待执行的线程数。

  • flush_ccl_rule

    如果您直接操作了表concurrency_control修改规则,规则不能立即生效,您需要让规则重新生效。命令如下:

    dbms_ccl.flush_ccl_rule();

    示例:

    ​mysql> update mysql.concurrency_control set CONCURRENCY_COUNT = 15 where Id = 18;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> call dbms_ccl.flush_ccl_rule();
    Query OK, 0 rows affected (0.00 sec)​

功能测试

  • 测试规则

    设计如下三条规则对应三个维度:

    -- SELECT命令操作表sbtest1并发数为3
    call dbms_ccl.add_ccl_rule('SELECT', 'test', 'sbtest1', 3, '');
    
    -- SELECT命令关键字sbtest2并发数为2
    call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, 'sbtest2');  
    
    -- SELECT命令并发数为2
    call dbms_ccl.add_ccl_rule('SELECT', '', '', 2, '');
  • 测试场景

    使用sysbench进行测试,场景如下:

    • 64 threads

    • 4 tables

    • select.lua

  • 测试结果

    查看规则并发数情况如下:

    ​mysql> call dbms_ccl.show_ccl_rule();
    +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+
    | ID   | TYPE   | SCHEMA | TABLE   | STATE | ORDER | CONCURRENCY_COUNT | MATCHED | RUNNING | WAITTING | KEYWORDS |
    +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+
    |   20 | SELECT | test   | sbtest1 | Y     | N     |                 3 |     389 |       3 |        9 |          |
    |   21 | SELECT |        |         | Y     | N     |                 2 |     375 |       2 |       14 | sbtest2  |
    |   22 | SELECT |        |         | Y     | N     |                 2 |     519 |       2 |       34 |          |
    +------+--------+--------+---------+-------+-------+-------------------+---------+---------+----------+----------+
    3 rows in set (0.00 sec)​

    查看RUNNING列,符合预期的并行数量。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:http://www.yunxiaoer.com/154647.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云RDS数据库使用流程-云淘科技

    快速入门旨在介绍如何创建RDS PostgreSQL实例、进行基本设置以及连接实例数据库,使用户能够了解从购买RDS实例到开始使用实例的流程。 若您初次使用阿里云RDS,请先了解阿里云RDS使用限制。 通常,从新购实例到可以开始使用实例,您需要完成如下操作。 快速创建RDS PostgreSQL实例 创建账号和数据库 设置白名单 申请或释放外网地址 连接Po…

    阿里云数据库 2023年12月9日
  • 腾讯云高性能应用服务常见问题

    什么是高性能应用服务? 高性能应用服务(Hyper Application Inventor,HAI)面向中小企业及开发者快速部署 AI 应用需求,提供开箱即用的主流 AI 模型环境和快速、稳定、弹性的计算服务,能够大幅提高应用层的开发生产效率。 高性能应用服务都有哪些应用? AI 绘画:设计师和开发者可以使用 HAI 快速地部署和优化 AI 绘画模型。LL…

    2023年12月9日
  • 腾讯云云点播音视频内容审核

    音视频内容审核是借助于 AI 对音视频内容进行智能审核,是一种离线任务。任务的执行结果中,包括审核评分、审核建议和嫌疑视频片段。根据“审核建议”,视频管理者可以决定视频是否允许公开,有效规避违规视频带来的法律风险和品牌伤害。云点播可以对画面图像、画面中的文本、语音中的文本以及声音内容四种对象进行审核,审核标签包括色情、暴力、不适宜的信息、违法、谩骂、广告和娇…

    腾讯云 2023年12月9日
  • 阿里云大数据开发治理平台 DataWorksSearchMetaTables-云淘科技

    调用SearchMetaTables根据条件搜索表。 仅支持搜索MaxCompute和EMR两种类型的引擎表。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 Searc…

  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云ECS云服务器DescribeEniMonitorData-云淘科技

    调用DescribeEniMonitorData查询一块辅助网卡在指定时间段内使用的流量信息。 接口说明 可查询的辅助网卡流量信息包括辅助网卡收发数据包的数量、内网出入流量、辅助网卡收发丢包的数量。当返回信息中缺少部分内容时,可能是由于系统没有获取到相应的信息。例如,当实例处于已停止(Stopped)状态或者辅助网卡没有挂载到实例上,即处于可用(Availa…

    阿里云服务器 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。