MySQL中结构化系统变量介绍

结构化变量(structured variable)与常规系统变量(regular system variable)之间的两个主要区别。以下是这两个区别的详细解释:

  1. 值是一个结构

  • 常规系统变量通常存储单一的值,比如一个整数、浮点数、字符串等。
  • 结构化变量则存储一个结构(或称为记录、结构体等),这个结构包含多个组件(或称为字段、成员等),每个组件都可以存储不同类型的数据。这些组件通常用于指定与某个特定功能或资源密切相关的多个参数。例如,一个用于配置数据库连接的结构化变量可能包含主机名、端口号、用户名、密码等组件。

     2.可能有多个实例

  • 常规系统变量通常在整个系统或应用程序中只有一个实例,代表一个全局设置或状态。
  • 结构化变量则可能有多个实例,每个实例都有一个不同的名称,并且可能引用服务器上维护的不同资源。例如,在一个Web服务器上,可能有多个数据库连接配置,每个配置都是一个结构化变量的实例。每个实例都包含不同的参数值,用于连接到不同的数据库服务器或数据库实例。

MySQL 支持一种结构化变量类型,它用于指定控制键缓存(key cache)操作的参数。一个键缓存结构化变量通常包含以下组件:

  • key_buffer_size:

指定键缓存的总大小。这个值定义了MySQL服务器为键缓存分配的内存量。增加此值可能会提高性能,但也会增加内存使用。

  • key_cache_block_size:

指定键缓存块的大小。块是键缓存的基本存储单位,用于存储索引块。选择合适的块大小可以基于你的工作负载和存储引擎特性。

  • key_cache_age_threshold:

定义了一个“老”块的阈值。当块被访问后,其“年龄”会随时间而增长。如果一个块的年龄超过了这个阈值,并且缓存已满,那么这个块可能会成为被替换的候选者。

  • key_cache_division_limit:

用于多缓存分区。它定义了在将缓存分成多个分区时,每个分区可以使用的最大百分比。

要引用结构化变量实例的组件,可以使用instance_name.component_name格式的复合名称。示例:

hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size

在 MySQL 中,对于每个结构化系统变量,都会预先定义一个名为 default 的实例。当你引用结构化变量的组件而不指定任何实例名时,MySQL 会默认使用 default 实例。

例如,key_buffer_size 实际上是 default.key_buffer_size 的简写,它们指的是同一个系统变量。这是因为 MySQL 会自动将没有指定实例名的组件解析为 default 实例的组件。

结构化变量实例和组件遵循以下命名规则:

  • 唯一性:

对于给定类型的结构化变量,每个实例的名称在该类型变量内部必须是唯一的。但是,不同类型的结构化变量之间实例名称不需要唯一。例如,多种不同类型的结构化变量都可以有一个名为 default 的实例。

  • 组件名的唯一性:

每种类型的结构化变量的组件名称必须在所有系统变量名称中唯一。如果不同类型的结构化变量可以共享组件成员名称,那么在没有指定实例名的情况下引用成员名时,将不清楚应该使用哪个默认结构化变量。

  • 实例名的标识符规则:

如果结构化变量实例名称不是合法的未引用标识符(unquoted identifier),那么您需要使用反引号''来引用它。例如,hot-cache不是一个合法的未引用标识符,因为它包含连字符(-),但'hot-cache`(用反引号括起来)是合法的。

  • 保留字作为实例名:

globalsession 和 local 不能作为结构化变量的实例名,这是为了避免与非结构化系统变量(如 @@GLOBAL.var_name)的引用语法发生冲突。

这些规则确保了结构化变量实例和组件名称在 MySQL 系统中的一致性和明确性,从而简化了对它们的引用和管理。

目前,前两个规则不可能被违反,因为唯一的结构化变量类型是用于密钥缓存的类型。如果将来创建其他类型的结构化变量,则这些规则可能具有更大的意义。

除了一个例外,您可以在任何可能出现简单变量名的上下文中使用复合名称来引用结构化变量组件。例如,可以使用命令行选项将值分配给结构化变量:

$> mysqld --hot_cache.key_buffer_size=64K

在选项文件中,使用以下语法:

[mysqld]
hot_cache.key_buffer_size=64K

