带你了解MySQL系统变量配置基础

数据库 MySQL
个人认为可以理解成MySQL在启动或者运行过程中读取的一些参数问题,利用这些参数来启动服务、响应或者支持用户的请求等。

带你了解MySQL系统变量配置基础

MySQL变量的概念

个人认为可以理解成MySQL在启动或者运行过程中读取的一些参数问题,利用这些参数来启动服务、响应或者支持用户的请求等

变量的配置

如果打算长期使用,应该写入配置文件,而不是在***指定,因为在***设置的变量会随着MySQL服务的重启而恢复默认值

另外要注意是设置的当前Session的变量还是全局的变量。

变量单位

不同的变量的单位不同,比如table_cache是指缓存的表的个数,而key_buffer_size则是以字节为单位

另外还有以页或者百分比为单位的变量

许多变量可以通过后缀制订单位,

比如1M表示一百万字节,在配置文件中或者在命令行下有效,

但是在使用set命令的时候,这些单位就无效,必须使用数字,单位为字节

比如:set @@session.sort_buffer_size = 1024*1024或者set @@session.sort_buffer_size = 1048576

但是配置文件中设置的时候就不能使用表达式

变量的作用域 

有些变量的作用是服务器级别的,有些是Session级别的,剩下的的一些是对象级别的。

许多回话的变量是全局变量相等,可以为是默认值

如果改变会话级的变量,它只影响当前Session,当前Session关闭后当前设置的参数会失效

举例:

query_cache_size是全局级的

sort_buffer_size可以在全局级设置,每个Session也可以独立设置

join_buffer_size可以在全局级设置,也可以在Session级设置,一个查询中如果有多个表关联,可以为每个关联分配一个join buffer

除了在配置文件中设置变量之外,(部分变量)也可以在运行时修改,MySQL称之为动态配置变量

比如: 

set global sort_buffer_size = 1024*1024*1024

set sort_buffer_size = 1024*1024*1024

set @@sort_buffer_size = 1024*1024*1024

set @@session.sort_buffer_size = 1024*1024*1024

set @@global.sort_buffer_size = 1024*1024*1024

常见变量的设置与获取资源说明:

key_buffer_size

为键缓冲区(key buffer,也叫键缓存key cache)分配所有指定的空间,

操作系统不会为该设置立马分配内存,而是等到使用的时候才分配。

table_cache_size

当有线程打开表时,MySQL会检查这个标量的值,如果大于缓存中表的数量,线程可以把***打开的表放入缓存,

如果该值比缓存中的表数小,MySQL将从缓存中删除不常用的表

thread_cache_size

当有连接关闭时,MySQL检查缓存中是否还有空间来缓存线程。

如果有:则缓存改线程已被下次连接重用

如果没有:他讲销毁改线程而不再缓存,

缓存中使用的线程数,不会立即减少,只有在新的连接删除缓存中的一个线程并使用后才会减少

MySQL只在关闭连接时候才在缓冲中增减线程,在创建新的连接的时候才从缓存中删除线程

query_cache_size

MySQL启动的时候,一次性分配并且初始化这块内存,如果修改这个变量(即使设置为与当前值一样)

MySQL会立刻删除所有缓存的查询,重新分配这片缓存到指定大小,并且重新初始化内存

read_buffer_size

MySQL只会在查询需要时才会为该缓存分配内存,并且会一次性分配改参数指定大小的全部内存

read_rnd_buffer_size

MySQL只会在查询需要时才会为该缓存分配内存,并且只分配需要的内存大小而不是全部指定的大小

应该叫做,max_read_rnd_buffer_size

sort_buffer_size

MySQL只会在查询需要做排序操作的时候拆毁为该缓存分配内存,

一旦需要排序,MySQL就会立刻分配给改参数指定大小的全部内存,而不管排序是否需要这么大的内存。

由此可见,不用的变量,设置之后的启用时间,启用原理,生效方式等都是有一定差异的。

设置变量的潜在的影响

动态设置全局变量可能会导致意外的副作用。

某些变量改变后会立即生效,比如从缓冲中刷新赃块,从而引起服务器相应请求的一些不稳定甚至更严重的问题。 

责任编辑:庞桂玉 来源: 数据分析与开发
相关推荐

2021-09-29 10:00:07

Go语言基础

2021-10-13 10:00:52

Go语言基础

2020-10-22 11:15:47

Go语言变量

2021-12-10 10:29:07

在线客服系统

2010-10-14 11:41:03

mysql变量

2023-09-06 14:57:46

JavaScript编程语言

2021-01-26 23:46:32

JavaScript数据结构前端

2019-10-22 08:30:26

LinuxFHS进程

2021-06-07 07:59:37

MySQL 全局锁线程

2018-09-04 16:20:46

MySQ索引数据结构

2018-07-02 15:18:39

Linux文件系统

2021-08-14 10:01:43

Python条件语句Python基础

2018-09-17 16:30:24

数据库MySQL小技巧

2020-08-31 10:48:11

MySQL数据库数据库技巧

2022-09-26 11:30:40

MQTT协议客户端协议

2019-09-27 09:40:06

ElvishShellLinux

2010-07-05 16:20:32

NetBEUI协议

2018-11-13 09:56:52

TomcatServerWeb应用服务器

2018-10-23 10:15:03

MySQL数据库技巧

2018-10-24 15:55:19

MySQL数据库技巧
点赞
收藏

51CTO技术栈公众号