mysql8.0新特性详解

一、my.ini或my.cnf的全局参数

 一个连接最少占用内存是256K,最大是64M,如果一个连接的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上。

#最大连接数
max_connections=3000
#最大用户连接数
max_user_connections=2980

如果MySQL的连接数达到max_connections时,新的请求将会被存在堆栈中,等待某一连接释放资源,该堆栈数量即back_log,如果等待连接的数量超过back_log,将被拒绝。

back_log=300

指的是app应用通过jdbc连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。

wait_timeout=300

指的是mysql client连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。

interactive_timeout=300

此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍,如果超过配置并发数,则需要排队,这个值不宜太大,不然可能会导致线程之间锁争用严重,影响性能。

innodb_thread_concurrency=64

 innodb存储引擎buffer pool缓存大小,一般为物理内存的60%-70%。

innodb_buffer_pool_size=40G

行锁锁定时间,默认50s,根据公司业务定,没有标准值。

innodb_lock_wait_timeout=10
#连接级别参数 一个connection消耗4M内存
sort_buffer_size=4M
join_buffer_size=4M

#redo log直接写入磁盘
innodb_flush_log_at_trx_commit=1
#binlog直接同步到磁盘
sync_binlog=1

二、mysql8.0新特性详解

1、新增降序索引

create table t1(c1 int,c2 int,index idx_c1_c2(c1,c2 desc));#c2为降序排列
insert into t1 (c1,c2) values(1, 10),(2,50),(3,50),(4,100),(5,80);

explain select * from t1 order by c1,c2 desc;
explain select * from t1 order by c1 desc,c2;
explain select * from t1 order by c1 desc,c2 desc;
explain select * from t1 order by c1,c2;

 第一条sql就是用到降序索引,第二条sql是反向扫描索引,第三、四条sql没有按照索引相同或相反方向排序,所以是文件排序

2、group by不再隐式排序

mysql8.0之前的版本都会根据group by的字段做排序,mysql8.0则不会, 排序需要自己指定排序列

3、增加隐藏索引

有时候我们想删除索引,而又不确定索引是不是真的没地方用到了,可以先设置索引不可见

create table t2(c1 int, c2 int, index idx_c1(c1), index idx_c2(c2) invisible);

explain select * from t2 where c1=1;
explain select * from t2 where c2=1;

 不可见索引字段c2没用到索引

set session optimizer_switch="use_invisible_indexes=on";#在会话级别设置查询优化器可以看到隐藏索引

 再次执行使用c2列作为条件查询就可以用到索引

explain select * from t2 where c2=1;

 4、新增函数索引

create table t3(c1 varchar(10),c2 varchar(10));
create index idx_c1 on t3(c1);     #创建普通索引
create index func_idx on t3((UPPER(c2)));  #创建一个大写的函数索引

explain select * from t3 where upper(c1)='TEST';
explain select * from t3 where upper(c2)='ZHUGE';  #使用了函数索引

 5、innodb存储引擎select for update跳过锁等待

 

6、新增innodb_dedicated_server自适应参数

mysql开启此参数会检测到的内存大小自动配置innodb_buffer_pool_size,innodb_log_file_size等参数,会占用其它应用的内存资源

show variables like '%innodb_dedicated_server%';   #默认是OFF关闭,修改为ON打开

7、死锁检查控制

show variables like '%innodb_deadlock_detect%';  #默认是打开的

8、undo文件不再使用系统表空间

默认创建2个UNDO表空间,不再使用系统表空间。

9、 binlog日志过期时间精确到秒

之前是天,并且参数名称发生变化. 在8.0版本之前,binlog日志过期时间设置都是设置expire_logs_days参数,而在8.0版本中,MySQL默认使用binlog_expire_logs_seconds参数。

10、窗口函数(Window Functions):也称分析函数

# 创建一张账户余额表
CREATE TABLE `account_channel` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '姓名',
  `channel` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '账户渠道',
  `balance` int DEFAULT NULL COMMENT '余额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

