数据库参数
MySQL中维护着很多系统参数。其中部分是动态参数(可以在系统运行期间设置或修改),部分是只读参数(只能在系统启动前设置,系统运行期间无法进行修改操作);部分是全局参数(影响系统整体的操作),部分是会话参数(影响当前连接的操作)。
-- 设置全局参数
set global max_connections = 500;
-- 设置会话参数
set sql_log_bin = 0;
📢 在 MySQL 中,在配置参数时,0 一般代表 false,反之,1 代表 true
但是设置全局参数后有个问题,如果数据库服务发生重启,该参数设置会变成默认值或者配置文件指定的参数值。所以为了永久保存,可以在动态修改参数之后修改配置文件,或者使用persist
来修改和持久化参数。
set persist max_connections = 1001;
该操作不只修改参数,同样会将参数值写入mysqld-auto.cnf
,该配置一般位于data
目录下。
[amias@amiasdb01 data]$ sudo cat mysqld-auto.cnf | python3 -m json.tool
{
"Version": 1,
"mysql_server": {
"max_connections": {
"Value": "1001",
"Metadata": {
"Timestamp": 1705562936860198,
"User": "dba",
"Host": "localhost"
}
}
}
}
当然,有些变量也是无法通过persist
持久化的。比如只读参数没法持久化。
mysql> set persist server_uuid = 'amias1';
ERROR 1238 (HY000): Variable 'server_uuid' is a read only variable
用户连接会话参数存储在哪?
这些参数存储在performance_schema.variables_by_thread
中,我们可以通过THREAD_ID
获取指定连接线程的用户会话参数。
select * from performance_schema.variables_by_thread vbt where THREAD_ID = 54293;
📢 在MySQL中,
Thread ID
和Processlist ID
的可能会有点混乱,有些表中的Thread ID
反而是processlist
中的Processlist ID
,有时候不可以单凭名称判断ID指代哪一个;但是此处是THREAD_ID
。
可以通过下面查询获连接线程ID,或者通过PROCESSLIST_ID
在performance_schema.threads
中查询THREAD_ID
。
select ps_current_thread_id();
在日常工作中,为了排查问题,我们可能需要查看某个连接的某些参数值;比如事务并发问题可能需要排查该用户连接设置的隔离级别参数是否符合我们产线的隔离级别设置。假如在数据库中设置的隔离级别是RC
(读已提交),但是有些客户端默认的隔离级别是RR
(可重复读),结果项目上线后发现系统的并发能力并不能满足当前业务需求。
原文始发于微信公众号(小新数据库):MySQL 参数简介
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207520.html