17 mysql global_variables session_variables

前言

这是一个关于 mysql 中的一些配置的探索 

起因是需要 看一下 mysql 自增长的实现, 这里面涉及到两个变量 

auto_increment_increment, auto_increment_offset, 然后 需要探索一下 这两个变量的来历 

然后 就有了这里的相关介绍 

global_variables 的初始化

global_variables 来自于外部 

可以看到 在 main 入口的地方, 已经被初始化一次了 

init_common_variables 中有对 global_system_variables 做一定的初始化 

线程中的 variables 的初始化 

在线程的构造方法中, 初始化为 global_system_variables 然后之后再进行更新 

配置文件中的配置对应于哪里?

在 my.cnf 中增加, max_allowed_packet = 100M

然后 来调试看一下, 入口的地方 max_allowed_packet 为 4194304, 4M

设置我们配置的 max_allowed_packet 的值的地方是在这里 my_handle_options

我们在 my.cnf 中增加的配置, 是作为 mysqld 的命令行参数传递进来的 

将 my.cnf 中的配置附加到 程序参数的地方是在 load_defaults 中, 之前是 “/root/mysql/mysql-5.7.27/bin/mysqld --user=root”更新之后为 “/root/mysql/mysql-5.7.27/bin/mysqld --max_allowed_packet=100M --args-seprator-- --user=root

set global max_allowed_packet = 1011000 

假设我这里执行 “set global max_allowed_packet = 1011000;”

如下地方是计算保存的值的地方, 这里有一定的 调整, 比如这里 option.block_size 为 1024, 1011000 按照 1024 对齐, 计算得到的结果为 1010688

具体更新 global_system_variables.max_allowed_packet 的地方如下

global_var(T) 获取的是 global_system_variables 中 max_allowed_packet 的指针 

然后这里设置其值为 1010688

set session autocommit = 1

其他的预处理 同上, 我们这里主要看一下 更新的哪里的数据

这里和 全局处理差不多, 只是这里是使用的 session_var_ptr 获取的当前线程的 variables

获取目标变量地址的地方

是基于 THD->variables, 获取 autocommit 的偏移, 作为指针返回 

为什么上面不使用 max_allowed_packet 进行测试呢 

因为 session 范围内, max_allowed_packet 是只读的, 然后 会响应 ER_VARIABLE_IS_READONLY[1621] 给客户端

具体的各个变量的相关配置 是在这里, 定义了需要的各类属性

show variables / show global variables 

这里来看一下 show variables 的实现  

查询的实际上是 performance_schema 中的 global_variables, session_variables

这两张表示 逻辑上的数据结构

真实数据是 取自于 内存中, 比如 global_variables 来自于 global_system_variables, session_variables 来自于 THD.variables

这里是从 global_system_variables 取数据的地方, 可以看到 performance_schema 是由 PFS 引擎支撑实现的 

这里是从 global_system_variables 取数据的地方, 然后 这里拿到的数据 放到了 m_cache 中, 这个是后面 迭代当前表数据的基础

也就是 system_variables 中的数据来自于 global_system_variables

在更上层 table_global_variables 这一层级是由 m_sysvar_cache 来维护这些变量, 可以理解为 m_sysvar_cache 中组合了上面的 m_cache

这里是遍历 整张表的地方, ha_rnd_next 中实现的具体的迭代 

具体的迭代的实现, 遍历的是 m_sysvar_cache 中的 m_cache 的相关数据 

这里是填充每一行数据的地方, 填充对应的 key, value

session 变量这边同样的道理, 只是说 他数据是取自当前 线程

有几种取数据的方式, 如下是 直接通过 偏移获取

如下是通过 sys_var_tmp 获取 

完 

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

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

相关文章

前端uniapp块样式写法

<template><view class"block"><view class"block_box"><view class"block_box_content"><view class"block_box_left">左边</view><view class"block_box_right">右边</view…

网络带宽管理:限速策略的备份应用场景

假设现在有一个千兆网络环境&#xff0c;使用云祺容灾备份系统&#xff0c;部分备份数据需要走这个千兆网络&#xff0c;现在这个企业网络环境中从早上9点到晚上9点&#xff0c;生产网络占用了500兆带宽。 那么在早上9点到晚上9点这个时间段之间&#xff0c;不对备份任务进行网…

什么是Scrum?如何实施Scrum(敏捷开发)以及敏捷工具

什么是Scrum&#xff1f; Scrum是一个敏捷开发框架&#xff0c;它是一个增量的、迭代的开发过程。它被广泛应用于敏捷软件开发&#xff0c;在Scrum中&#xff0c;开发过程由若干个短的迭代周期组成&#xff0c;每个迭代周期称为一个Sprint。 那么Scrum如何实施呢&#xff1f;…

Leetcode646. 最长数对链

Every day a Leetcode 题目来源&#xff1a;646. 最长数对链 解法1&#xff1a;动态规划 定义 dp[i] 为以 pairs[i] 为结尾的最长数对链的长度。 初始化时&#xff0c;dp 数组需要全部赋值为 1。 计算 dp[i] 时&#xff0c;可以先找出所有的满足 pairs[i][0]>pairs[j]…