# 插入一些示例数据
INSERT INTO `test`.`account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('1', 'test', 'wx', '100');
INSERT INTO `test`.`account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('2', 'test', 'alipay', '200');
INSERT INTO `test`.`account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('3', 'test', 'yinhang', '300');
INSERT INTO `test`.`account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('4', 'test1', 'wx', '200');
INSERT INTO `test`.`account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('5', 'test1', 'alipay', '100');
INSERT INTO `test`.`account_channel` (`id`, `name`, `channel`, `balance`) VALUES ('6', 'test2', 'wx', '500');

现在表数据是这样的

 

一般情况下查询是这样的

 

用窗口函数查询 

 

11、专用窗口函数

  • 序号函数:ROW_NUMBER()、RANK()、DENSE_RANK()
  • 分布函数:PERCENT_RANK()、CUME_DIST()
  • 前后函数:LAG()、LEAD()
  • 头尾函数:FIRST_VALUE()、LAST_VALUE()
  • 其它函数:NTH_VALUE()、NTILE()

12、默认字符集由latin1变为utf8mb4

在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。

13、MyISAM系统表全部换成InnoDB表

将系统表(mysql)和数据字典表全部改为InnoDB存储引擎,默认的MySQL实例将不包含MyISAM表,除非手动创建MyISAM表。

14、元数据存储变动

MySQL 8.0删除了之前版本的元数据文件,例如表结构.frm等文件,全部集中放入mysql.ibd文件里。可以看见下图test库文件夹里已经没有了frm文件。

15、自增变量持久化

自增id情况下,比如当前最大id是8,这时候把id为1的记录id值改成9,再次新增数据时,mysql8.0之前会报错,mysql8.0才解决这个问题

16、DDL原子化

InnoDB表的DDL支持事务完整性,要么成功要么回滚。

比如drop table t1,t2;语句,t2表不存在,在mysql8.0之前就把t1表删除了,mysql8.0会回滚,t1表还在

17、参数修改持久化

 MySQL 8.0版本支持在线修改全局参数并持久化,通过加上PERSIST关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启MySQL时,可以从该配置文件获取到最新的配置参数。set global 设置的变量参数在mysql重启后会失效。

set persist innodb_lock_wait_timeout=25;#系统会在数据目录下生成一个包含json格式的mysqld-auto.cnf 的文件,格式化后如下所示,当my.cnf 和mysqld-auto.cnf 同时存在时,后者具有更高优先级。

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

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

相关文章

RS485转Profinet通讯

RS485转Profinet通讯 概述系统组成流量积算仪网关 软件总结 概述 一个支持RS485的流量积算仪的数据要被Profinet的PLC读取。制作一个网关,实现RS485到Profinet的转换。 系统组成 流量积算仪 支持RS485通讯,通讯协议是modbus RTU。采用功能码3可以读取…

ChatGPT从入门到精通,深入认识Prompt

ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定 让ChatGPT帮你高效实现职场办公!行动起来吧。欢迎关注专栏 1、ChatGPT从入门到精通&#xff0…

【SQL Server】数据库开发指南(八)高级数据处理技术 MS-SQL 事务、异常和游标的深入研究

本系列博文还在更新中,收录在专栏:#MS-SQL Server 专栏中。 本系列文章列表如下: 【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作 【SQL Server】数据库开发指南(一)数据库设计的核心概念…

【Unity 实用插件篇】 | UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法

前言 【Unity 实用插件篇】 UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法一、安装Device Simulator包二、使用Device Simulator模拟各种设备三、自定义设备类型信息 总结 🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由…

错误C2039:‘退出‘:不是‘`全局名称空间‘的成员

问题 VC\Tools\MSVC\14.27.29110\include 目录里的cstdint文件的内容 原因 一种典型的Microsoft产品错误. 解决 运行 点击修复

Windows 驱动开发环境搭建

Windows 驱动开发环境搭建及 windbg 调试工具安装使用 引言了解 Windows 驱动开发环境下载 Windows 驱动开发环境根据需要下载安装对应版本的 Visual Studio下载安装对应的 WDK 工具包 编写第一个驱动代码总结参考资料 引言 对于 Windows 驱动开发,在微软官方的文档…

windows 下安装 mysql-8.0.25 解压版

介绍 此文介绍 mysql-8.0.25-winx64 的 zip 解压版,在 windows 下的安装与配置过程。 官方下载 官网下载页: https://downloads.mysql.com/archives/community/ 进入官网,选择默认版本就行,不需要包含测试工具套件的版本 本地解…

【spring源码系列-03】xml配置文件启动spring时refresh的前置工作

Spring源码系列整体栏目 内容链接地址【一】spring源码整体概述https://blog.csdn.net/zhenghuishengq/article/details/130940885【二】通过refresh方法剖析IOC的整体流程https://blog.csdn.net/zhenghuishengq/article/details/131003428【三】xml配置文件启动spring时refres…

