HotDB的HINT特色语法

本文介绍了如何在计算节点利用HINT语法直接在HotDBServer的数据节点上执行MySQL SQL语句,包括通过DNID和分片字段指定执行位置。警告了直接操作存储节点可能带来的风险,并提到了连接绑定的影响及处理建议。涉及的关键操作包括设置HINT、执行SQL、处理连接绑定等。
摘要由CSDN通过智能技术生成

在计算节点使用HINT语法,可绕过HotDB Server解析器,直接在指定数据节点上执行MySQL的任意SQL语句。计算节点支持两种方式的HINT语法:

  1. 在HINT中使用DNID(数据节点ID):
    语法:
    /!hotdb:dnid= dnid_value/ 要执行的SQL
    注:dnid_value的值为某个数据节点的ID号。用户可以替换dnid_value的值来指定具体的分片节点。

例如:
/!hotdb:dnid= 1/select * from customer where age > 20;

该语句将在数据库节点1上执行。用户可以通过分布式事务数据库管理平台中的”数据节点”页面,找到数据节点ID为1的存储节点名称,并在”存储节点”页面中搜索指定的存储节点名称,即可定位到实际的MySQL数据库。

在HINT中使用分片字段:
语法:
/!hotdb:table= table_name:column_value*/ 要执行的SQL
注:table_name即某个分片表的表名;column_value即该表上分片字段某个值。用户可以替换table_name的值指定相应的拆分规则,通过替换column_value的值来指定使用该分片字段的值对应的分片节点。
例如:
/!hotdb:table = customer:10001/select * from customer where age > 20;

使用方法:
连接计算节点(参考登录计算节点并开始使用),选择设置的逻辑库(这里使用test逻辑库),然后使用上述方式执行指定的语句(这里举例说明,使用时可以按需编写SQL)。
在dn_id=2的分片节点上查找cutomer表
mysql> /!hotdb:dnid=2/ select count() from customer;
±-----------+
| count() |
±-----------+
| 50 |
±-----------+
1 row inset (0.00 sec)

查找customer表上provinceid为1的分片节点的customer表
mysql> /!hotdb:table=customer:1/ select count() from customer;
±-----------+
| count() |
±-----------+
| 11 |
±-----------+
1 row inset (0.00 sec)

特殊说明:业务层面不建议HINT直接操作存储节点,因为使用HINT之后,数据、状态将不受计算节点控制。且为了防止连接池被污染,当使用HINT操作后,计算节点会绑定当前HINT查询使用的逻辑库关联的后端连接(即计算节点与存储节点的连接),所有涉及到后端的操作均在绑定的连接范围内被允许。故当HINT使用完毕后,建议重建新的前端连接以保证新的会话连接状态干净稳定。若不重建连接,当HINT使用后,有其他操作涉及到与原逻辑库绑定的后端连接之外的新的数据节点时,之前绑定的后端连接会失效,前端连接会被自动重建。
涉及到连接绑定的语句除了HINT,还包括如下语句:
set[session] foreign_key_checks=0;
STARTTRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
set[session] UNIQUE_CHECKS=0;

计算节点在这种连接被绑定的SQL执行后,会输出Warning及日志提醒:
如执行如下语句时会有warning提示:
mysql>use db_a
Databasechanged
mysql>/!hotdb:dnid=all/select * From tba;
±-----±----+
| id | a |
±-----±----+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
±-----±----+
5 rows inset, 1 warning (0.01 sec)
Warning(Code 10041): The current session has been bound to the backend connectionassociated with the current LogicDB. It is recommended to rebuild the sessionafter use.

同时日志会有info信息:
2019-04-0119:11:29.662 [INFO] [CONNECTION] [$NIOEecutor-3-1] ServerConnection(1565) – 31has been bound to the backend connection:[2,1]

当操作涉及到与原逻辑库绑定的后端连接之外的新的数据节点时,showwarnings会有如下提示且连接会断开:
mysql>use db_b
Databasechanged
mysql>show warnings;
±------±------±---------------------------------------------------------------------------------------------------------------+
| Level |Code | Message
|
±------±------±---------------------------------------------------------------------------------------------------------------+
|Note | 10042 | The connection in currentLogicDB was a binded connection, operations under current LogicDB may causeconnect abort. |
±------±------±---------------------------------------------------------------------------------------------------------------+
1 row inset (0.00 sec)
mysql>select * from tbb;
ERROR 2013(HY000): Lost connection to MySQL server during query
ERROR 2016(HY000): MySQL server has gone away
Noconnection. Trying to reconnect…
Connectionid: 63
Currentdatabase: db_b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值