返回顶部
首页 > 资讯 > 数据库 >怎么drop掉mysql库中的1TB表单
  • 550
分享到

怎么drop掉mysql库中的1TB表单

2023-06-27 11:06:25 550人浏览 八月长安
摘要

这篇文章主要介绍“怎么drop掉mysql库中的1TB表单”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么drop掉Mysql库中的1TB表单”文章能帮助大家解决问题。1、清除Buffer Poo

这篇文章主要介绍“怎么drop掉mysql库中的1TB表单”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么drop掉Mysql库中的1TB表单”文章能帮助大家解决问题。

1、清除Buffer Pool缓冲

drop table时,innodb引擎会清理该表在每个buffer pool实例中中对应的数据块页面,为了避免对系统的影响,这里的清除操作并不是真正的flush,而是将涉及到的页面从flush队列中摘除。但在摘除过程中,删除进程会持有每个buffer pool的全局,然后搜索这个buffer pool里对应的页面以便从flush list中删除。如果在buffer pool中需要被搜索并删除的页面过多,那么遍历时间就会增大,这就导致了其他事务操作被阻塞,严重时可导致数据库锁住。

(推荐课程:mysql教程)

在这里还需要注意一件事情,如果数据库buffer pool设置的很大,就会导致遍历时间变长清理buffer pool时,还包含清理AHI包含此表的数据,AHI的功能在这里就不多说了,主要是当b+tree的层级变高时,为避免b+tree逐层搜索,AHI能根据某个检索条件,直接查询到对应的数据页,跳过逐层定位的步骤。其次AHI会占用 1/16 的buffer pool的大小,如果线上表数据不是特别大,不是超高并发,不建议将开启AHI,可以考虑关闭AHI功能

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index';+----------------------------+-------+| Variable_name                   | Value |+----------------------------+-------+| innodb_adaptive_hash_index | ON    |+----------------------------+-------+1 row in set (0.01 sec)mysql> SET GLOBAL innodb_adaptive_hash_index=OFF;Query OK, 0 rows affected (0.00 sec)mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index';+----------------------------+-------+| Variable_name                   | Value |+----------------------------+-------+| innodb_adaptive_hash_index | OFF   |+----------------------------+-------+1 row in set (0.01 sec)

2、删除对应的磁盘数据文件ibd

在删除数据文件时,如果数据文件过大,删除过程会产生大量的io并耗费更多的时间,造成磁盘IO开销飙升,CPU负载过高,影响其他程序运行。我的一个好伙伴,就曾在线上库删除了一张 1TB 大小的表,结果20分钟,数据库无响应,最后库崩溃,重启了。

既然知道drop table做了2件事情,那就针对以上 2 个事情进行优化

在清除Buffer Pool缓冲上,为减少当个buffer pool的大小,可以合理设置innodb_buffer_pool_instances参数,减少buffer pool数据块列表扫描时间,同时关闭AHI功能

在步骤2上,可以巧妙的利用linux的硬连接特性,延迟删除真正的物理文件。

当多个文件名同时指向同一个Inode时,这个INODE的引用数 N>1, 删除其中任何一个文件名都会很快.因为其直接的物理文件块没有被删除.只是删除了一个指针而已;当INODE的引用数 N=1 时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时;

如果给数据库表的.ibd文件创建一个硬链接,当删除表时,删除物理文件时,其实删除的就是物理文件的一个指针,所以删除操作响应速度会非常快,大约不到1秒左右

下面就来演示一下具体的操作

先创建表文件的硬链接ln t_test.ibd t_test.ibd.bak删除表drop table t_test;

最后就是要真正删除掉物理文件,释放文件所占用的磁盘空间,那么问题来了,如果优雅的删除物理文件呢,在这里推荐大家coreutils工具集中的truncate命令

当然需要你先安装相关的软件包

wget Http://ftp.gnu.org/gnu/coreutils/coreutils-8.29.tar.xz使用非root进行解压tar -xvJf coreutils-8.29.tar.xzcd coreutils-8.29./configuremake使用root进行make install

安装好之后,就可以写一个脚本,非常优雅的分布删除大文件,${i}G 表示,每次删除 10G

#!/bin/bashTRUNCATE=/usr/local/bin/truncatefor i in `seq 2194 -10 10 `; do   sleep 2  $TRUNCATE -s ${i}G /data/mysql/t_test.ibd.hdlk donerm -rf /data/mysql/t_test.ibd.hdlk ;

关于“怎么drop掉mysql库中的1TB表单”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网数据库频道,小编每天都会为大家更新不同的知识点。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么drop掉mysql库中的1TB表单

