mysql逻辑架构和数据库缓冲池

news/2024/11/24 5:39:18/

逻辑架构

典型的CS架构,服务端程序使用的是mysqld
客户端进程向服务器进程发送一段文本(SQL语句),服务器进程处理后再向客户端进程发送文本(处理结果)
在这里插入图片描述

# 应用连接层:
# 连接处理,用户鉴权(username,host,password),连接到server后,根据用户的权限来判断用户可执行哪些操作,安全管理
# mysql服务层:
# [SQL接口]:接收用户的SQL命令,进行处理,将结果返回给用户
# [SQL解析器]:解析查询语句,形成语法树
# [优化器]:对查询语句进行优化,并选择合适的访问路径,生成SQL语句的执行计划
# [缓存]:全局和引擎特定的缓存,以键值对的方式缓存查询结果
# 因为sql语句要完全一样,命中率低,且对于更新频繁的表,缓存的有效期也很短,所以在mysql8中删去了缓存
# 存储引擎层
show engines;

buffer和cache

# A buffer is something that has yet to be "written" to disk.
# A cache is something that has been “read” from the disk and stored for later use.

profiling工具

# 启用profiling工具
# 通过该工具可以获取一条SQL语句在执行过程中多种资源的消耗情况
select @@profiling;
set profiling = 1;
select @@profiling;
# 展示sql执行的资源消耗和时长
select * from employees;
show profiles; # 最近几条sql语句的执行时长
show profile; # 上一条sql语句各个执行阶段的时长
show profile for query 62; # 指定sql的各个执行阶段的时长
show profile cpu,block io for query 134; # 时长,CPU和IO相关的资源消耗数据

数据库缓冲池

InnoDB存储引擎是以页(16KB)为单位来管理存储空间的
磁盘IO消耗的时间多,将磁盘中的页缓存到内存的Buffer Pool中
InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,会把完整的页的数据加载到内存中
将来有请求再次访问该页时,就可以省去磁盘IO了
优先对使用频次高的数据进行加载(页面置换算法LRU)
InnoDB缓冲池中包括了数据页,索引页,插入缓存,自适应索引Hash,数据字典信息,锁信息等
当对数据库中记录进行修改时,会首先修改缓冲池中页里面的记录信息,然后数据库会以一定的频率刷新到磁盘上
缓冲池会采用一种checkpoint的机制将数据回写到磁盘上
当缓冲池不够用时,需要释放掉一些不常用的页,此时可以强行采用checkpoint的方式,将不常用的脏页回写到磁盘上,
然后再从缓冲池中将这些页释放掉,脏页指的是缓冲池中被修改过的页,与磁盘上的数据页不一致

# 查看\设置缓冲池的大小
# MYISAM引擎只缓存索引,不缓存数据,对应的键缓存参数为key_buffer_size
# INNODB引擎通过innodb_buffer_pool_size变量查看缓冲池大小
# 单位是byte
show variables like 'innodb_buffer_pool_size';
select 134217728/1024/1024; # 128MB
set global innodb_buffer_pool_size = 268435456; # 256MB
# Buffer Pool本质是Innodb申请的一块连续内存空间
# 多线程环境下,访问Buffer Pool中的数据需要加锁处理
# 在Buffer Pool特别大而且多线程并发访问特别高的情况下
# 单一的Buffer Pool可能会影响请求的处理速度
# 所以当Buffer Pool特别大时,可以把他们拆分成若干个小的Buffer Pool
# 每个Buffer Pool都称为一个实例,他们都是独立的申请内存空间,独立管理各种链表
# 在多线程并发访问时不会相互影响,提高并发处理能力
show variables like 'innodb_buffer_pool_instances';
# 当innodb_buffer_pool_size小于1G时,设置多个实例是无效的
# 在配置文件中指定
[server]
innodb_buffer_pool_instances = 2;

http://www.ppmy.cn/news/21633.html

相关文章

C++入门:变量作用域

作用域是程序的一个区域,一般来说有三个地方可以定义变量:在函数或一个代码块内部声明的变量,称为局部变量。在函数参数的定义中声明的变量,称为形式参数。在所有函数外部声明的变量,称为全局变量。在程序中&#xff0…

《批处理BAT从入门到精通》总目录_培训教程持续更新中...

<--返回「批处理BAT从入门到精通」专栏主页--> 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中&#xff0c;经常会在其集成开发环境IDE&#xff08;CodeWarrior&#xff0c;S32K DS&#xff0c;Davinci&#xff0c;EB Tresos&#xff0c;ETAS…&#xff09;中…

Spark Streaming

1. kafka 具体步骤&#xff1a; 启动 zookeeper、kafkaShell 方法测试 kafka producer、consumer 生产消费情况启动 hdfs、yarn提交 spark 任务消费 kafka 消息 1.1 启动 zk 和 kafka [rootbogon bin]# cd /usr/local/src/zookeeper-3.4.14/bin [rootbogon bin]# ./zkServe…

Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab

今天&#xff0c;正运动小助手给大家分享一下MotionRT7的安装和使用&#xff0c;以及使用Matlab对MotionRT7开发的前期准备。 01 MotionRT7简介 MotionRT7是深圳市正运动技术推出的跨平台运动控制实时内核&#xff0c;也是国内首家完全自主自研&#xff0c;自主可控的Windows…

算法刷题-回文数、找出小于平均值的数、旋转图像(C_C++)

文章目录回文数找出小于平均值的数旋转图像回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的…

面了个阿里拿28k跳槽出来的,真正见识到了跳槽天花板

2022年已经结束了&#xff0c;迎来的是2023崭新的一年&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备金三银四的面试计划。 作为一个入职5年的老人家&#xff0c;目前工资比较乐观&#xff0c;但是我还是会选择跳槽&#xff0c;因为感觉…

浅读人月神话(完)

读书笔记&#xff1a;今天翻书读完了人月神话&#xff0c;总的来说有些囫囵吞枣。在后半本书中&#xff0c;Brooks的表达中有更多的悲观主义色彩&#xff0c;软件是难以开发而且不存在银弹的&#xff0c;但追求稳定的质量&#xff0c;更高的效率以及可控的成本是项目经理是需要…

STM32开发(1)----stm32f103c6t6开发板介绍和环境搭建

stm32f103c6t6开发板介绍一、stm32f103c6t6芯片资源介绍STM32 的命名规则二、最小系统开发板介绍三、开发板基本使用方法软件安装MDK5 安装安装STM32芯片包安装licenseUSB转串口驱动安装四、本文小结一、stm32f103c6t6芯片资源介绍 stm32f103c6t6 是一款基于 ARM Cortex M3 内…