hhdb数据库介绍(9-13)

news/2024/11/28 9:28:07/文章来源:https://www.cnblogs.com/henghuixinda/p/18573537

计算节点特色功能

SQL流控

计算节点支持对高并发SQL语句进行自动的流量控制功能,可以自动识别高消耗SQL且限制同一时间内高消耗SQL执行的并发数和效率,从而稳定数据库服务。也提供查询入口使用户尽可能多的识别高消耗SQL语句并优化SQL以提升数据库整体服务性能。

当正在执行的SQL缓存行数超过设置的“触发高内存消耗SQL流控的缓存行数”阈值时,即触发流控;此时计算节点会捕获被流控的SQL并自动进行摘要处理,处理后生成对应的流控规则。

此外也可提前设置某类SQL的流控规则。计算节点通过SQL摘要(SQL指纹)来确定应该被流控的SQL查询,当来自多个并发请求的SQL查询与已设置流控规则的SQL摘要匹配,并且其并发数超过设定的阈值时,即触发流控。

流控管理命令

流控管理命令用于在计算节点层面操作SQL流控功能,包括开启、解除和删除流控规则。以下命令中,既可以填写完整SQL,也可填写SQL摘要;若填写完整SQL执行该命令,计算节点会自动进行摘要处理后保存该规则。

1.开启临时流控

SET FLOWCONTROL=HOLD."SQL语句";

该命令用于临时开启某类SQL的流控规则。此命令为暂时性,不会同步计算节点配置库,因此在重启计算节点后规则失效。

示例:

填写完整SQL

mysql> set flowcontrol=hold.'select 1'; 
Query OK, 0 rows affected (0.01 sec)

填写SQL摘要

mysql> set flowcontrol=hold."select 's'";
Query OK, 0 rows affected (0.01 sec)

2.开启永久流控

SET FLOWCONTROL=HOLD_PERSIST."SQL语句";

3.暂时解除流控

SET FLOWCONTROL=UNHOLD."SQL语句";

该命令用于暂时解除对某类SQL的流控规则。此命令为暂时性,因此不会从计算节点配置库删除规则,重启计算节点后规则会继续生效。

4.解除流控并保存规则

SET FLOWCONTROL=UNHOLD_PERSIST."SQL语句";

5.永久删除规则

SET FLOWCONTROL=DELETE_PERSIST."SQL语句";

该命令用于用永久删除某类SQL的流控规则,此规则会从配置库中同步删除。

注意
若在3323服务端口执行以上命令,则需要拥有super权限。
若执行开启命令时已存在同类SQL的流控规则,则会覆盖当前规则,保留最新一次的执行。
例如: 首次执行set flowcontrol=hold."select 1";开启一个临时规则。 第二次执行set
flowcontrol=hold_persist."select 's'";开启一个永久规则。
两条规则属于同一类SQL摘要,则保留最新一次执行,将该类SQL摘要的流控规则转变为永久规则。

流控规则查询

用户可以在3325管理端口执行show @@flowcontrol命令查看当前的流控规则及其状态。

示例:

mysql> show @@flowcontrol;
+------------+-----------------+---------------------------------+
| crc32      | status          | digested                        |
+------------+-----------------+---------------------------------+
| 2690567015 | NO_FLOW_CONTROL | SELECT 'S'                      |
| 2697334227 | IN_CONTROL      | SELECT 'S' FROM test_table      |
+------------+-----------------+---------------------------------+
2 rows in set (0.02 sec)

该语句展示当下所有的临时与永久流控规则的状态,IN_CONTROL表示当下该规则正在启用,NO_FLOW_CONTROL表示当下该规则停用;
若执行解除或删除命令,无论该命令的性质是临时或者永久,该流控状态均变为NO_FLOW_CONTROL被保留在查询结果集中。每次重启计算节点后,该查询命令的结果集会刷新,仅展示当前正在启用与停用的永久流控规则,不展示已被永久删除的规则及所有临时规则。

分片表全局索引

新增分片表全局索引功能,在分片表的普通索引上创建全局索引,能有效提升分片表在使用普通索引时的查询效率,建表时可以指定全局索引,修改表结构时可以添加和删除全局索引。

创建分片表全局索引

1.CREATE TABLE语法

