MySQL中客户端会话状态的服务器跟踪描述

MySQL服务器实现了几个会话状态跟踪器。客户端可以使这些跟踪器能够接收会话状态更改的通知。

1 会话状态跟踪器的用途

会话状态跟踪器具有以下用途:

  • 以便于会话迁移。
  • 便于交易切换。

跟踪器机制为MySQL连接器和客户端应用程序提供了一种方法,以确定是否有任何会话上下文可用于允许从一台服务器到另一台服务器的会话迁移。(要在负载平衡的环境中更改会话,在决定是否可以进行切换时,有必要检测是否存在需要考虑的会话状态。)

跟踪器机制允许应用程序知道何时可以将事务从一个会话移动到另一个会话。事务状态跟踪可以实现这一点,这对于希望将事务从繁忙的服务器移动到负载较低的服务器的应用程序非常有用。例如,管理客户端连接池的负载平衡连接器可以在池中的可用会话之间移动事务。

但是,会话切换不能在任意时间进行。如果会话处于已完成读取或写入的事务的中间,则切换到不同的会话意味着原始会话上的事务回滚。只有当事务中尚未执行任何读取或写入操作时,才能进行会话切换。

交易可能合理切换的示例:

  •  START TRANSACTION后立即
  • COMMIT AND CHAIN之后

除了了解事务状态之外,还可以了解事务特性,以便在事务移动到不同会话时使用相同的特性。以下特征与此相关:

READ ONLY
READ WRITE
ISOLATION LEVEL
WITH CONSISTENT SNAPSHOT

2 可用的会话状态跟踪器

为了支持会话跟踪活动,可以为以下类型的客户端会话状态信息提供通知:

(1)对客户端会话状态的这些属性的更改:

  • 默认架构(数据库)。
  • 系统变量的会话特定值。
  • 用户定义的变量。
  • 临时表格。
  • 准备好的发言。

  session_track_state_change系统变量控制该跟踪器。

(2)更改为默认架构名称。session_track_schema系统变量控制该跟踪器。

(3)更改系统变量的会话值。session_track_system_variables系统变量控制该跟踪器。需要SENSITIVE_VARIABLES_OBSERVER权限来跟踪敏感系统变量值的更改。

(4)可用的GTID。session_track_gtids系统变量控制该跟踪器。

(5)有关事务状态和特性的信息。session_track_transaction_info系统变量控制该跟踪器。

这些系统变量允许控制哪些更改通知发生,但不提供访问通知信息的方法。通知发生在MySQL客户端/服务器协议中,该协议在OK数据包中包含跟踪器信息,以便检测会话状态的更改。

3 C API会话状态跟踪器支持

为了使客户端应用程序能够从服务器返回的OK数据包中提取状态变化信息,MySQL C API提供了一对功能:

  • mysql_session_track_get_first()获取从服务器接收的状态更改信息的第一部分。
  • mysql_session_track_get_next()获取从服务器接收的任何剩余状态更改信息。在成功调用mysql_session_track_get_first()之后,只要返回成功,就重复调用此函数。

4 测试套件会话状态跟踪器支持

mysqltest程序具有disable_session_track_info和enable_session\utrack_ininfo命令,用于控制是否发生会话跟踪器通知。您可以使用这些命令从命令行查看SQL语句产生的通知。假设一个文件testscript包含以下mysqltest脚本:

DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1 (i INT, f FLOAT);
--enable_session_track_info
SET @@SESSION.session_track_schema=ON;
SET @@SESSION.session_track_system_variables='*';
SET @@SESSION.session_track_state_change=ON;
USE information_schema;
SET NAMES 'utf8mb4';
SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ WRITE;
START TRANSACTION;
SELECT 1;
INSERT INTO test.t1 () VALUES();
INSERT INTO test.t1 () VALUES(1, RAND());
COMMIT;

按如下方式运行脚本,以查看启用的跟踪器提供的信息。。

$> mysqltest < testscript
DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1 (i INT, f FLOAT);
SET @@SESSION.session_track_schema=ON;
SET @@SESSION.session_track_system_variables='*';
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- session_track_system_variables
-- *

SET @@SESSION.session_track_state_change=ON;
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- session_track_state_change
-- ON

USE information_schema;
-- Tracker : SESSION_TRACK_SCHEMA
-- information_schema

-- Tracker : SESSION_TRACK_STATE_CHANGE
-- 1

SET NAMES 'utf8mb4';
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- character_set_client
-- utf8mb4
-- character_set_connection
-- utf8mb4
-- character_set_results
-- utf8mb4

