首页 > 数据库 >Placement Rules in SQL 使用案例

Placement Rules in SQL 使用案例

时间:2023-08-23 12:38:11浏览次数:48  
标签:pr Placement Rules dc value key SQL test ID

作者: WalterWj


使用背景

为了减少跨机房流量使用,可以将一些不重要表设置为 3 副本且固定在主机房。



拓扑确定

使用非功能测试环境做测试,先确认当前拓扑:

Placement Rules in SQL 使用案例_创建表

默认一共 5 副本,当前 3 副本会放在 rack1/2/4,2 副本放在 rack3/5



使用方法



创建 test.pr 表

Create table pr (id int primary key,c1 varchar(200));


查看 test.pr 表的 region 分布

SELECT
        trs.DB_NAME ,
        trs.TABLE_NAME ,
        trp.REGION_ID ,
        trp.PEER_ID ,
        trp.STORE_ID ,
        trp.IS_LEARNER ,
        trp.IS_LEADER ,
        tss.LABEL
FROM
        INFORMATION_SCHEMA.TIKV_REGION_STATUS trs ,
        INFORMATION_SCHEMA.TIKV_REGION_PEERS trp ,
        INFORMATION_SCHEMA.TIKV_STORE_STATUS tss
WHERE
        trs.REGION_ID = trp.REGION_ID
        and trp.STORE_ID = tss.STORE_ID
        AND LOWER(trs.DB_NAME) = 'test'
        and LOWER(trs.TABLE_NAME) = 'pr';
 
DB_NAME|TABLE_NAME|REGION_ID|PEER_ID |STORE_ID|IS_LEARNER|LABEL                                                                                                                                   |
-------+----------+---------+--------+--------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
test   |pr        |  3668516|14216698| 4648105|         0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack4"}, {"key": "host", "value": "host4"}, {"key": "dc", "value": "dc1"}]|
test   |pr        |  3668516|14217644|       3|         0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack2"}, {"key": "host", "value": "host2"}, {"key": "dc", "value": "dc1"}]|
test   |pr        |  3668516|14217004| 3660486|         0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack1"}, {"key": "host", "value": "host1"}, {"key": "dc", "value": "dc1"}]|
test   |pr        |  3668516|14235069| 4648108|         0|[{"key": "zone", "value": "zone2"}, {"key": "rack", "value": "rack5"}, {"key": "host", "value": "host5"}, {"key": "dc", "value": "dc2"}]|
test   |pr        |  3668516|14217728|      13|         0|[{"key": "zone", "value": "zone2"}, {"key": "rack", "value": "rack3"}, {"key": "host", "value": "host3"}, {"key": "dc", "value": "dc2"}]|

可以看到 test.pr 表有 5 副本,region id 为 3668516,5 个 peer id,label 信息可以看到 3 个在 zone1 和 dc1,2个在 dc2 和 zone2。



创建数据存放规则

创建存放规则名为 3policy,规则设置 3 副本,leader 和两个副本都在 dc1(机房label,主机房) 中。

Create placement policy 3policy leader_constraints="[+dc=dc1]" follower_constraints="{+dc=dc1: 2}";



确认规则

SELECT * FROM INFORMATION_SCHEMA.PLACEMENT_POLICIES pp ;
POLICY_ID|CATALOG_NAME|POLICY_NAME|PRIMARY_REGION|REGIONS|CONSTRAINTS|LEADER_CONSTRAINTS|FOLLOWER_CONSTRAINTS|LEARNER_CONSTRAINTS|SCHEDULE|FOLLOWERS|LEARNERS|
---------+------------+-----------+--------------+-------+-----------+------------------+--------------------+-------------------+--------+---------+--------+
        1|def         |3policy    |              |       |           |[+dc=dc1]         |{+dc=dc1: 2}        |                   |        |        2|       0|

可以看到规则已经创建成功。**注意:**绑定规则的对象都是异步调度。

查看规则

Show placement;

Target        |Placement                                                         |Scheduling_State|
--------------+------------------------------------------------------------------+----------------+
POLICY 3policy|LEADER_CONSTRAINTS="[+dc=dc1]" FOLLOWER_CONSTRAINTS="{+dc=dc1: 2}"|NULL            |

也可以看下当前标签信息

Key   |Values                                       |
------+---------------------------------------------+
dc    |["dc1", "dc2"]                               |
engine|["tiflash"]                                  |
host  |["host1", "host2", "host3", "host4", "host5"]|
rack  |["rack1", "rack2", "rack3", "rack4", "rack5"]|
zone  |["zone1", "zone2"]                           |



