mysql体系结构详解_层次化存储体系结构如何构成

mysql体系结构详解_层次化存储体系结构如何构成1、MySQL体系结构 MySQL的体系结构可以分为两层,MySQL Server层和存储引擎层。 在MySQL Server层中又包括连接层和SQL层,如图1-1所示。 应用程序通过接口( 如ODB

MySQL体系结构与存储引擎

 1、MySQL体系结构

MySQL的体系结构可以分为两层,MySQL Server层和存储引擎层。

在MySQL Server层中又包括连接层和SQL层,如图1-1所示。

应用程序通过接口( 如ODBC、JDBC)来连接MySQL。

最先连接处理的是连接层,连接层包括通信协议、线程处理、用户名密码认证三个部分。

通信协议负责检测客户端版本是否兼容MySQL服务端。

线程处理是指每一个连接请求都会分配一个对应的线程,

相当于一条SQL对应一个线程,一个线程对应一个逻辑 CPU,并会在多个逻辑CPU之间进行切换。

用户名密码认证验证创建的账号和密码,以及host主机授权是否可以连接到MySQL服务器。

SQL层包含权限判断、查询缓存、解析器、预处理、查询优化器、缓存和执行计划。

mysql体系结构详解_层次化存储体系结构如何构成

          图1-1 MySQL体系结构

权限判断可以审核用户有没有访问某个库、某个表,或者表里某行的权限。

查询缓存通过 Query Cache 进行操作,如果数据在 Query Cache 中,则直接返回结果给客户端。

查询解析器针对 SQL 语句进行解析,判断语法是否正确。预处理器对解析器无法解析的语义进行处理。

优化器对 SQL 进行改写和相应的优化,并生成最优的执行计划,就可以调用程序的 API 接口,通过存储引擎层访问数据。

存储引擎层也是 MySQL 数据库区别于其他数据库最核心的一点。

 

2、query cache 详解

Query Cache在生产中建议关闭,因为它只能缓存静态数据信息,一旦数据发生变化, 经常读写,QueryCache就成了“鸡肋”。

一般像数据仓库之类的可能会考虑开启QueryCache。

这里再提及一句,MySQL 5.6之前版本的Query Cache默认是开启的,5.6 之后默认是关闭的。

如何彻底关闭Query Cache是我们需要关注的。

首先涉及query_ cache 的两个核心参数:

#查询缓存大小
mysql> show variables like "%query_cache_size%"; +------------------+---------+ | Variable_name | Value | +------------------+---------+ | query_cache_size | 0 | +------------------+---------+ 1 row in set (0.00 sec)
#查询缓存类型 mysql
> show variables like "%query_cache_type%"; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | query_cache_type | OFF | +------------------+-------+ 1 row in set (0.00 sec)

有些人一直认为只需要把query_cache_size设置为0,就算关闭查询缓存了。

但实际上,我们最不能忽略的参数就是query_cache_type了。

要想彻底关闭Query Cache,必须一开始就把query_cache_type 关闭。

即便是启动后把query_cache_type 设置为off,也会影响数据库的TPS。

通过压力测试,我们来看两个核心参数在不同设置下TPS的对比情况。

 

这里介绍一款MySQL数据库的压力测试软件sysbench,用它来进行基准测试。

sysbench 是一个开源的、模块化的、跨平台的多线程性能测试工具,

可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。

目前支持的数据库有MySQL、Oracle 和PostgreSQL。

 #sysbench安装说明:https://www.cnblogs.com/Sungeek/p/14669280.html

 

2.1、第一种情况

我们来看一下在不同query_cache 参数设置下,TPS的性能对比情况。
第一种情况:

修改my.cnf参数是query_cache_type=0、 query_cache_size=0。

用sysbench构造100000数据,也就是准备阶段:

create database sbtest;
cd /mysql/app/sysbench
sysbench ./share/sysbench/tests/include/oltp_legacy/oltp.lua
--mysql-host=192.168.1.51
--mysql-port=3306 --mysql-user=root --mysql-password=rootroot
--oltp-tables-count=1 --oltp-table-size=100000 --threads=10 prepare

 

#参数说明
oltp-tables-count:表总数,生产环境最少20张表以上
oltp-table-size:表大小,生产环境最少一千万条数据
threads:线程数
time:生产环境测试时间最少15分钟
report-interval:10秒生成一次报告
 

然后进入测试阶段,由于是测试环境,这里设置的线程数量不多,为10个,即num-threads=10。

测试出每秒处理的事务数为668.18

sysbench ./share/sysbench/tests/include/oltp_legacy/oltp.lua 
--mysql-host=192.168.1.51
--mysql-port=3306 --mysql-user=root --mysql-password=rootroot
--oltp-test-mode=complex
--oltp-tables-count=1 --oltp-table-size=100000 --threads=10 --time=60
--report-interval=10
run

 #生成的报告结果

mysql体系结构详解_层次化存储体系结构如何构成

 

2.2、第二种情况

第二种情况:是query_cache_type=1、 query_cache_size=0

测试出每秒处理的事务数为660.63

sysbench ./share/sysbench/tests/include/oltp_legacy/oltp.lua 
--mysql-host=192.168.1.51 
--mysql-port=3306 --mysql-user=root --mysql-password=rootroot 
--oltp-test-mode=complex 
--oltp-tables-count=1 --oltp-table-size=100000 --threads=10 --time=60 
--report-interval=10 
run

 #生成的报告结果

mysql体系结构详解_层次化存储体系结构如何构成

 

2.3、第三种情况

第三种情况:把query_ cache_ type=0,是query_ cache_ size=1024000

测试出每秒处理的事务数为618.43

sysbench ./share/sysbench/tests/include/oltp_legacy/oltp.lua 
--mysql-host=192.168.1.51 
--mysql-port=3306 --mysql-user=root --mysql-password=rootroot 
--oltp-test-mode=complex 
--oltp-tables-count=1 --oltp-table-size=100000 --threads=10 --time=60 
--report-interval=10 
run

 #生成的报告结果

 mysql体系结构详解_层次化存储体系结构如何构成

 

2.4、第四种情况

第四种情况:把query_ cache_ type=1,是query_ cache_ size=1024000

测试出每秒处理的事务数为621.55

mysql体系结构详解_层次化存储体系结构如何构成

 

#总结:

四种情况下:TPS的值分别为668.18、660.63、 618.43、621.55

可见设置正确的query_cache的关闭方式有多么重要。

#MySQL8.0据说是废除了query_cache:https://blog.csdn.net/n88Lpo/article/details/108395640

 

3、MySQL存储引擎

MySQL数据库及其分支版本主要的存储引擎有InnoDB、MyISAM、Memory、blackhole、
TokuDB和MariaDB columnstore。

用得最多应该就是InnoDB、MyISAM、Memory

#主要的存储引擎的特性对比:

mysql体系结构详解_层次化存储体系结构如何构成

InnoDB和MyISAM是最主流的两个存储引擎,现在数据库版本默认的存储引擎是InnoDB,
并且MySQL 8.0宣布InnoDB存储数据字典,MyISAM彻底从MySQL数据库中剥离开,被废弃了。
但等用上新版本的时候,彻底上线前,还是有不少互联网公司依然在使用MyISAM存储引擎。
这里建议大家把线上MyISAM的存储引擎表全部转化成InnoDB表存储。

#innodb和myisam两者之间的主要区别:

mysql体系结构详解_层次化存储体系结构如何构成

 

可以看出InnoDB存储引擎的优势很明显。

MySQL被Oracle收购之后,也针对存储引擎层做了相应的改进与优化,Server层没有太大的变动,

主要优化的核心就是InnoDB存储引擎,所以我们今后的重心就放在InnoDB上面,研究它的体系结构。

#MySQL InnoDB存储引擎体系架构图

mysql体系结构详解_层次化存储体系结构如何构成

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6290.html

(0)
上一篇 2023-04-13
下一篇 2023-04-13

相关推荐

  • Python 3写文件操作:以文件为中心

    Python 3写文件操作:以文件为中心在Python中,文件是最为广泛和常用的数据存储形式之一。文件可以存储文本、图像、音频等各种类型的数据,而Python提供了丰富的功能用于文件的读写、操纵和管理。在本文中,我们将介绍Python 3的文件操作,重点是以文件为中心的读写操作。

    2024-07-02
    48
  • 线程池02-LinkedBlockingQueue 阻塞队列

    线程池02-LinkedBlockingQueue 阻塞队列
    首先,我们先了解一下什么是阻塞队列: 当队列满了时,队列会阻塞插入元素的线程,直到队列不满; 当队列为空时,获取元素的线程会等待队列变成非空。 常用到的方法…

    2023-04-05
    162
  • Python D字典:高效存储和查询

    Python D字典:高效存储和查询Python中的字典是一种无序的“键-值”(key-value)数据结构,D字典则是使用Python中的高效的哈希表技术实现的一种新型字典。使用D字典可以大大提高对键值对的存储和查询效率,是处理大量键值对时的一种优秀的数据类型。以下是D字典的基本使用方法:

    2024-03-22
    89
  • Apache Doris Roadmap 2021[亲测有效]

    Apache Doris Roadmap 2021[亲测有效]随着 Doris 越来越广泛的被在各个公司落地使用,Doris 开发团队也在不断地收集社区用户的需求和问题反馈。 为了更好地帮助用户了解 Doris 的发展方向和开发计划,百度 Doris 团队梳理…

    2023-04-10
    184
  • PostgreSQL源码学习–删除数据#1,2「建议收藏」

    PostgreSQL源码学习–删除数据#1,2「建议收藏」本节介绍heapam_tuple_delete和table_tuple_delete函数。 heapam_tuple_delete函数 //src/backend/access/heap/heapa…

    2023-03-09
    151
  • mysql的主键和索引[亲测有效]

    mysql的主键和索引[亲测有效] 主键是个什么? 我来来具体的东西说吧,书大家都看过吧,没看过的找本翻一下,看下它每页是不是有个页码,我们的数据表主键就相当于是这个页码,明白了吧。 那么索引是什么呢? 我们还拿书来说,索引相…

    2023-03-21
    154
  • 社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

    社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间作者:杨奇龙 网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。 一、前言 响应时间(response time…

    2022-12-15
    143
  • JetBrains DataGrip 2022 Mac(多引擎数据库管理工具)「终于解决」

    JetBrains DataGrip 2022 Mac(多引擎数据库管理工具)「终于解决」JetBrAIns DataGrip 2022 for Mac不管是在国内还是国外都是一款不容小觑的数据库客户端软件。DataGrip 2022 Mac中文版可用于完成数据库的常用操作,包括查询数据、

    2023-05-28
    155

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注