前言
几周之前在 Meetup 中说到昆仑分布式数据库的架构的一些特点,因而,有敌人好奇昆仑分布式数据库计算节点如何反对读写存储节点中的变量。
本篇文章就来论述阐明下
性能具体介绍
- 使 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;
- 计算节点会缓存 MySQL 配对的 session var-value,且如果 shard 连贯被从新设置或者从新连贯,计算节点会把缓存的变量发送给 MySQL 节点。
- 也反对 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;
(不反对该语法)
- 反对 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';
- 反对在 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;
- 当执行 show 语句时会获得一个变量的值,间接发送给任意存储 shard 来获取他的值。
总结
昆仑分布式数据库的计算节点反对读写存储节点的零碎变量,能够给用户带来很大的便当。
例如,用户能够在计算节点的连贯中执行一个 set global var=value; 语句,来设置所有后端集群的 var 变量的值为 value。也能够通过在计算节点执行一个 set session var=value; 就把以后会话(连贯)中的 var 变量的值设置为 value。
这部分性能的对应测试脚本从 https://gitee.com/zettadb/kun… 下面拉下来,在 src/test/regression/sql/vars.sql 中,这些测例也展现了 MyQL 变量拜访的性能。
*KunlunDB 我的项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb
END