最强王者
(Ti D Ber F Cs P Ei6 L)
2023 年10 月 20 日 10:34
1
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
TIDB 6.5.2
【复现路径】做过哪些操作出现的问题
执行语句
alter table employees_test partition p1 placement policy storeonhdd;
建表语句
CREATE TABLE employees_test (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT ‘1970-01-01’,
separated DATE DEFAULT ‘9999-12-31’,
job_code INT,
store_id INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![placement] PLACEMENT POLICY=storeonssd
*/
PARTITION BY RANGE ( YEAR(separated) ) (
PARTITION p0 VALUES LESS THAN (1991),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (2001),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
有猫万事足
2023 年10 月 20 日 13:24
3
给分区绑定放置策略后,你可以更改指定分区的放置策略。示例如下:
ALTER TABLE t1 PARTITION pEurope PLACEMENT POLICY=p1;
是不是应该写成
alter table employees_test partition p1 placement policy=stroeonhdd;
https://docs.pingcap.com/zh/tidb/stable/sql-statement-alter-table#语法图
从语法图看,PlacementPolicyOption
这里也是通过EqOpt来连接的。
SHOW placement labels;----执行下看看,有对应的标签吗?没有的话绑定的时候会报错。
使用 CREATE PLACEMENT POLICY
创建放置规则时,TiDB 不会检查标签是否存在,而是在绑定表的时候进行检查。
Jolyne
2023 年10 月 23 日 02:19
5
看下有没有创建对应的label标签(show placement labels;)和策略( 创建策略:
指定数据只存储在 SSD: CREATE PLACEMENT POLICY storeonfastssd
CONSTRAINTS=“[+disk=ssd]”;
指定数据只存储在 HDD: CREATE PLACEMENT POLICY storeonfastssd
CONSTRAINTS=“[+disk=hdd]”;)
最强王者
(Ti D Ber F Cs P Ei6 L)
2023 年10 月 23 日 02:48
6
指定更改策略出现报错,看样子是PD的label修改有问题
1 个赞
最强王者
(Ti D Ber F Cs P Ei6 L)
2023 年10 月 23 日 02:50
7
是的 我在绑定的时候就会报错
ERROR 8243 (HY000): “[PD:placement:ErrRuleContent]invalid rule content, rule ‘partition_rule_102_0’ from rule group ‘TiDB_DDL_102’ can not match any store”
Jolyne
2023 年10 月 23 日 03:22
9
那你之前是绑定成功过么,绑定成功了再试试你那个alter语句呢
最强王者
(Ti D Ber F Cs P Ei6 L)
2023 年10 月 23 日 07:08
11
是的 规则有问题导致创建失败 CREATE PLACEMENT POLICY storeonfastssd
CONSTRAINTS=“[+disk=ssd]”; 改成这种就可以了