create table xxx (
id int,
a varchar(20),
b varchar(20),
c varchar(20),
d varchar(20),
primary key pk(id),
unique key uk(a),
key idx1(b,c),
key idx2(d),
global {key|index} gidx1(b,c),
global {key|index} gidx2(d)
);

2.CREATE GLOBAL INDEX语法

create global index index_name on tbl_name (key_part,...);

3.ALTER TABLE语法

alter table table_name add global {index | key} index_name(key_part,...);

4.管理端口global_key @@create语法

global_key @@create logicdb.table gidx1(column_name);

编辑分片表全局索引

1.删除分片表全局索引

ALTER TABLE table_name DROP GLOBAL {INDEX | KEY} index_name;
DROP GLOBAL INDEX global_idx_index_name ON table_name;

2.重命名分片表全局索引

ALTER TABLE table_name RENAME GLOBAL {INDEX | KEY} old_index_name TO new_index_name;

查看分片表全局索引

1.执行show create table会将分片表全局索引以注释的形式展示出来;

2.管理端口执行show @@global_key可查看指定库表或所有表的分片表全局索引状态;

show @@global_key [logicdb.table,logicdb.*];

注意事项
1.需开启隐藏参数:true
2.创建的全局索引必须存在普通索引;
3.使用分片表全局索引时,SQL语句需满足 where global_key_column = 'xxx';
4.通过explain查看SQL执行效率,当出现type为ROUTE_BY_GLOBAL_INDEX时表示已使用分片表全局索引;

5.在高并发、数据重复度不高的情况下,相较于普通索引,使用分片表全局索引能有效提升查询性能。

数据类型与字符集

计算节点对数据类型的支持

数值类型

存储节点数据类型 支持状态 说明
BIT 限制支持 DDL语句中可支持BIT类型,不支持在跨库的DML语句中对BIT类型的操作。
TINYINT 支持
SMALLINT 支持
MEDIUMINT 支持
INT 支持
INTEGER 支持
BIGINT 支持
SERIAL 支持 与BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 同义
SERIAL DEFAULT VALUE 支持 与NOT NULL AUTO_INCREMENT UNIQUE同义
REAL 不支持 禁止设置为分片字段与父子表关联字段类型
DOUBLE 不支持 禁止设置为分片字段与父子表关联字段类型
FLOAT 不支持 禁止设置为分片字段与父子表关联字段类型
DECIMAL 支持
NUMERIC 支持

日期与时间类型

存储节点数据类型 支持状态 说明
DATE 支持
TIME 支持
TIMESTAMP 支持
DATETIME 支持
YEAR 支持

字符串类型

存储节点数据类型 支持状态 说明
CHAR 支持
VARCHAR 支持
BINARY 支持
VARBINARY 支持
TINYBLOB 支持 禁止设置为分片字段与父子表关联字段类型
BLOB 支持 禁止设置为分片字段与父子表关联字段类型
MEDIUMBLOB 支持 禁止设置为分片字段与父子表关联字段类型
LONGBLOB 支持 禁止设置为分片字段与父子表关联字段类型
TINYTEXT 支持 禁止设置为分片字段与父子表关联字段类型
TEXT 支持 禁止设置为分片字段与父子表关联字段类型
MEDIUMTEXT 支持 禁止设置为分片字段与父子表关联字段类型
LONGTEXT 支持 禁止设置为分片字段与父子表关联字段类型
ENUM 支持
SET 支持

空间类型

计算节点支持在创建表时,使用空间类型spatial_type;支持在单库的SQL语句中使用spatial_type;不支持在跨库的SQL语句中,对spatial_type的二次计算。

其他类型

存储节点数据类型 支持状态 说明
JSON 支持 禁止使用其作为分片字段、父子表关联字段,禁止使用其作为JOIN字段

计算节点对字符集的支持

计算节点支持字符集相关设置,目前可支持的字符集及校对集如下:

Collation Charset
big5_chinese_ci big5
big5_bin big5
atin1_swedish_ci latin1
latin1_bin latin1
ascii_general_ci ascii
ascii_bin ascii
gb2312_chinese_ci gb2312
gb2312_bin gb2312
gbk_chinese_ci gbk
gbk_bin gbk
utf8_general_ci utf8
utf8_bin utf8
utf8mb4_general_ci utf8mb4
utf8mb4_bin utf8mb4
binary binary
gb18030_chinese_ci gb18030
gb18030_bin gb18030