使用规则

为表指定放置规则

alter table test.pr placement policy 3policy;

这样 test.pr 表就会使用3policy 的规则。

查看规则

Show placement;

Target        |Placement                                                         |Scheduling_State|
--------------+------------------------------------------------------------------+----------------+
POLICY 3policy|LEADER_CONSTRAINTS="[+dc=dc1]" FOLLOWER_CONSTRAINTS="{+dc=dc1: 2}"|NULL            |
TABLE test.pr |LEADER_CONSTRAINTS="[+dc=dc1]" FOLLOWER_CONSTRAINTS="{+dc=dc1: 2}"|SCHEDULED       |

查看 test.pr 的region 分布

SELECT
        trs.DB_NAME ,
        trs.TABLE_NAME ,
        trp.REGION_ID ,
        trp.PEER_ID ,
        trp.STORE_ID ,
        trp.IS_LEARNER ,
        trp.IS_LEADER ,
        tss.LABEL
FROM
        INFORMATION_SCHEMA.TIKV_REGION_STATUS trs ,
        INFORMATION_SCHEMA.TIKV_REGION_PEERS trp ,
        INFORMATION_SCHEMA.TIKV_STORE_STATUS tss
WHERE
        trs.REGION_ID = trp.REGION_ID
        and trp.STORE_ID = tss.STORE_ID
        AND LOWER(trs.DB_NAME) = 'test'
        and LOWER(trs.TABLE_NAME) = 'pr';
 
 
DB_NAME|TABLE_NAME|REGION_ID|PEER_ID |STORE_ID|IS_LEARNER|IS_LEADER|LABEL                                                                                                                                   |
-------+----------+---------+--------+--------+----------+---------+----------------------------------------------------------------------------------------------------------------------------------------+
test   |pr        | 14241662|14241665|       3|         0|        0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack2"}, {"key": "host", "value": "host2"}, {"key": "dc", "value": "dc1"}]|
test   |pr        | 14241662|14241663| 4648105|         0|        1|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack4"}, {"key": "host", "value": "host4"}, {"key": "dc", "value": "dc1"}]|
test   |pr        | 14241662|14241664| 3660486|         0|        0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack1"}, {"key": "host", "value": "host1"}, {"key": "dc", "value": "dc1"}]|

可以看到 test.pr 的 region 分布,都存放在 dc1(主机房) 中。

当然,也可以在创建表的时候就直接指定规则:

