写点什么

昆仑分布式数据库独特的变量读写功能介绍

作者:KunlunDB
  • 2022 年 3 月 10 日
  • 本文字数:1331 字

    阅读完需:约 4 分钟

前言

几周之前在 Meetup 中说到昆仑分布式数据库的架构的一些特点,因此,有朋友好奇昆仑分布式数据库计算节点如何支持读写存储节点中的变量。


本篇文章就来阐述说明下


功能详细介绍

1. 使 set [shard] global/session/local/PERSIST/PERSIST_only VARNAME=VALUE

的语法生效;总是假设 VARNAME 是 MySQL 的;计算节点会发送 SET 语句给所有的存储节点去执行,且在一个 session 的生命期当中,所有设置过的 session 变量的值会在计算节点的 session 里面缓存。


在切换存储集群主节点后,新的主节点会使用缓存的 session 变量值设置给新的存储集群主节点,确保一致的会话(连接)状态。


set session innodb_lock_wait_timeout = 3;
复制代码



设置全局变量:


set global innodb_lock_wait_timeout = 4; set persist_only innodb_lock_wait_timeout = 11;
复制代码

2.set VARNAME=VALUE 语句,在 PostgreSQL 客户端连接的时候会默认以 PostgreSQL 的变量名来看待他们,如果变量名不存在,则会把他们看成是 MySQL 的 session 变量。在客户端 MySQL 连接时,会默认把他们视为 MySQL 的 session 变量,如果变量名不存在则把他们视为 PostgreSQL 变量。


set innodb_lock_wait_timeout = 2;
复制代码



3. 计算节点会缓存 MySQL 配对的 session var-value,且如果 shard 连接被重新设置或者重新连接,计算节点会把缓存的变量发送给 MySQL 节点。

 

4. 也支持 set @@global/session/local/persist/persist_only.varname=value

语句,且总是假定为 MySQL 变量,因为只有 MySQL 有这样的 SET 语法。但因 shift/reduce 冲突而不支持 set @@VARNAME=VALUE。


set @@global.innodb_lock_wait_timeout = 4;
复制代码


 

set @@innodb_lock_wait_timeout = 2;
复制代码

(不支持该语法)



5. 支持 show [session/local/global] variables like 'wildcard-filter 语法且总是假定是 MySQL 变量,因为 MySQL 才有这样的语法,PostgreSQL 没有。对于 show varname 语法总是先假定是 PostgreSQL 变量。如果变量名不是 PostgreSQL 变量,则被假定是 MySQL 变量。


show global variables like 'innodb_lock_wait_timeout';
复制代码



show session variables like 'innodb_lock_wait_timeout';
复制代码



show local variables like 'innodb_lock_wait_timeout';
复制代码


 

6. 支持在 Kunlun 计算节点里面的选项 show [session/global/local] variables like 里选择 STRICT 来展示只有计算节点允许访问的 MySQL 变量。


show local variables like 'innodb_lock_wait_timeout' strict;
复制代码



show session variables like 'innodb_lock_wait_timeout' strict;
复制代码



show global variables like 'innodb_lock_wait_timeout' strict;
复制代码


 

7. 当执行 show 语句时会取得一个变量的值,直接发送给任意存储 shard 来获取他的值。


总结

昆仑分布式数据库的计算节点支持读写存储节点的系统变量,可以给用户带来很大的便利。

例如,用户可以在计算节点的连接中执行一个 set global var=value;语句,来设置所有后端集群的 var 变量的值为 value。也可以通过在计算节点执行一个 set session var=value;就把当前会话(连接)中的 var 变量的值设置为 value。

这部分功能的对应测试脚本从https://gitee.com/zettadb/kunlun.git 上面拉下来,在 src/test/regression/sql/vars.sql 中,这些测例也展示了 MyQL 变量访问的功能。


需要技术支持可以微信搜索微信号(KunLunDB-Linda),添加客服,在线沟通即可。


THE END

发布于: 刚刚阅读数: 2
用户头像

KunlunDB

关注

还未添加个人签名 2022.03.09 加入

还未添加个人简介

评论

发布
暂无评论
昆仑分布式数据库独特的变量读写功能介绍_数据库_KunlunDB_InfoQ写作平台