直播APP源码搭建:核心的服务器系统

在现代科技的推动下&#xff0c;网络衍生出了各种各样的技术&#xff0c;每个技术都被应用到需要的APP上&#xff0c;直播APP源码搭建出来的APP就是其中的一个&#xff0c;然而&#xff0c;这些技术能够成功的在直播APP源码搭建的APP中稳定的为用户们提供功能与服务&#xff0c…

手写Spring:第12章-基于JDK、Cglib实现AOP切面

文章目录 一、目标&#xff1a;基于JDK、Cglib实现AOP切面二、设计&#xff1a;基于JDK、Cglib实现AOP切面三、实现&#xff1a;基于JDK、Cglib实现AOP切面3.0 引入依赖3.1 工程结构3.2 AOP切点表达式和使用以及基于JDK和CGLIB的动态代理类图3.3 切点表达式3.3.1 类匹配接口3.3…

Scala

Scala 介绍 Scala是一种多规范的编程语言&#xff0c;它结合了面向对象编程&#xff08;OOP&#xff09;和函数式编程&#xff08;FP&#xff09;的特征&#xff0c;Scala的名字源于”Scalable language“&#xff0c;意为”可伸缩语言“。2003年开发的&#xff0c;并在JVM&a…

LeetCode 48题: 旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

激光切割机在船舶行业的的应用有哪些

我国享有世界工厂的美誉&#xff0c;是全球制造业的主力。然而&#xff0c;在船舶制造的关键技术领域&#xff0c;我国的研发投入不足&#xff0c;技术进步仍滞后&#xff0c;我国高端船舶制造的实力仍显不足。 在我国制造业全面复苏的当前背景下&#xff0c;“精准制作”正构成…

数据库 设计规范数据库设计样例

目录 5 数据库5.1 数据库命名规范5.2 数据库字段命名5.2.1 字段命名规范5.2.2 命名规范5.2.3 待优化命名示例5.2.4 字段类型规范5.2.5数据库中每个字段的规范描述 5.3表设计5.4 参考设计5.4.1 应用场景5.4.2 需求分析5.4.3 设计思路5.4.4 表结构设计5.4.5 缓存策略Q1 冗余设计和…

上手Spring

设置Maven镜像为阿里云 找到Maven的目录所在位置找到conf目录找到settings.xml文件 找到Maven的目录所在位置&#xff1a;去idea 的设置中 直接搜索Maven 找到conf目录 修改Maven本地仓库的地址 地址自定义 修改Maven的镜像为阿里云镜像 <mirror><id>nexus-aliy…

9.8day59

503. 下一个更大元素 II - 力扣&#xff08;LeetCode&#xff09; 知识点&#xff1a;单调栈 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09;

opencv基础: 视频,摄像头读取与保存的常用方法

当然还可以从视频中抓取截图&#xff0c;所以现在聊一下常用的抓取视频截图的的方法。 VideoCapture 方法 cv2.VideoCapture();cv2.VideoCapture( device);cv2.VideoCapture(filename);上面有三种构造方法&#xff0c; 第一种是无法构造方法。 第二种参数device是一个数字。 …

【群智能算法改进】一种改进的鹈鹕优化算法 IPOA算法[2]【Matlab代码#58】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始POA算法2. 改进后的IPOA算法2.1 随机对立学习种群初始化2.2 动态权重系数2.3 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始POA算法…

企业架构LNMP学习笔记24

学习目标和内容&#xff1a; 1、能够描述高可用HA的作用 2、能够理解VIP的切换&#xff1a;虚拟IP。 3、能够描述keepalived作用&#xff1a;保持活跃。主备的服务器的关系。 4、能够理解主master和备backup服务器关系 5、能够实现主备服务器高可用配置&#xff1a;主服务…

Java——》线程间是如何通信的

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

鸿蒙系列-如何使用DevEco分析app的性能

如何使用DevEco分析app的性能 性能优化、启动优化、内存优化、FPS监测、性能分析&#x1f9d0; 在鸿蒙OpenHarmony开发过程中&#xff0c;开发者开发的代码&#xff08;Stage 模型&#xff09;通常以调用 ArkUI 框架的代码为主&#xff0c;主要优化的代码部分也在其中&#x…

信息安全保障

文章目录 目录 文章目录 一.信息安全的定义 信息安全的概念 狭义的信息安全概念&#xff1a; 广义的信息安全问题&#xff1a; 信息系统安全问题的根源&#xff1a; 威胁情报 威胁情报的作用&#xff1a; 信息安全的特征 二.信息系统的属性 三.信息安全的视角 国家视角下的信…

LlamaIndex:将个人数据添加到LLM

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 LlamaIndex是基于大型语言模型&#xff08;LLM&#xff09;的应用程序的数据框架。像 GPT-4 这样的 LLM 是在大量公共数据集上预先训练的&#xff0c;允许开箱即用的令人难以置信的自然语言处理能力。但是&#xff0c;…

HTML的段落中怎么样显示出标签要使用的尖括号<>?

很简单&#xff1a; 符号 < 用 < 替代&#xff1b; 符号 > 用 > 替代。 示例代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>HTML中怎样打出尖括号</title> </head> <b…