CREATE TABLE `pr` (
  `id` int(11) NOT NULL,
  `c1` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin  PLACEMENT POLICY=`3policy`;



规则取消和删除



取消表规则

alter table test.pr placement policy default;
SELECT
        trs.DB_NAME ,
        trs.TABLE_NAME ,
        trp.REGION_ID ,
        trp.PEER_ID ,
        trp.STORE_ID ,
        trp.IS_LEARNER ,
        trp.IS_LEADER ,
        tss.LABEL
FROM
        INFORMATION_SCHEMA.TIKV_REGION_STATUS trs ,
        INFORMATION_SCHEMA.TIKV_REGION_PEERS trp ,
        INFORMATION_SCHEMA.TIKV_STORE_STATUS tss
WHERE
        trs.REGION_ID = trp.REGION_ID
        and trp.STORE_ID = tss.STORE_ID
        AND LOWER(trs.DB_NAME) = 'test'
        and LOWER(trs.TABLE_NAME) = 'pr';
 
DB_NAME|TABLE_NAME|REGION_ID|PEER_ID |STORE_ID|IS_LEARNER|IS_LEADER|LABEL                                                                                                                                   |
-------+----------+---------+--------+--------+----------+---------+----------------------------------------------------------------------------------------------------------------------------------------+
test   |pr        | 14241662|14241664| 3660486|         0|        0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack1"}, {"key": "host", "value": "host1"}, {"key": "dc", "value": "dc1"}]|
test   |pr        | 14241662|14241663| 4648105|         0|        1|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack4"}, {"key": "host", "value": "host4"}, {"key": "dc", "value": "dc1"}]|
test   |pr        | 14241662|14242825| 4648110|         0|        0|[{"key": "zone", "value": "zone2"}, {"key": "rack", "value": "rack5"}, {"key": "host", "value": "host5"}, {"key": "dc", "value": "dc2"}]|
test   |pr        | 14241662|14241665|       3|         0|        0|[{"key": "zone", "value": "zone1"}, {"key": "rack", "value": "rack2"}, {"key": "host", "value": "host2"}, {"key": "dc", "value": "dc1"}]|
test   |pr        | 14241662|14242824|      12|         0|        0|[{"key": "zone", "value": "zone2"}, {"key": "rack", "value": "rack3"}, {"key": "host", "value": "host3"}, {"key": "dc", "value": "dc2"}]|

可以看到表数据分布恢复 5 副本。



删除规则

Drop placement policy 3policy;
Show placement;
 
Target|Placement|Scheduling_State|
------+---------+----------------+

可以看到规则已经没了。

注意:需要删除的规则不能有任何表被绑定。



注意事项

需要注意,以上命令数据库服务需要的权限:

创建规则需要有 create 权限

使用规则 alter 需要权限

如果是 create table 就带上规则,只需要 create 权限即可。

标签:pr,Placement,Rules,dc,value,key,SQL,test,ID
From: https://blog.51cto.com/u_15550868/7201155

相关文章

  • mac卸载mysql教程(按照步骤可完全卸载)
    1、关闭mysql系统偏好设置-点击mysql图标-点击stop...或者查看mysql是否启动:ps-ef|grepmysql输入:kill-9 然后回车,关闭mysql2、卸载:在Mac终端使用下面的命令删除所有mysql文件即可sudorm/usr/local/mysqlsudorm-rf/usr/local/mysql*rm-rf/Library/Startu......
  • mysql超出最大连接数解决方法
    遇到mysql超出最大连接数,相信不少人第一反应就是查看mysql进程,看有没有慢查询,当然这个做法是完全正确的!但是很多时候真正的问题不在这里。今天有遇到同样的问题,一味查看mysql进程和慢查询日志,无果。后来老大提点了一下,查看一下nginx日志,发现有一两个访问执行时候比较长,然后使用top......
  • 千万级数据深分页查询SQL性能优化实践 | 京东云技术团队
    一、系统介绍和问题描述如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注对......
  • jvs-rules(规则引擎)更新:新增功能介绍
    jvs-rules更新内容1.复合变量新增数据补充节点,实现请求回来的数据再以入参方式请求其他数据进行数据补充(例如通过参数A,请求回数据B,再以数据B为入参,请求回数据C)2.规则流结束节点支持新增、新建、引入变量;结束节点可直接选择或新增某个变量进行结果输出3.评分卡新增条件一键添加和导......
  • 千万级数据深分页查询SQL性能优化实践
    一、系统介绍和问题描述如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查询关注......
  • 3、oracle迁移到postgres-执行动态sql传参不同
    目录oracle迁移到postgres-执行动态sql传参不同1、oracle使用的是:12、postgres使用的是$1oracle迁移到postgres-执行动态sql传参不同在sql字符串中,会动态传入值,使用阿拉伯数据定义传参的个数。1、oracle使用的是:1executeimmediate'select*fromsys_stuwherestu_name=......
  • 1、oracle迁移到postgres-执行sql方式execute不同
    目录oracle迁移到postgres-执行sql方式execute不同1、oracle使用executeimmediate2、postgres使用executeoracle迁移到postgres-执行sql方式execute不同1、oracle使用executeimmediateexecuteimmediate'sql';2、postgres使用executeexecuteimmediate'sql';......
  • docker部署MySQL、tomcat
    一、安装MySQL1、dockerpullmysql:latest拉取镜像dockersearchmysql命令将返回与关键字“mysql”相关的Docker镜像列表。在结果中,你将看到镜像名称、描述、星级评分、官方/认证标志以及其他相关信息。结果包括了许多不同的MySQL镜像,包括官方支持的和由社区维护的镜像。你......
  • 【MySQL数据库总结】
    【一】MySQL初识存储数据的演变过程SQL语句的由来库/表/记录/表头/表单MySQL安装初识SQL语句【二】MySQL基础存储引擎创建表语法基本数据类型字段类型严格模式约束条件【三】MySQL之约束条件引言约束条件外键修改表语法复制表语法【四】MySQL之约束条件......
  • MySQL对小数进行四舍五入等操作
    数学函数是MySQL中常用的一类函数。其主要用于处理数字,包括整型和浮点数等等。MySQL常用的四舍五入函数:函数说明FLOOR(X)返回不大于X的最大整数。CEIL(X)、CEILING(X) 返回不小于X的最小整数。ROUND(X) 返回离X最近的整数,截断时要进行四舍五入。ROUND(X,D) 保留X小数点后D位......