首页 > 数据库 >MySQL 关于缓存的 “杂七杂八”

MySQL 关于缓存的 “杂七杂八”

时间:2023-06-21 10:04:40浏览次数:54  
标签:缓存 杂七杂八 缓冲 buffer innodb MySQL 磁盘 pool


MySQL  关于缓存的 “杂七杂八”_mysql

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。

你是否可以想象如果MYSQL 没有了innodb_buffer_pool 是什么样子的情况,本期需要说说MYSQL的缓存,已经如何使用他更加有效用或者说性价比。首先MYSQL 使用缓存机制的目的是什么?

减少磁盘访问的频率,提高数据访问效率是缓冲存在的基础目的,而一般的情况下,数据库所在的服务器的内存很难HOLD住所有的在服务器上存在的数据,所以缓存是珍贵的,那么珍贵的基础上如何更有效的利用缓存就是一个特别重要的部分。

这里通过直接从内中提供数据页面的数量和对比从磁盘需要读入的数据页面的数量,和在某一个时刻缓存中被驱逐的页面,来去评判缓存的运行效率是一种常见的方式。

MYSQL中其标准InnoDB存储引擎的主要数据缓存结构称为Buffer Pool。暴露Buffer Pool效率的两个状态变量(或在本例中的状态计数器)如下所述(引用MySQL手册):

Innodb_buffer_pool_read_requests:逻辑读请求的数量。

Innodb_buffer_pool_reads:InnoDB无法满足缓冲池的逻辑读取数,必须直接从磁盘读取的逻辑读取数。

MYSQL 中可以通过percona 公司的pt 工具来捕捉这些数据的动态量,用来分析服务器的性能。如pt-stalk 来统计某一个时间段的变量值。

 pt-stalk --no-stalk --iterations=1

具体的pt_stalk 的使用可以参考percona 官方的文档,进行详细的参数了解和使用。

提到这里,很多人会想起buffer hit ratio 这个问题,很多同学通过这个指数来标定当前的缓冲是否够用。一般的观点是如果buffer hit ratio 的低于95% - 99% (我听到过大多数DBA的观点。也有个别的提高过90%)这个标准后说明缓存不足以支撑当前的数据库的使用。

如果单独拿出来这个观点来,将其他的可能性都不考虑的情况下,这个观点是正确的,的确是缓冲不足以支撑当前的查询。但我们应该下探如下的部分来去解决问题,而不是直接添加更大的物理内存和提高innodb_buffer pool 的配置。

1  是否是由于磁盘的问题导致,如磁盘的速度较慢,而导致在提取数据时导致的数据提取时间过长导致的问题

2  是否是由于没有有效的索引导致的,全表扫描引起的所谓的 buffer_hit_ratio 较低导致的问题

3   使用MYSQL 作为OLAP 的使用方式导致的 buffer_hit_ratio 数值较低的问题。

除此以外,是缓冲本身的大小的设置问题,或真的是物理内存交付的不合理的问题等等。

那么缓冲不足可能会造成什么问题也是我们需要进行了解和学习的,缓冲不足

查看缓冲命中率语句方式

SELECT variable_value INTO @num_reads

FROM performance_schema.global_status

WHERE variable_name = 'Innodb_buffer_pool_read_requests';

SELECT variable_value INTO @num_misses

FROM performance_schema.global_status

WHERE variable_name = 'Innodb_buffer_pool_reads';

SET @buffer_pool_size = (SELECT @@innodb_buffer_pool_size);

SELECT CONCAT(100 - ((@num_misses / @num_reads) * 100), '%') AS `Hit Ratio`;

MySQL  关于缓存的 “杂七杂八”_mysql_02