当您以某种选项启动 MySQL 服务器时,如果那个选项是用来配置键缓存(key cache)的,它可能会在默认的键缓存(默认大小为8MB)之外再创建一个名为 hot_cache 的键缓存,其大小为64KB。

假设您以以下方式启动 MySQL 服务器:

$> mysqld --key_buffer_size=256K \--extra_cache.key_buffer_size=128K \--extra_cache.key_cache_block_size=2048

在这种情况下,服务器将默认密钥缓存的大小设置为256KB。(您也可以写入--default.key_buffer_size=256K。)此外,服务器还创建了第二个名为extra_cache的密钥缓存,其大小为128KB。同时,这个 extra_cache 的块缓冲区(block buffers)大小被设置为 2048 字节,用于缓存表索引块。

以下示例以三个不同的密钥缓存启动服务器,它们的大小比例为3:1:1:

$> mysqld --key_buffer_size=6M \--hot_cache.key_buffer_size=2M \--cold_cache.key_buffer_size=2M

结构化变量值也可以在运行时设置和检索。例如,要将名为hot_cache的密钥缓存设置为10MB的大小,请使用以下任一语句:

mysql> SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql> SET @@GLOBAL.hot_cache.key_buffer_size = 10*1024*1024;

要检索缓存大小,请执行以下操作:

mysql> SELECT @@GLOBAL.hot_cache.key_buffer_size;

但是,以下语句不起作用。变量不会被解释为复合名称,而是LIKE模式匹配操作的简单字符串:

mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';

这是一个例外,可以在任何可能出现简单变量名的地方使用结构化变量名。

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

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

相关文章

【XCharts插件】4-2、配置项手册(v3.0)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 XCharts插件是一款基于UGUI的功能强大、易用、参数可配置的数据可视化图表插件。 【Unity3D…

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容…

使用js实现excel的读取展示以及导出

代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel"st…

liunx打开谷歌报错