[RocketMQ] Consumer消费者启动主要流程源码 (六)

客户端常用的消费者类是DefaultMQPushConsumer, DefaultMQPushConsumer的构造器以及start方法的源码。 1.创建DefaultMQPushConsumer实例 最终都是调用下面四个参数的构造函数: /*** 创建DefaultMQPushConsumer实例** param namespace namespace地址* par…

两两交换链表中的节点(LeetCode 24)

题目 24. 两两交换链表中的节点 思路 最开始自己画,越画越复杂比较复杂,写不出来!(呜呜)去看了解题思路,发现只需要三步。,按以下思路写了代码,循环停止那里的条件我还以有更好的写…

【Docker】Docker Desktop更换非C盘符(减轻占用率)

Win10中的Docker Desktop调整到其他盘符,由于新版本已经不让修改软连接了,只好另谋策略,最终还是改成功了。 出现问题 使用软连接修改 上面代码我们可以科幻的理解一下 幻想破灭 //TODO 用户点击执行安装 if(检查文件夹是否软连接){有则&a…

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法 现象解决方法 现象 在vm17下的ubuntu22使用上传表单时出现了这种不和谐的现象,被领导批评一通。最后费劲心思,找到了这个问题的解决方法。 解决方法 解决方法特别容易,在虚拟机的设置中&…

模型实战(13)之YOLOv8实现手语字母检测与识别+权重分享

YOLOv8实现手语字母检测与识别+权重分享 本文借助yolov8 实现手语字母的检测与识别:先检测手的ROI,进而对手语表达的字母含义进行识别全文将从环境搭建、模型训练及预测来展开对整个算法流程进行讲解文中给出了开源数据集链接及从 Roboflow 上的下载教程实现效果如下: 1. 环…

信驰达推出基于CC2340的BLE PEPS解决方案

近日,TI发布了第四代低功耗蓝牙SoC-CC2340,该产品凝聚了TI 公司20多年的射频经验,在成本、尺寸和性能上做了优化设计,是目前市场上最有价值的低功耗蓝牙SoC之一。 TI CC2340 SoC采用48 MHz ARM Cortex-M0 MCU,高达512…

LLM 应用参考架构:ArchGuard Co-mate 实践示例

随着,对于 LLM 应用于架构领域探索的进一步深入,以及 ArchGuard Co-mate 开发进入深入区,我们发现越来越多的通用模式。 在先前的文章里,我们总结了一系列的设计原则,在这篇文章里,我们将介绍 ArchGuard Co…

MATLAB 之 数值积分和离散傅里叶变换

这里写目录标题 一、数值积分1. 数值积分基本原理2. 数值积分的实现2.1 变步长辛普森法2.2 自适应积分法2.3 高斯——克朗罗德法2.4 梯形积分法2.5 累计梯形积分 3. 多重定积分的数值求解 二、离散傅里叶变换1. 离散傅里叶变换算法简介2. 离散傅里叶变换的实现 一、数值积分 数…

死信是什么,如何运用RabbitMQ的死信机制?

系列文章目录 手把手教你,本地RabbitMQ服务搭建(windows) 消息队列选型——为什么选择RabbitMQ RabbitMQ 五种消息模型 RabbitMQ 能保证消息可靠性吗 推或拉? RabbitMQ 消费模式该如何选择 死信是什么,如何运用Rabbit…

SVN 多项目地址指向方法

前言 我们在实际的开发中往往可能管理着多个项目,多个项目都用SVN管理着,如果遇到SVN地址变更,以前我们需要对每个项目一一进行SVN重新定位,项目少还好,一旦项目很多并且SVN地址经常变的情况下,进行地址映…

IntelliJ IDEA maven 引用本地 jar 文件

一、背景说明 由于某些特定原因,不能在远程maven仓库中下载所需要版本的jar文件,需要在maven中引用本地jar文件。 二、解决方案 1、创建 libs 目录 为了方便jar包管理,可以在工程目录下,创建一个与src目录平级的libs目录。如下…

Hologres弹性计算在OLAP分析上的实践和探索

作者:王奇 阿里云Hologres研发 简介: 1、本文介绍了OLAP分析在大数据分析中的位置 2、分析并介绍目前大数据OLAP遇到的分析性能、资源隔离、高可用、弹性扩缩容等核心问题 3、解析阿里云Hologres是如何解决极致性能、弹性、业务永续、性价比等核心刚需的…
最新文章