本文链接: https://lsjlt.com/news/309851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么drop掉mysql库中的1TB表单
    这篇文章主要介绍“怎么drop掉mysql库中的1TB表单”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么drop掉mysql库中的1TB表单”文章能帮助大家解决问题。1、清除Buffer Poo...
    99+
    2023-06-27
  • SQL怎么恢复drop掉的表
    本篇内容主要讲解“SQL怎么恢复drop掉的表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL怎么恢复drop掉的表”吧! ...
    99+
    2024-04-02
  • mysql 中怎么恢复drop表数据
    mysql 中怎么恢复drop表数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。   数 据 类 型 MYSQL 数据库...
    99+
    2024-04-02
  • mysql中怎么用drop删除表中数据
    在MySQL中,可以使用DROP TABLE语句来删除表中的数据。下面是一个示例: DROP TABLE table_nam...
    99+
    2023-10-23
    mysql
  • Mycat中怎么实现MySQL单库分表
    Mycat中怎么实现MySQL单库分表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、Mycat安装部署安装环境Linux   目前只有1.6.5版本支持单库...
    99+
    2023-06-19
  • MySQL中如何使用undrop来恢复drop的表
    小编给大家分享一下MySQL中如何使用undrop来恢复drop的表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • mysql中drop index语句怎么使用
    在MySQL中,使用DROP INDEX语句来删除一个索引。语法如下: DROP INDEX index_name ON table...
    99+
    2024-04-09
    mysql
  • mysql中库和表的简单操作案例
    这篇文章主要介绍mysql中库和表的简单操作案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 库的操作1.创建数据库创建数据库:create database 库名 chars...
    99+
    2024-04-02
  • mysql cascade删不掉表怎么解决
    如果尝试使用CASCADE删除表时出现问题,可能是由于外键约束或其他依赖关系的存在。在这种情况下,您可以尝试以下方法来解决问题: ...
    99+
    2024-03-07
    mysql
  • 怎么迁移mysql数据库中的表
    本篇内容介绍了“怎么迁移mysql数据库中的表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!作为写脚本的,...
    99+
    2024-04-02
  • mysql怎么查询数据库中的表
    要查询数据库中的表,可以使用以下语句: SHOW TABLES; 这条语句将显示数据库中的所有表的名称。您可以将其与其他查询语句一...
    99+
    2024-04-02
  • 怎么查看mysql数据库中的表
    要查看MySQL数据库中的表,可以使用以下几种方法: 使用命令行工具:登录到MySQL数据库的命令行界面,然后使用以下命令来查看所...
    99+
    2024-04-09
    mysql
  • 怎么提交表单中disabled表单域的值
    这篇文章给大家分享的是有关怎么提交表单中disabled表单域的值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如果表单中的某个表单域被设定为disabled,则该表单域的值就不会被提交。但是有的时候确实需要提交...
    99+
    2023-06-08
  • MySQL数据库中怎么获取库中无主键的表
    本篇文章为大家展示了MySQL数据库中怎么获取库中无主键的表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 查看表主键信息查看表主键信息SELECT&n...
    99+
    2024-04-02
  • mysql怎么查询表中的数据库名
    mysql查询表中的数据库名的语法:“show databases”;mysql查询表中的数据库名的方法:查询所有数据库,sql语句为:“show databases;”查询指定数据库中所有表名,sql语句为:select&nbs...
    99+
    2024-04-02
  • mysql怎么查询数据库中的表名
    本篇内容介绍了“mysql怎么查询数据库中的表名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查询数据库中...
    99+
    2023-01-30
    mysql 数据库
  • MySQL中怎么修复数据库表
    今天就跟大家聊聊有关MySQL中怎么修复数据库表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一张损坏的表的症状通常是查询意外中断并且你能看到例如这...
    99+
    2024-04-02
  • MySQL中怎么实现分库分表
    今天就跟大家聊聊有关MySQL中怎么实现分库分表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Mysql分库分表方案1.为什么要分表:当一张表的数据...
    99+
    2024-04-02
  • mysql数据库中表怎么删除
    删除 mysql 数据库中的表的步骤如下:确保拥有删除权限。使用 drop table table_name 命令删除表。可使用附加选项,如级联删除外键 (cascade) 或检查表是否...
    99+
    2024-08-05
    mysql 数据丢失
  • oracle中drop表后无法释放空间怎么办
    在Oracle中,当使用DROP TABLE命令删除表时,实际上并不会立即释放表所占用的存储空间,而是将表移到回收站中。这是为了防止...
    99+
    2024-04-09
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作