与字符集相关的语法如下,计算节点也可同步支持,功能同MySQL一致:

功能分类 语法相关
CREATE DATABASE CREATE DATABASE db_name [DEFAULT]
ALTER DATABASE ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
CREATE TABLE `col_name {CHAR | VARCHAR
ALTER TABLE ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name [COLLATE collation_name];
ALTER TABLE tbl_name MODIFY col_name column_definition CHARACTER SET charset_name [COLLATE collation_name];
SET SET NAMES 'charset_name' [COLLATE 'collation_name']
SET CHARACTER SET charset_name
`set [session] {character_set_client | character_set_results
WITH With ORDER BY: SELECT k FROM t1 ORDER BY k COLLATE latin1_swedish_ci;
With AS: SELECT k COLLATE latin1_swedish_ci AS k1 FROM t1 ORDER BY k1;
With GROUP BY: SELECT k FROM t1 GROUP BY k COLLATE latin1_swedish_ci;
With aggregate functions: SELECT MAX(k COLLATE latin1_swedish_ci) FROM t1;
With DISTINCT: SELECT DISTINCT k COLLATE latin1_swedish_ci FROM t1;
With WHERE: SELECT * FROM k WHERE a='a' COLLATE utf8_bin;
With HAVING: SELECT * FROM k WHERE a='a' having a='a' COLLATE utf8_bin order by id;

特殊情况说明:

已有历史数据,且历史数据中其分片字段为非数值或者纯字母类型的数据,修改其表或分片字段的字符集,可能导致数据查询结果错误的情况。主要由于原路由算法中没有兼容这类情况,例如需要对字符串类型的存入数据做先转小写再转字符集utf8mb4存储的逻辑会遇到这类问题。故我们针对字符集转换功能做了相关优化处理。

执行如下修改字符集语句对分片字段所包含的内容进行字符集变更时,会进行进行校验:

ALTER TABLE  tablename CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] 
ALTER TABLE  表名 CHANGE  分片字段列名 分片字段列名 ... [DEFAULT] CHARACTER SET [=] charset_name COLLATE collation_name]

1.若修改的字符集同已有表、已有分片字段的字符集一致,则允许修改;

2.若修改字符集同已有表、已有分片字段的字符集不一致,则校验:
(1). 被修改的目标表其分片字段是否为数值类型,若是数值类型,则目标新字符集可以修改为其他类型的字符集;

(2). 原有字符集是否为latin1 , 若是latin1则目标新字符集可以直接修改为其他类型的字符集;

(3). 原有字符集是否为utf8,若是utf8则校验目标新字符集是否为utf8mb4, 若是则可以直接修改,若不是则继续进行下一条校验:

(4). 原有字符集是否为utf8mb4,若是utf8mb4则校验目标新字符集是否为utf8,若是,则判断:select 1 from tablexx where length(shard_key)/char_length(shard_key)>3 limit 1; 是否有数据返回,若没有数据返回则可以进行字符集修改,若有数据返回,则给到第(5)条一样的ERROR提示进行拦截;

(5). 若以上场景均不包含,则继续验证其分片字段已有数据的length属性 和char_length属性是否相等,若相等则可以进行字符集修改,若不相等,则给到ERROR拦截提示:

“当前字符集转换可能导致路由错误,推荐使用分片方案在线变更功能修改数值类型的字段作为分片字段后,再进行字符集转换操作”。

The current conversion operation of character sets may cause routing errors.It is recommended to modify the numerical fields as sharding key through the Sharding Plan Online Modification function before the modification of character sets.

3.若仅对非分片字段进行字符集变更,则可以执行。主要对涉及到分片字段变更的范围进行校验控制并拦截;

4.如下这类语句字符集只会对表的默认字符集产生影响,不会影响已有数据的字符集,故可以执行修改语句;

ALTER TABLE tablename [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]

5.历史版本(20210308之前的版本)建议用户遇到该类情况需自行查看历史数据的详情内容(必须是纯数字、纯字母类型)以判断是否可以直接进行字符集变更,若分片字段不是纯数字、纯字母类型,则需要进行分片方案变更,选择纯数字、纯字母类型字段作为新的分片字段,之后再进行字符集的变更。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/842714.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产!瑞芯微RK3576(八核@2.2GHz+6T NPU)工业开发板规格书

