mysql性能优化基础介绍

2021/6/2 2:22:02

本文主要是介绍mysql性能优化基础介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

**

MySQL性能优化基础知识

**

1.mysql逻辑架构分层

在这里插入图片描述

  1. 最上层(连接/线程处理):是基于网络的客户端/服务器的工具或者服务都具有类似架构。主要负责连接处理,权限控制和安全等。

  2. 中间层(解析,查询缓存,优化):MySQL的核心服务。主要包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

  3. 最底层(存储引擎):负责mysql中数据的存储和提取。服务器通过API和存储引擎进行通信。存储引擎不会去解析SQL(InnoDB除外,会解析外键的定义),不同存储引擎之间不会相互通信,只是简单响应上层服务器的请求。

2.mysql的并发控制

主要解决对数据库读写的并发操作。通常加锁:共享锁(读锁)和排它锁(写锁)。通过不同的锁策略(在锁的开销和数据的安全性之间寻求平衡)来提高数据库的并发读写。通常有表锁和行锁。

表锁和行锁的区别

表锁行锁
开销小开销大
不会出现死锁会出现死锁
发生冲突的概率高,并发低发生冲突的概率低,并发高

3.mysql的隔离级别

这里只列出四种隔离级别,不在进行具体赘述,想了解详细概念及之间区别的读者请查阅相关文档。

读未提交(Read Uncommitted)
读已提交(Read Committed)
可重复读(Repeatable Read) mysql默认的隔离级别
序列化(Serializable)
四种隔离级别可能出现的问题:
在这里插入图片描述

4.mysql的多版本并发控制

多版本并发控制(MVCC):主要解决的数据库并发读写问题。这里主要介绍mysql的多版本并发控制的相关知识。

MVCC的实现主要是通过保存数据在某个时间点的快照进行实现。

在InnoDB中,MVCC是通过在每行记录后面保存两个隐藏的列进行实现。一个列是保存行的创建时间(行版本号),另外一个是保存行的过期时间(或删除时间)。

在mysql中,MVCC主要是在Read Committed和Repeatable Read两个隔离级别中进行工作。其他两个隔离级别不兼容。因为在Read Uncommitted中总是读取最新数据,而不是符合事务版本的数据行,而Serializable则是对所有读取的行进行加锁。

在Repeatable Read隔离级别下,MVCC具体操作如下:

SELECT(InnoDB根据下面两个条件检查每行记录)
①InnoDB查找版本早于当前事务版本的数据行(行的版本号≤事务版本号),确保事务需要读取的行在事务开始之前或者由于事务自身插入(修改)导致的。
②行的删除版本号要么未定义,要么大于当前事务的版本号。确保事务读取的行在事务开始之前未被删除。
INSERT
InnoDB为新插入的行保存当前系统版本号作为行版本号。
DELETE
InnoDB为删除的行保存当前系统版本号作为删除标识。
UPDATE
InnoDB插入一行新纪录,保存当前系统版本号作为行版本号,同时将系统版本号作为删除行的标识。

5.mysql的存储引擎

主要是InnoDB和MyISAM
InnoDB采用MVCC支持高并发,采用Repeatable Read的隔离级别,通过间隙锁解决幻读问题。间隙锁:不仅仅锁定查询涉及的行,同时还会对索引中的间隙进行锁定,防止幻影行插入。

这里只做粗略的介绍,至于这两个索引之间的区别和联系,读者可以自行在网上进行查阅相关文献。

以上内容只是个人理解。如有理解不当的地方还请指出,大家共同努力进步。谢谢!



这篇关于mysql性能优化基础介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程