首页 > 数据库 >mysql 大表drop和truncate 技术风险点

mysql 大表drop和truncate 技术风险点

时间:2024-12-10 16:46:09浏览次数:4  
标签:flush truncate buffer drop list mysql TABLE pool

1、用这个drop 语句举例: drop table T;在之前的老版本中,但如果表T比较大,占用的各种缓存较多,这个SQL在对表进行删除的时候,需要依次清理掉buffer pool中的page,时间久回比较久;清理的动作会影响到在线的业务;在老版本的内核中的大致逻辑如下:扫描lru链表,如果page属于T表,就从lru链表,hash表, flush list中删除,回收buffer pool中的block 并标记到free list中,期间会长时间持有buffer pool mutex;清理完成之后free/LRU/flush list Mutex;这种模式称为直接drop模式;而MySQL 5.5.23以后就采用了lazy drop table的模式(包括社区版的5.6、5.7、 8.0版本以及当前所有polardb-mysql版本):lazy方式: 在移除flush list时,会有一个条件判断,如果已经处理了超过一定数量的page(默认是1024个page),会强制释放当前持有的buffer pool mutex和flush list mutex,并且让出CPU,过一会儿再重新拿回锁继续清理flush list;对于LRU list,则不做处理,因为当这个表被删除后,这些数据页最终会在LRU算法调度下被回收。----------------------------------------------------------------
2、对于truncate table操作:在社区版8.0之前的版本中,还是沿用直接drop模式的模式:遍历lru链表,hash表, flush list,并从这些链表中清理page,回收buffer pool中的block 并标记到free list中,期间会长时间持有buffer pool mutex;清理完成之后free/LRU/flush list Mutex;在社区版5.6、5.7的mysql版本中,truncate 无法采用类似lazy drop table的核心原因如下:是因为truncate table 需要复用 space id, 这导致必须把buffer pool中的老的表中的页全部删除,而drop table因为新旧表的页可用通过space id区分,只需要把flush list中的脏页删除就可以了;在8.0版本之后,truncate就替换为了用drop+create的方式,这样解决了truncate 可能会导致大buffer pool夯的问题。注意:在polardb-mysql中,是在5.7.1.0.2版本中,修复了此问题,采用了drop + create的方式来替换原来的truncate逻辑。3、相关版本说明:(1)、社区版mysql相关的bug fix说明:https://bugs.mysql.com/bug.php?id=68184(2)、社区版MySQL8.0针对该问题说明:On a system with a large InnoDB buffer pool and innodb_adaptive_hash_index enabled, TRUNCATE TABLE operations could cause a temporary drop in system performance due to an LRU scan that occurred when removing an InnoDB table's adaptive hash index entries. To address this problem, TRUNCATE TABLE now invokes the same code as DROP TABLE and CREATE TABLE. The problem was addressed for DROP TABLE in MySQL 5.5.23.翻译:当InnoDB buffer pool比较大和innodb_adaptive_hash_index启用时,TRUNCATE TABLE操作可能由于发生了LRU扫描,删除InnoDB表的自适应散列索引项时,导致系统性能暂时下降。为了解决这个问题,TRUNCATE TABLE现在调用与DROP TABLE相同的代码删除表。因为在MySQL 5.5.23后,DROP TABLE解决了这个问题

标签:flush,truncate,buffer,drop,list,mysql,TABLE,pool
From: https://www.cnblogs.com/mgic/p/18597624

相关文章

  • 【MySQL开发】常用指标采集 exporter
    https://github.com/prometheus/mysqld_exporterhttps://blog.csdn.net/qq_31555951/article/details/109496622https://help.aliyun.com/zh/prometheus/use-cases/monitor-mysql-databases可用性表示MySQL实例是否已停机mysql_up表示数据库正常运行的时长,通常使用该指标......
  • 博客-django--MySQL--报错版本低
    报错信息django.db.utils.NotSupportedError:MySQL8orlaterisrequired(found5.7.31).原因因为mysql5.7及以下是免费的数据库,8.0之后是收费的。使用免费的数据库更放心,使用上没有什么区别。这个提示只是Django的版本检测提示,把它注释掉就好了。解决办法注释掉版本检测......
  • PbootCMS默认使用哪种数据库?如何切换到MySQL数据库?
    PbootCMS默认使用SQLite数据库,这种数据库不需要额外的配置和导入操作,适合快速部署和小型项目。如果需要切换到MySQL数据库,你需要按照以下步骤操作:导入数据库文件:首先,你需要将MySQL数据库文件(通常位于/static/backup/sql/xxx.sql)导入到你的MySQL服务器中。你可以使用phpMyAdmin......
  • 服务迁移之《mysql数据同步问题》
    我们大概是从2022年十月份开始进行拆分的。面对一百多个服务的时候,真的是无从下手,然后公司突然空降了一个从阿里出来的架构师,然后就带着我们大刀阔斧的整体迁移。先是服务器购买阿里云的,然后从几个核心的服务开始迁移,发现会依赖很多的基础的原子服务。然后就开始迁移基础,基础服务......
  • Windows安装Mysql数据库|非官方复杂安装,解压即可,操作简单
    我们都知道在官方安装mysql数据库极其复杂,还极大概率遇到各种问题,今天教大家只要解压就可安装完数据库,操作及其简单+绿色。版本包括了mysql8或mysql5,各位各取所需即可。不管你之前是否安装过数据库,只要端口3306不被占用就可以成功安装mysql。下载解压包下载移步https://pan......
  • 金仓数据库数据迁移实战:从MySQL到KES的顺利迁移
    今天我们将开始实践金仓数据库的数据迁移功能。在此之前,我们一直使用的是简化版的Docker镜像,这个版本并没有集成可视化操作工具。因此,为了更方便地进行后续的操作,我们需要额外下载一个Windows版本的安装包并进行安装。需要注意的是,如果你不打算安装数据库,安装过程中可以选择......
  • Mysql索引失效问题demo
    Mysql索引失效问题demo#1.准备工作CREATETABLE`user`(`id`INTNOTNULLAUTO_INCREMENT,`code`VARCHAR(20)COLLATEutf8mb4_binDEFAULTNULL,`age`INTDEFAULT'0',`name`VARCHAR(30)COLLATEutf8mb4_binDEFAULTNULL,`height`INTDEFAULT&#......
  • mysql 256byte可以存多少汉字,字符编码length,char_length函数
    mysql256byte可以存多少汉字,字符编码length,char_length函数在MySQL中,UTF-8编码下,每个汉字至少占用3个字节。因此,256字节可以存储的汉字数量为:(256字节)/(3字节/汉字)=85.3汉字由于UTF-8编码中,对于单字节的字符、双字节字符和三字节字符有不同的编码方式,实际使用中可能不能......
  • 高效整合聚水潭库存数据至MySQL的实现
    聚水潭数据集成到MySQL:商品库存查询案例分享在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭的商品库存数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水潭-商品库存查询-->BI彩度-商品库存表”,旨在实现实时的数据同步和高效的数据管理。任务背景与挑......
  • MySQL学习笔记Day5
    一、基本函数就像是编程语言的函数一样,可以把复杂的功能封装到函数里,供使用者调用。1、数字函数函数功能用例ABS绝对值ABS(-100)ROUND四舍五入ROUND(4.62)FLOOR强制舍位到最近的整数FLOOR(9.9)CEIL强制进位到最近的整数CEIL(3.2)POWER幂函数POWER(2,3)LOG对数函数LOG(7,3)LN......