首页 > 编程语言 >【源码阅读】1. 配置、VARIABLE与用户PROPERTY

【源码阅读】1. 配置、VARIABLE与用户PROPERTY

时间:2023-06-25 18:24:43浏览次数:52  
标签:SessionVariable resource ConnectContext 源码 设置 defaultSessionVariable VARIABLE PR

 配置

初始化

在FE启动时:

● Config类ConfField注解标记的静态属性反射出Field存储到内存confFields,作为一个可读取和修改的属性列表(真正的值存储在Config类的静态属性中,反射出Field并存储到confFields只是一个读取和修改指针而已)

● 读取配置文件,根据配置文件内容,设置Config类的静态属性

 

设置

从confFields中根据要修改的key获取具体的Field,然后反射修改实际Config类中的值

# 设置
ADMIN SET FRONTEND CONFIG ("max_broker_concurrency" = "11"); 

注意临时的设置完后无法持久化,重启后又恢复原值

 

查看

遍历confFields中获取值并展示,根据反射字段Field从Config类中获取值 

# 展示
ADMIN SHOW FRONTEND CONFIG LIKE "max_broker_concurrency";

   

VARIABLE

通常表示在连接/Session范围内生效的变量。有几个关键对象:

● ConnectContext - 连接上下文,其中包含sessionVariable : SessionVariable属性

● SessionVariable - Session级别的变量(只是它在使用上也会作为SessionVariable的创建模板,故也有点全局设置的意思)

● GlobalVariable - Global级别设置的变量

● VariableMgr - 管理全局/Session级别的变量

 

初始化

VariableMgr静态初始化时:

● 实例化静态变量defaultSessionVariable = new SessionVariable(),作为SessionVariable创建的模板

● getStringVarContextBuilder初始化ctxByVarName列表

○ 获取SessionVariable中以VarAttr注解标记的属性加入

○ 获取GlobalVariable中以VarAttr注解标记的属性加入

 

Session建立

在Session建立连接时,克隆defaultSessionVariable到ConnectContext.sessionVariable中

 

设置

对于每个SetStmt中要设置的值:

● 获取ConnectContext中SessionVariable

● 调用VariableMgr.setVar

○ 如果GLOBAL级别,将设置GlobalVariable中的静态变量值或者设置静态变量defaultSessionVariable的属性值,并同时设置ConnectContext中SessionVariable的属性值

○ 如果SESSION级别,将设置ConnectContext中SessionVariable的属性值

SET exec_mem_limit = 137438953472;
SET GLOBAL exec_mem_limit = 137438953472;

  

整体流程:

1.  上来初始化defaultSessionVariable : SessionVariable作为SessionVariable模板

2.  ConnectContext建立时,克隆defaultSessionVariable作为SessionVariable

3.  如果设置Session级别的variable,直接设置ConnectContext.SessionVariable

4.  如果设置Global级别的variable,则设置GlobalVariable或者defaultSessionVariable : SessionVariable模板

5.  下次ConnectContext建立时,克隆修改过的defaultSessionVariable作为SessionVariable

 

查看

● 查看SESSION级别变量 - 查看ConnectContext中SessionVariable的属性值

● 查看GLOBAL级别变量 - 查看GlobalVariable或者defaultSessionVariable : SessionVariable模板的属性值

SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern' | WHERE expr]

  

用户PROPERTY

设置

在最终设置UserProperty的时候,有如下值可以被设置:

● max_user_connections

● max_query_instances

● sql_block_rules

● cpu_resource_limit

● resource_tags.location

● exec_mem_limit

● query_timeout

● 【resource】

○ resource.cpu_share

○ resource.io_share

○ resource.ssd_read_iops

○ resource.ssd_write_iops

○ resource.ssd_read_mbps

○ resource.ssd_write_mbps

○ resource.hdd_read_iops

○ resource.hdd_write_iops

○ resource.hdd_read_mbps

○ resource.hdd_write_mbps

○ quota.low

○ quota.normal

○ quota.high

● DPP相关的设置