1 评估板简介 创龙科技TL3576-EVM是一款基于瑞芯微RK3576J/RK3576高性能处理器设计的四核ARM Cortex-A72 + 四核ARM Cortex-A53 + 单核ARM Cortex-M0国产工业评估板,Cortex-A72核心主频高达2.2GHz,Cortex-A53核心主频高达2.0GHz。评估板由核心板和评估底板组成,核心板CPU、R…

NocoBase 本周更新汇总:优化 REST API 数据源插件

本周更新包括:优化 REST API 数据源插件,支持在界面上批量激活插件等。汇总一周产品更新日志,最新发布可以前往我们的博客查看。 NocoBase 目前更新包括的版本更新包括三个分支:main ,next和 develop。main :截止目前最稳定的版本,推荐安装此版本。 next:包含即将发布的…

数据自动同步方案实施指南:企业如何实现高效数据流转?

数据自动同步是指通过技术手段实现数据在不同设备、系统或存储介质之间的自动更新和保持一致性的过程。随着企业业务不断扩大发展,数据传输和汇集已成为其业务链中的一个重要环节,会存在将不同服务器上的不同数据文件同步到同一台文件存储服务器上的场景需求。企业内部多台Wi…

PowerShell执行命令提示找不到驱动器。名为“xx”的驱动器不存在。

前言 问题截图 1. VSCode中提示错误2. PowerShell中提示错误,任何命令都提示此错误(排程变量命令)网上的解决方案 1. VSCode中提示,修改相关VSCode首选项设置2. 修改用户账户3. 重装软件VSCode4. 重装PowerShell 5. 等等乱七八糟的解决方案 最终解决方案 查看系统环境变量中…

VS Code 快捷方式所指的项目“Code.exe”已经更改或移动,因此该快捷方式无法正常工作

早上打开电脑,vscode是这样的图标了然后打不开,我就百度找个了这个博客解决了 找到文件路径C:\Users\*****\AppData\Local\Programs\Microsoft VS Code(安装路径),会发现多了一个名为“_”的文件夹,将该文件夹中所有文件复制到上一级目录\Microsoft VS Code中即可

《HelloGitHub》第 104 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短…

360 度评估大揭秘:个人报告深度解析

嘿,朋友们!在 2019 年 11 月 27 日出炉的这份报告里,主人公是来自研发部的赵高,人家的邮箱是 13@jjhr.com,评估得分达到了 4.68 分哟! 报告扉页那叫一个清晰明了,评估项目名称、被评价人的关键信息,统统都在!前言部分更是重点强调,这可是一份多维度的反馈报告,就是…

dedeCMS 内容保存iframe变图片的解决方法

问题:内容保存时iframe变图片。 解决办法:打开 /dede/inc/inc_archives_functions.php 文件,找到大概在117行的:preg_match_all("/src=[\"||\\s]([^\"]*?)/isU", $body, $img_array);修改为:preg_match_all(/<img[^>]*src\s*=\s*([\"]?)…

织梦模型和自定义模型本编辑器不支持多图发布功能

问题描述:编辑器不支持多图发布功能。解决方法:打开 /dede/templets/archives_add.htm 文件,找到 js/main.js,在其下方添加以下代码:<script type="text/javascript" src="js/handlers.js"></script> <script type="text/javascr…

帝国CMS内容页模板点击改变字体大小的js代码

加入JS代码:<script type="text/javascript"> function FontZoom(fsize) {var ctext = document.getElementById("news");ctext.style.fontSize = fsize + "px"; } </script>定制框架:<div id="news">[!--newstex…

基于令牌的身份验证

一、基于令牌的身份验证 API 的兴起 应用程序编程接口,或简称 API,如今变得非常受欢迎。这一繁荣的关键原因之一是能够创建一个可以为多个不同接口提供服务的单个API,例如 Web 应用程序和移动应用程序。这使得相同的服务器端逻辑可以被集中和重复利用于所有接口。从安全角度…

Redis中常见的延迟问题

使用复杂度高的命令 Redis提供了慢日志命令的统计功能 首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日志记录: # 命令执行超过5毫秒记录慢日志 CONFIG SET slowlog-log-slower-than…