-- Tracker : SESSION_TRACK_STATE_CHANGE
-- 1

SET @@SESSION.session_track_transaction_info='CHARACTERISTICS';
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
-- session_track_transaction_info
-- CHARACTERISTICS

-- Tracker : SESSION_TRACK_STATE_CHANGE
-- 1

-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
--

-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- ________

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET TRANSACTION READ WRITE;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ WRITE;

START TRANSACTION;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
-- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION READ WRITE;

-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T_______

SELECT 1;
1
1
-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T_____S_

INSERT INTO test.t1 () VALUES();
-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T___W_S_

INSERT INTO test.t1 () VALUES(1, RAND());
-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- T___WsS_

COMMIT;
-- Tracker : SESSION_TRACK_TRANSACTION_CHARACTERISTICS
--

-- Tracker : SESSION_TRACK_TRANSACTION_STATE
-- ________

ok

在START TRANSACTION语句之前,执行两个SET TRANSACTION声明,为下一个事务设置隔离级别和访问模式特征。SESSION_TRACK_TRANSACTION_CHARACTERISTICS值指示已设置的下一个事务值。

在结束事务的COMMIT语句之后,SESSION_TRACK_transaction_CHARACTERISTICS值报告为空。这表示在事务开始之前设置的下一个事务特性已经重置,并且应用会话默认值。要跟踪对这些会话默认值的更改,请跟踪transaction_inisolation和transaction_read_only系统变量的会话值。

要查看有关GTID的信息,请使用SESSION_TRACK_GTIDs系统变量启用SESSION_TRACK_GTIDs跟踪器。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新版若依-RuoYi-Vue3-PostgreSQL前后端分离项目部署手册教程

项目简介: RuoYi-Vue3-PostgreSQL 是一个基于 RuoYi-Vue3 框架并集成 PostgreSQL 数据库的项目。该项目提供了一套高效的前后端分离的开发解决方案&#xff0c;适用于中小型企业快速构建现代化的企业级应用。此项目结合了 RuoYi-Vue-Postgresql 和 RuoYi-Vue3 的优点&#xff0…

libaom 编码器实验 AV1 标准 SVC 分层编码

SVC编码 视频SVC编码&#xff0c;即Scalable Video Coding&#xff08;可适性视讯编码或可分级视频编码&#xff09;&#xff0c;是H.264/MPEG-4 AVC编码的一种扩展&#xff0c;它提供了更大的编码弹性&#xff0c;并且具有时间可适性&#xff08;Temporal Scalability&#x…

React Hooks:上天在提醒你,别再用Class组件了!

React Hooks&#xff1a;上天在提醒你&#xff0c;别再用Class组件了&#xff01; React Hooks 的出现可以说是前端界的一场革命。它不仅让我们告别了繁琐的 Class 组件&#xff0c;还让代码变得更加简洁、易读、易维护。如果你还在固守 Class 组件的阵地&#xff0c;那么这篇…

vue3项目实战中的接口调用

vue项目组成 一个项目往往由这几个部分组成。&#x1f447;&#x1f447; 其中在src文件夹中的内容如下&#x1f447;&#x1f447; 我们常常将接口文件&#xff0c;新建在文件夹src下&#xff0c;一般命名为api&#xff0c;api内的文件便是接口文件。&#x1f447;&#x1f4…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

OpenCV基础(2)

目录 滤波处理 均值滤波 基本原理 函数用法 程序示例 高斯滤波 基本原理 函数用法 程序示例 中值滤波 基本原理 函数用法 程序示例 形态学 腐蚀 膨胀 通用形态学函数 前言&#xff1a;本部分是上一篇文章的延续&#xff0c;前面部分请查看&#xff1a;OpenCV…

MyBatis的底层机制

手写MyBatis底层机制 读取配置文件&#xff0c;得到数据库连接 思路 引入必要的依赖需要写一个自己的config.xml文件&#xff0c;在里面配置一些信息&#xff0c;driver&#xff0c;url &#xff0c;password&#xff0c;username需要编写Configuration类&#xff0c;对 自己…

服务器数据恢复—同品牌不同系列服务器raid5阵列数据恢复方案分析

RAID5磁盘阵列数据恢复案例一&#xff1a; 服务器数据恢复环境&#xff1a; 一台某品牌LH6000系列服务器&#xff0c;通过NetRaid阵列卡将4块硬盘组建为一组RAID5磁盘阵列。操作系统都为Window server&#xff0c;数据库是SQLServer。 服务器故障&#xff1a; LH6000系列服务器…

