Mysql 服务器选项变量 和 缓存性能优化(重点)

服务器配置


mysqld选项,服务器系统变量和服务器状态变量

https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html

https://mariadb.com/kb/en/full-list-of-mariadb-options-system-and-status-variables/

注意:其中有些参数支持运行时修改,会立即生效;有些参数不支持,且

只能通过修改配置文件,并重启服务器程序生效;有些参数作用域是全局

的,且不可改变;有些可以为每个用户提供单独(会话)的设置

获取mysqld的可用选项列表

mysqld --help --verbose

mysqld --print-defaults 获取默认设置

设置服务器选项方法

  1. 在命令行中设置

shell> ./mysqld_safe --skip-name-resolve=1

  1. 在配置文件my.cnf中设置

skip_name_resolve=1

服务器系统变量


分全局 和 会话两种

获取系统变量

mysql> SHOW GLOBAL VARIABLES;

mysql> SHOW [SESSION] VARIABLES;

mysql> SELECT @@VARIABLES;

在这里插入图片描述

修改服务器变量的值:

mysql> help SET

修改全局变量global:仅对修改后新创建的会话有效;对已经建立的会话无效

mysql> SET GLOBAL system_var_name=value;

mysql> SET @@global.system_var_name=value;

修改会话变量session

mysql> SET [SESSION] system_var_name=value;

mysql> SET @@[session.]system_var_name=value;

在这里插入图片描述

服务器状态变量:


分全局 和 会话两种

状态变量(只读):用于保存mysqld运行中的统计数据的变量,不可更改

mysql> SHOW GLOBAL STATUS;

mysql> SHOW [SESSION] STATUS;

服务器变量SQL_MODE


在这里插入图片描述

SQL_MODE:对其设置可以完成一些约束检查的工作,可分别进行全局的设置或当前会

话的设置,参看:https://mariadb.com/kb/en/library/sql-mode/

常见MODE:

NO_AUTO_CREATE_USER

禁止GRANT创建密码为空的用户

NO_ZERO_DATE

在严格模式,不允许使用‘0000-00-00’的时间

ONLY_FULL_GROUP_BY

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的

NO_BACKSLASH_ESCAPES

反斜杠“\”作为普通字符而非转义字符

PIPES_AS_CONCAT

将"||"视为连接操作符而非“或运算符”

查询的执行路径


在这里插入图片描述

缓存

=====================================================================

1.查询缓存( Query Cache )原理

缓存SELECT操作或预处理查询的结果集和SQL语句,当有新的SELECT语句或预处理查询语句请求,先去查询缓存,判断是否存在可用的记录集,

判断标准:与缓存的SQL语句,是否完全一样,区分大小写

2.优缺点

不需要对SQL语句做任何解析和执行,当然语法解析必须通过在先,直接从Query Cache中获得查询结果,提高查询性能

查询缓存的判断规则,不够智能,也即提高了查询缓存的使用门槛,降低效率

查询缓存的使用,会增加检查和清理Query Cache中记录集的开销

3.哪些查询可能不会被缓存

1.查询语句中加了SQL_NO_CACHE参数

2.查询语句中含有获得值的函数,包含自定义函数,如:NOW() CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ()等

3.对系统数据库的查询:mysql、information_schema 查询语句中使用SESSION级别变量或存储过程中的局部变量

4.查询语句中使用了LOCK IN SHARE MODE、FOR UPDATE的语句,查询语句中类似SELECT …INTO 导出数据的语句

5.对临时表的查询操作;存在警告信息的查询语句;不涉及任何表或视图的查询语句;某用户只有列级别权限的查询语句

6.事务隔离级别为Serializable时,所有查询语句都不能缓存

4.查询缓存相关的服务器变量***

1.query_cache_min_res_unit:查询缓存中内存块的最小分配单位默认4k,较小值会减少浪费,但会导致更频繁的内存分配操作,较大值会带来浪费,会导致碎片过多,内存不足

2.query_cache_limit单个查询结果能缓存的最大值,默认为1M,对于查询结果过大而无法缓存的语句,建议使用SQL_NO_CACHE

3.query_cache_size:查询缓存总共可用的内存空间;单位字节,必须是1024的整数倍,最小值40KB,低于此值有警报

4.query_cache_wlock_invalidate:如果某表被其它的会话锁定,是否仍然可以从查询缓存中返回结果,默认值为OFF,表示可以在表被其它会话锁定的场景中继续从缓存返回数据;ON则表示不允许

5.query_cache_type是否开启缓存功能,取值为ON, OFF, DEMAND

在这里插入图片描述

设置query_cache_size缓存空间

1.在mysql中必须1024的倍数

2.在配置文件中可以指定任意大小,单位

SELECT语句的缓存控制

SQL_CACHE:显式指定存储查询结果于缓存之中

SQL_NO_CACHE:显式查询结果不予缓存

query_cache_type参数变量

1.query_cache_type的值为OFF或0时,查询缓存功能关闭

2.query_cache_type的值为ON或1时,查询缓存功能打开,SELECT的结果符合缓存条件即会缓存,否则,不予缓存,显式指定SQL_NO_CACHE,不予缓存,此为默认值

3. query_cache_type的值为DEMAND或2时,查询缓存功能按需进行,显式指定SQL_CACHE的SELECT语句才会缓存;其它均不予缓存

参看:https://mariadb.com/kb/en/library/server-system-variables/#query_cache_type

https://dev.mysql.com/doc/refman/5.7/en/query-cache-configuration.html

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
-0moBDCaa-1715843796460)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值