美文网首页
高性能mysql(一)

高性能mysql(一)

作者: 花开此时海 | 来源:发表于2020-08-05 08:52 被阅读0次

首先我们来了解下mysql服务器的逻辑架构:

        最上层是基本的连接处理、授权认证、安全等等,第二层主要是mysql的核心服务,包括查询解析、分析优化、缓存、以及所有的内置函数、存储过程、触发器、视图都在这一层实现,第三层则是mysql的存储引擎,最常用的有Innodb、myisam等,每个存储引擎都有其独有的特点以及优势劣势,主要负责mysql中的数据的存储和提取。

        mysql执行查询语句优先检查查询缓存中是否有对应查询,没有再进行解析查询,并创建解析数,并进行相应的优化,包括重写查询,决定表读取顺序,选择索引等,存储引擎对于优化查询是有影响的,优化器会请求提供开销信息以及统计信息来决定如何进行优化。

        mysql的事务控制是通过锁来控制的,mysql通过共享锁以及排他锁进行并发控制,sql标准定义了四种隔离级别:

        read uncimmitted(未提交读):脏读,在该级别中,可读取其他事务未提交数据

        read committed(提交读): 不可重复读,在该级别中,在一个事务中,可能读取到其他事务已经修改后的数据。

        repeatable read(可重复读): 可能导致幻读,在该级别中,同一个事务,可能读取到其他事务已经提交的新增的数据。(mysql inndb 默认为该级别,并通过多版本并发控制MVCC解决幻读问题)

        serializable(可串行化): 该级别下,所有的事务串行执行。

        多版本并发控制MVCC:

        多数事务型存储引擎出于提高并发性能的情况下都实现了MVCC,基本实现是通过快照实现的,达到同一事务中查出的数据是一致的,InnoDB的MVCC,实际是通过在每行记录后保存两个隐藏列进行实现的,一个保存行的创建版本号,一个保存行的删除版本号。每个事务开始, 版本号进行递增,事务开始时版本号作为事务的版本号。

        SELECT:查找创建版本早于或等于当前系统版本的数据行 且 删除版本为空或删除版本号大于当前系统版本的行数据。

        INSERT:插入一条新数据,且创建版本为当前系统版本

        DELETE: 删除版本为当前系统版本

        UPDATE: 新增一条新数据,创建版本为当前版本,且原数据删除版本为系统版本号。

相关文章

网友评论

      本文标题:高性能mysql(一)

      本文链接:https://www.haomeiwen.com/subject/bhgprktx.html