user property的设置若在SessionVariable中也有则优先于SessionVariable

SET PROPERTY FOR 'jack' 'max_user_connections' = '1000';

  

查看

 

SHOW PROPERTY [FOR user] [LIKE key]

标签:SessionVariable,resource,ConnectContext,源码,设置,defaultSessionVariable,VARIABLE,PR
From: https://www.cnblogs.com/xutaoustc/p/17503654.html

相关文章

  • Bert PyTorch 源码分析:一、嵌入层
    #标记嵌入就是最普通的嵌入层#接受单词ID输出单词向量#直接转发给了`nn.Embedding`classTokenEmbedding(nn.Embedding):def__init__(self,vocab_size,embed_size=512):super().__init__(vocab_size,embed_size,padding_idx=0) #片段嵌入实际上是......
  • 谁与争锋!手机直播源码知识分享之主播PK功能
    今天我要分享的知识与PK有关,PK是指某些人分成几方进行对决、对抗,直到分出胜负。PK的方式有很多,在现实生活中,人们可以通过智力、力量等进行PK,方式可以是搏斗、扳手腕、现场智力问答等;而在网络中,人们可以通过游戏、网络智力问答的方式进行PK。我今天要讲的这个功能也是网络中的PK,这个......
  • cpp condition_variable wait_for unique_mutex,chrono::seconds
    #include<chrono>#include<condition_variable>#include<ctime>#include<fstream>#include<future>#include<iomanip>#include<iostream>#include<thread>#include<uuid/uuid.h>#include<vector......
  • springboot里的@PropertySource注解介绍
    在SpringBoot中,@PropertySource注解用于加载外部的属性源文件,将其作为配置文件来使用。该注解可以用于标记在Java类上,并指定要加载的属性源文件的位置。使用@PropertySource注解可以很方便地将外部的属性文件加载到Spring的环境中,并可以通过@Value注解或Environ......
  • 2.nacos-client源码及查看
    nacos-client.2.2.1-RC.SDK查看源码官网JAVASDK链接主要内容<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>${version}</version></dependency>问题:1.获取配置api是获取快照......
  • k8s驱逐篇(7)-kube-controller-manager驱逐-taintManager源码分析
    概述taintManager的主要功能为:当某个node被打上NoExecute污点后,其上面的pod如果不能容忍该污点,则taintManager将会驱逐这些pod,而新建的pod也需要容忍该污点才能调度到该node上;通过kcm启动参数--enable-taint-manager来确定是否启动taintManager,true时启动(启动参数默认值为true);k......
  • spring源码笔记
    Bean创建流程获取对象的BeanDefinition通过反射创建空对象填充属性调用init方法  Bean创建关键方法(按顺序)getBeandoGetBeancreateBeandoCreateBeancreateBeanInstancepopulateBean  解决循环依赖:三级缓存循环依赖原因单例,每个类只有一个对象。A引用B,B又......
  • SPI的插件化设计-->JDK的SPI(ServiceLoader)实现拓展、实现Dubbo的SPI(ExtensionLoade
    (目录)1.什么是SPI?SPI的全称是ServiceProviderInterface,直译过来就是"服务提供接口",为了降低耦合,实现在模块装配的时候动态指定具体实现类的一种服务发现机制。动态地为接口寻找服务实现。它的核心来自于ServiceLoader这个类。javaSPI应用场景很广泛,在Java底层和一些......
  • 基于springboot+vue的漫画之家管理系统,附源码+数据库+论文+PPT,适合课程设计、毕业设计
    1、项目介绍随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,“漫画之家”系统就是信息时代变革中的产物之一。任何系统都要遵循系统设计......
  • TVM 源码阅读PASS — VectorizeLoop
    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.htmlVectorizeLoop这个PASS就是对标记为ForKind::kVectorized的For循环做向量化处理,并对For循环中的语句涉及到的变量,替换为Ramp,以便于在Codegen的过程中生成相关的向量化运算的指令。VectorizeLoop这个PASS的入口函数......