liunx打开谷歌报错[48526:48526:0624/173553.311113:ERROR:zygote_host_impl_linux.cc(99)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. 这个错误信息表明你尝试以root用户身份运行Chrome浏览器&#xff0c;但是没有使用–no-san…

现身说法,AI小白的大模型学习过程

导读 写这篇文章的初衷&#xff1a;作为一个AI小白&#xff0c;把我自己学习大模型的学习路径还原出来&#xff0c;包括理解的逻辑、看到的比较好的学习材料&#xff0c;通过一篇文章给串起来&#xff0c;对大模型建立起一个相对体系化的认知&#xff0c;才能够在扑面而来的大…

idea 突然 Cannot resolve symbol ‘xxx‘

解决一&#xff1a;关闭 idea&#xff0c;在文件夹中找到代码所在位置&#xff0c;删除 .idea 文件夹重新打开项目就可以了 解决二&#xff1a;检查 jdk 版本 解决三&#xff1a;保存重要文件&#xff0c;重新下载项目代码

接口防篡改+防重放攻击

接口防止重放攻击&#xff1a;重放攻击是指攻击者截获了一次有效请求(如交易请求),并在之后的时间里多次发送相同的请求&#xff0c;从而达到欺骗系统的目的。为了防止重放攻击&#xff0c;通常需要在系统中引入一种机制&#xff0c;使得每个请求都有一个唯一的标识符(如时间戳…

深度学习训练基于Pod和RDMA

目录 ​编辑 引言 RDMA技术概述 InfiniBand iWARP RoCE Pod和容器化环境 深度学习训练与RDMA结合 MPI和RDMA 深度学习框架与RDMA 实战&#xff1a;基于Pod和RDMA的深度学习训练 环境准备 步骤 YAML 性能和优势 结论 引言 随着深度学习在人工智能领域的快速发展…

Linux下命令行文件创建删除、目录创建删除

在Linux命令行下&#xff0c;文件和目录的创建与删除是通过一系列基础命令完成的&#xff0c;这些命令对于日常的系统管理和文件操作至关重要。 下面将详细介绍这些命令的功能和使用方法。 普通文件的创建与删除 创建文件 touch命令&#xff1a;主要用于创建一个空文件&…

使用Tauri+vite+koa2+mysql开发了一款待办效率应用

&#x1f389;使用Taurivitekoa2mysql开发了一款待办效率应用 &#x1f4dd;项目概述 这是一个基于taurivite的应用&#xff0c;它采用了一些最新的前端技术&#xff0c;包括 Tauri、Vue3、Vite5、koa2 和 mysql。它提供了丰富的效率管理工具。 应用地址&#xff1a;https:/…

Laravel依赖注入全解析:构建灵活应用的秘诀

Laravel依赖注入全解析&#xff1a;构建灵活应用的秘诀 引言 Laravel框架以其优雅的语法和强大的功能著称&#xff0c;其中依赖注入&#xff08;Dependency Injection&#xff09;是其核心特性之一。依赖注入是一种设计模式&#xff0c;用于减少代码间的耦合度&#xff0c;提…

Openldap安装部署及Gitea简单配置使用

Openldap安装部署及Gitea简单配置使用 一.安装Openldap #拉取镜像 docker pull osixia/openldap:latestdocker run \ -d \ -p 389:389 \ -p 636:636 \ -v /home/data/openldap/local:/usr/local/ldap \ -v /home/data/openldap/lib:/var/lib/ldap \ -v /home/data/openldap/s…

OceanBase 列存中多列过滤性能解析

今天有同事问我&#xff0c;列存大宽表场景下&#xff0c;如果在多个列上有等值过滤条件&#xff0c;OceanBase 的性能是不是无法满足要求&#xff1f; Hi 晓楚&#xff0c;帮评估个OTS替换场景 大概1亿大宽表&#xff0c;查询姿势就是任意字段的组合&#xff0c;进行等值查询g…

海外青云私有云:企业的数字化转型得力助手

在全球化日益加深的今天&#xff0c;海外企业对于云计算的需求也愈发迫切。青云(QingCloud)作为一家领先的云计算服务提供商&#xff0c;其私有云产品在海外市场上受到了广泛的关注和认可。那么&#xff0c;海外青云私有云究竟有何用处呢?本文将从多个角度为您科普。 首先&…

Java高级重点知识点-10-Object类

文章目录 Object类(java.lang) Object类(java.lang) Object类是Java语言中的根类&#xff0c;即所有类的父类 重点&#xff1a; public String toString()&#xff1a;返回该对象的字符串表示。 public class User {private String username;private String password;public…

地雷数量求解(二维数组)

问题描述 为了保证边境重要的军事基地不会被敌人入侵&#xff0c;我军在敌军的必经之路上埋了 &#x1d465; 颗地雷&#xff0c;已知这片必经之地是 &#x1d45b;&#x1d45a; 的方阵形状&#xff0c;为了让我们的友军知道哪些地方是有地雷的&#xff0c;我军工兵绘制了一张…

LeetCode刷题之HOT100之乘积最大子数组

2024/6/25 六月也来到了末尾&#xff0c;刷题也刷了一个半月左右。收获还是有的&#xff0c;最起码打字快了哈哈&#xff0c;做题啦&#xff01; 1、题目描述 2、逻辑分析 一眼动态规划。 解题思路 遍历数组时计算当前最大值&#xff0c;不断更新令nowMax 为当前最大值&…

java的线程

定义&#xff1a;在java中&#xff0c;线程是程序中一个独立的执行流&#xff0c;它拥有自己的核心运行逻辑和状态。在操作系统中&#xff0c;线程是进程的一部分&#xff0c;是程序执行的最小单元。 重要性&#xff1a;多线程使得程序能够更好的利用CPU资源&#xff0c;同时处…

AI大模型企业应用实战:Prompt让LLM理解知识

1 Prompt Prompt 可理解为指导AI模型生成特定类型、主题或格式内容的文本。 NLP中&#xff0c;Prompt 通常由一个问题或任务描述组成&#xff0c;如“给我写一篇有关RAG的文章”&#xff0c;这句话就是Prompt。 Prompt赋予LLM小样本甚至零样本学习的能力&#xff1a; LLM能力…

提升LabVIEW开发效率的技术与工具

LabVIEW是一种强大的图形化编程环境&#xff0c;广泛应用于数据采集、仪器控制和工业自动化领域。提高LabVIEW开发效率对项目的成功至关重要。本文将从代码复用、开发工具、编程规范、测试与调试、团队协作和学习资源六个方面&#xff0c;详细介绍提升LabVIEW开发效率的技术与工…