同时还有相关的参数需要查看设置的是否合理,如innodb_lru_scan_depth, 他主要用于缓冲中每秒对于LRU中的脏页被扫描的深度问题, innodb 存储引擎中,LRU 链表用于管理缓冲池中的页面,当脏页达到一定的程序就需要清理出内存,innodb_lru_scan_depth 可以控制innodb 存储引擎在扫描LRU链表对于脏页进行flush 的速率和频率,从而更好的平衡内存的资源,与IO 性能之间的关系。

这个值在 0 - 1024 ,更小的值会减少扫描的深度,延缓脏页刷回到磁盘的速度,降低磁盘的压力,如果你的内存较大,并且有频繁的访问,同时还都是类OLAP的访问方式,如果此时磁盘的压力较高,并且忽高忽低,可以将这个参数调低,并观察,找到平衡点。

MySQL  关于缓存的 “杂七杂八”_缓存_03

标签:缓存,杂七杂八,缓冲,buffer,innodb,MySQL,磁盘,pool
From: https://blog.51cto.com/u_14150796/6527466

相关文章

  • MySQL HeatWave 被添加了机器学习,甲骨文认真了
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。在开始说这个问题前,我们先了解一下什么是heatWave,MySQLHeatWave是Oracle在2020年推出的一个新服务,为MySQL数据库提供高性......
  • MySQL 8 如何解决快速获取数据库中所有业务库表列的distinct 值,不使用SQL
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近我们接到一个需求,在数据库内,无准确目标的寻找每个表中的字里面包含某些特殊字符的列。工作了快半辈子了,也是第一次听说这样......
  • MYSQL 8 中间字段有NULL 值,还是无法走索引,所以我高估了MYSQL 的查询智商
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql ,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。基于半瓶子咣当的状态,PG,MYSQL,POLARDB,MONGODB,REDIS还是都能舞刀弄枪几下的,但是这个弄这弄着,这记忆力就会不好,因为我一......
  • MySQL一个关于derived table的bug描述与规避
    关联文章:MySQL对derivedtable的优化处理与使用限制一、Bug描述同事遇到一个有意思的语句,说一条SQL在MySQL8.0.25版本运行出的结果明显与给定的where条件不符,而在8.0.26版本上是正常的,语句上加了一个无关的用户变量后在8.0.25版本上结果才是正确的,想不通这是怎么回事,这么有......
  • mysql备份文件存储
    #########################                   ##########################......
  • mysqldump做主从
    1、主库备份timemysqldump--protocol=socket-S/data/mysql/data/mysql.sock--master-data=2--single-transaction-p-A>/data/mysqldump_date+%Y%m%d.sql2、scp到从库3、从库停止slave:stopslave;resetslaveall;4、source主库的备份文件5、查看标记binlog与poshead-100m......
  • MySQL-索引使用规则
    1最左前缀法则如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。showindexfromtb_user;对于最左前缀法则指的是,查询时,最左边的列,也就是profession必须存在,否则......
  • mysql8修改大小写敏感配置
      前两天遇到一个问题,同样的步骤二进制安装mysql,有的大小写敏感,而有得不存在,而当他们做主从时就会产生问题,这里我们对主库进行了一个配置文件更改,如果直接更改就会提示数据目录的大小写敏感为1,而配置为0,mysql启动就会失败,只能通过目录拷贝,修改配置文件、重启的方式修改。1、停......
  • mysql事务阻塞原因探索
    –先保存现场showengineinnodbstatus;–查看是否存在锁等待信息showstatuslike‘innodb_row_lock%’;–查看锁等待的事务信息select*from information_schema.INNODB_TRXWHEREtrx_state=‘LOCKWAIT’;–查看锁等待的事务id,processId,阻塞它的事务id,阻塞它的pr......
  • MySQL的7种连接
    MySQL的七种连接刚学习Java和数据库,文章中讲的不对的地方,还请各位大神多多指教!本文参考链接(https://blog.csdn.net/qq_50596778/article/details/123145434)————————————————版权声明:本文为CSDN博主「NeverOW」的原创文章,遵循CC4.0BY-SA版权协议,转载请附......