数据库的操作越来越成为整个应用的性能瓶颈,这对于Web应用尤其明显。关于数据库的性能,这并不只是DBA需要关心的,而更是后端开发需要去关注的事情。所以本文讲解MySQL在各个方面的优化方向,方便后端开发人员在调优和问题排查过程中找到切入点。1.服务器硬件的优化提升硬件设备,例如选择尽量高频率的内存(频率不能高于主板的支持)、提升网络带宽、使用SSD高速磁盘、提升CPU性能等。CPU的选择:对于数据库并发比较高的场景,CPU的数量比频率重要。对于CPU密集型场景和频繁执行复杂SQL的场景,CPU的频率越高越好。2.MySQL数据库配置优化表示缓冲池字节大小。推荐值为物理内存的50%~80%。in
Mysql主从环境概述Mysql集群主从环境搭建本次采用Docker部署集群,并且首先主从实例配置。1.Mysql-Cluster集群服务规划2.Mysql-Cluster集群先决条件创建Mysql-Cluster集群主要配置目录如下:2.1Mysql-Master节点[3308]创建Mysql-Slave节点主要配置文件目录以及配置文件如下:[1].mysql.cnf配置文件:#Copyright(c)2015,2021,Oracleand/oritsaffiliates.##Thisprogramisfreesoftware;youcanredistributeitand/ormodify
Mysql主从环境概述Mysql集群主从环境搭建本次采用Docker部署集群,并且首先主从实例配置。1.Mysql-Cluster集群服务规划2.Mysql-Cluster集群先决条件创建Mysql-Cluster集群主要配置目录如下:2.1Mysql-Master节点[3308]创建Mysql-Slave节点主要配置文件目录以及配置文件如下:[1].mysql.cnf配置文件:#Copyright(c)2015,2021,Oracleand/oritsaffiliates.##Thisprogramisfreesoftware;youcanredistributeitand/ormodify
MyISAMInnoDB事务X√行锁X√外键X√全文搜索√X表空间的大小较小较大,约为MyISAM的2倍MyISAMMyISAM是MySQL5.5版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用。而且MyISAM不支持外键,索引和数据是分开存储的。InnoDBInnoDB是MySQL5.5版本之后的默认引擎,基于聚簇索引建立的,支持事务、外键、行级锁,并且通过MVCC来支持高并发,索引和数据存储在一起。如何选择如果需要事务,选择InnoDB,不需要则选择MyISAM。如果大部分表操作都是查询,选择MyISAM,有写又有读选I
MyISAMInnoDB事务X√行锁X√外键X√全文搜索√X表空间的大小较小较大,约为MyISAM的2倍MyISAMMyISAM是MySQL5.5版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用。而且MyISAM不支持外键,索引和数据是分开存储的。InnoDBInnoDB是MySQL5.5版本之后的默认引擎,基于聚簇索引建立的,支持事务、外键、行级锁,并且通过MVCC来支持高并发,索引和数据存储在一起。如何选择如果需要事务,选择InnoDB,不需要则选择MyISAM。如果大部分表操作都是查询,选择MyISAM,有写又有读选I
MySQL默认数据库引擎事务支持索引类型索引数据结构对锁的支持使用场景关于count(*)外键支持InnoDB5.1版本后,是默认为Readcommitted聚集索引,叶子节点直接存储数据,写快读慢;非主键索引先查询主键,数据和主键存储在一起,没有主键时使用第一非空的唯一索引(NOTNULLandUNIQUEINDEX),也没有的话使用6字节的自增数值作为聚簇索引B+树行锁和表锁支持事务,写多读少需要扫描数据查询支持MyISAM5.1版本后,否不支持非聚集索引,叶子节点存储主键信息,写慢读快;非主键索引直接查询数据,数据单独存储B+树表锁不需要支持事务,读多写少存储直接输出,注意如果查询含w
MySQL默认数据库引擎事务支持索引类型索引数据结构对锁的支持使用场景关于count(*)外键支持InnoDB5.1版本后,是默认为Readcommitted聚集索引,叶子节点直接存储数据,写快读慢;非主键索引先查询主键,数据和主键存储在一起,没有主键时使用第一非空的唯一索引(NOTNULLandUNIQUEINDEX),也没有的话使用6字节的自增数值作为聚簇索引B+树行锁和表锁支持事务,写多读少需要扫描数据查询支持MyISAM5.1版本后,否不支持非聚集索引,叶子节点存储主键信息,写慢读快;非主键索引直接查询数据,数据单独存储B+树表锁不需要支持事务,读多写少存储直接输出,注意如果查询含w
数据库与I/O原理数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数据量比较大时,单表数据就会分布在多个磁盘页面。如果没有索引,就必须按顺序加载磁盘页面到缓存进行查找,判断数据是否存在。随着数据量的增长,磁盘I/O操作的次数也会越来越多。因此,有必要通过一些辅助的数据结构来提交检索的速度。从上面可以看出,想要快速读取到数据,可从以下几个方面着手1.如何尽量减少磁盘IO操作2.如何快速定位到数据所在的磁盘页面3.如何快速定位数据在磁盘页面内的位置 数据库索引是什么索引是存储引擎用于快速查
数据库与I/O原理数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数据量比较大时,单表数据就会分布在多个磁盘页面。如果没有索引,就必须按顺序加载磁盘页面到缓存进行查找,判断数据是否存在。随着数据量的增长,磁盘I/O操作的次数也会越来越多。因此,有必要通过一些辅助的数据结构来提交检索的速度。从上面可以看出,想要快速读取到数据,可从以下几个方面着手1.如何尽量减少磁盘IO操作2.如何快速定位到数据所在的磁盘页面3.如何快速定位数据在磁盘页面内的位置 数据库索引是什么索引是存储引擎用于快速查
1.MySQL8.0数据字典有什么变化从MySQL8.0开始,采用独立表空间模式的每个InnoDB表只有一个.ibd表空间文件,而不再有.frm文件了。为了实现DDL的原子性,InnoDB直接把元数据存储在表空间文件中,需要的话,可是使用 ibd2sdi 工具从中读取,例如:$ibd2sditest/t1.sdi["ibd2sdi",{"type":1,"id":1268,"object":{"mysqld_version_id":80031,"dd_version":80023,"sdi_version":80019,"dd_object_type":"Table",...{"type":