四、嵌入式技术(考点篇)试题(1)

我选择C&#xff0c;实际答案选B&#xff0c;答案给出的理由是&#xff0c;SoC是片上系统&#xff0c;包含完整系统和嵌入式软件全部内容&#xff0c;B的说法有点片面。 明显选C&#xff0c;嵌入式跟通用性不太沾边。 嵌入式OS特征&#xff1a;裁剪配置安全可靠实时高确定&…

Python基础知识——(001)

文章目录 P4——3. 程序设计语言的分类 1. 程序设计语言 2. 编译与解释 P5——4. Python语言的简介与开发工具 1. Python语言的简介 2. Python语言的发展 3. Python语言的特点 4. Python的应用领域 5. Python的开发工具 P6——5. IPO编程方式 IPO程序编写方法 P7——6. print函…

大模型隐私窃取攻击

前言 对于大模型风险&#xff0c;目前大家更多关注的还是越狱攻击。隐私这一块&#xff0c;可能国内还不如欧美重视&#xff0c;在安全的学术四大会议论文中&#xff0c;有时候甚至AI隐私的论文比AI安全的论文更多。但实际上&#xff0c;除了越狱之外&#xff0c;另外一大风险…

监控电脑软件【2024最新】|6款软件保姆式解析!

在数字化办公日益普及的今天&#xff0c;很多企业为了更好的提升员工的工作效率和保障企业的数据安全&#xff0c;开始给自己的企业布局电脑监控软件。 但市面上的电脑监控软件种类繁多复杂&#xff0c;为了更好的保障企业利用&#xff0c;小编推荐了以下几款电脑监控软件供大…

阶段三:项目开发---大数据开发运行环境搭建:任务4:安装配置Spark集群

任务描述 知识点&#xff1a;安装配置Spark 重 点&#xff1a; 安装配置Spark 难 点&#xff1a;无 内 容&#xff1a; Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop …

Python自动化测试系列[v1.0.0][高效自动化设计]

Python多线程应用于自动化测试 将多线程在测试巧妙地应用&#xff0c;确实会带来很多好处&#xff0c;并且这是充分利用机器资源执行高效率测试很好的方式 # -*- coding: utf-8 -*- import threading from time import ctime import time from selenium import webdriverdef …

【c语言】玩转文件操作

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 引言 一、文件的打开和关闭 1.流 2.标准流 3.文本文件和二进制文件 4.控制文件打开与关闭的函数 二、文件的顺序读写 三、文件的随机读写 1…

7月学术会议:7月可投的EI国际会议

随着科技的迅猛发展&#xff0c;学术交流与研讨成为了推动科研进步的重要途径。进入7月&#xff0c;众多高质量的EI国际会议纷纷拉开帷幕&#xff0c;为全球的科研工作者提供了一个展示研究成果、交流学术思想的平台。以下&#xff0c;我们将详细介绍一些在7月可投的EI国际会议…

Java集合升序降序、转Set的方法

Collections.sort(list,Comparator.comparing(OcApplySquareVo::getApplyName).reversed()); 集合转set /** 集合转set */Set<String> pkCodeSet rows.stream().map(RailwayWeighBookResult.RailwayWeighBook::getPkCode).collect(Collectors.toSet());

猫咪浮毛太多怎么处理?6年铲屎官最值得买的猫毛空气净化器分享

作为一位拥有6年铲屎经验的铲屎官&#xff0c;家中既有宝宝又有毛孩子的铲屎官家庭来说&#xff0c;空气中的宠物异味和猫毛不仅影响生活质量&#xff0c;更关乎家人的健康。普通空气净化器虽然能够提供基本的空气净化&#xff0c;但对于养猫家庭的特定需求&#xff0c;如去除宠…

Pytest单元测试系列[v1.0.0][Pytest基础]

Pytest安装与配置 和Unittest一样&#xff0c;Pytest是另一个Python语言的单元测试框架&#xff0c;与Unittest相比它的测试用例更加容易编写、运行方式更加灵活、报错信息更加清晰、断言写法更简洁并且它可以运行有unittest和nose编写的测试用例。 Pytest 安装 启动命令行&…

A股本周在3000点以下继续筑底,本周依然继续探底?

夜已深&#xff0c;市场传来了3个浓烈的消息&#xff0c;炸锅了&#xff0c;恐有大事发生&#xff0c;马上告诉所有人&#xff1a; 消息面&#xff1a; 1、中国经济周刊首席评论员钮文新称&#xff1a;不要等中小投资者都彻底希望&#xff0c;销户离场了&#xff0c;才发现该…