广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >怎么用C++实现数据库删除大表
  • 165
分享到

怎么用C++实现数据库删除大表

2023-06-03 09:06:40 165人浏览 安东尼
摘要

本篇内容介绍了“怎么用c++实现数据库删除大表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景:数据库的io压力非常大,如果在线上删除大表

本篇内容介绍了“怎么用c++实现数据库删除大表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

背景:数据库io压力非常大,如果在线上删除大表,对IO以及业务会造成很大的抖动;作为一名DBA的通用做法是,建立.frm 以及.ibd的硬连接,然后在drop table tablename;但是表文件依然存在于该机器上,如果直接用rm删除,会造成IO的until达到100%

问题:那么如何解决删除文件时,如果避免IO达到100%呢?

解决方案:通过ftruncate逐渐清除文件,下面本人提供自己写的slowrm来删除文件,测试io使用率10-20%之间,删除速度1个小时100多G(这里只是一个粗略的版本,各位看官可以自己修改下)

#include <iOStream>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <string>
#include <unistd.h>
//判读输入是否合法
int fileInputLegal(const char *pfile=nullptr);

int main(int arGC,char *argv[]){
//利用stat获取文件的大小
//调用open打开文件获取文件描述符
//调用ftrucate缩减文件的大小,直到0为止
    int fd = -1;

    //这个参数经过调整过的

    int deleteBytes    = 1024700;
    //这个目的是获取文件长度
    struct stat buf;
    off_t fileSize = 0;
    if( argc !=2 ){
        std::cout<<"你传输的参数不正确"<<std::endl;
        return -1;

    }
    const char *filename=argv[1];

    if(fileInputLegal(filename) < 0){
        return -1;

    }
    
    if((fd = open(filename,O_RDWR)) < 0 ){
        std::cout<<"打开文件"<<filename<<"失败"<<std::endl;
        return -1;

    }
    if(lstat(filename,&buf) <0){
        std::cout<<"获取文件信息(大小失败)"<<std::endl;
        return -1;    }
    fileSize = buf.st_size;
    while(fileSize > deleteBytes ){
        fileSize = fileSize - deleteBytes;
        if(ftruncate(fd,fileSize) < 0){
            std::cout<<"删除文件出错,请重新执行"<<std::endl;
            return -2;        }

        //这里特别要注意,设置的时间越短,ftruncate调用越频繁,设置不当,适得其反

        usleep(20000);    }    
    if(ftruncate(fd,0) < 0){
        std::cout<<"删除文件出错,请重新执行"<<std::endl;
        return -2;

    }
    close(fd);
    unlink(filename);
    return 0;}

int fileInputLegal(const char *pfile){
    if(nullptr==pfile){
        return -1;

    }

    if(access(pfile,R_OK|W_OK)<0){
        std::cout<<"对文件没有读写权限"<<std::endl;
        return -1;    }
    
    if(opendir(pfile) != NULL){
        std::cout<<"是一个目录"<<std::endl;
        return -1;

    }

    return 0;

}

编译方法:

g++ -std=gnu++11 -o slowrm slow_rm.cpp

使用方法:

怎么用C++实现数据库删除大表

“怎么用C++实现数据库删除大表”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么用C++实现数据库删除大表

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用C++实现数据库删除大表
    本篇内容介绍了“怎么用C++实现数据库删除大表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景:数据库的IO压力非常大,如果在线上删除大表...
    99+
    2023-06-03
  • MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查
    这篇文章主要介绍“MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查”,在日常操作中,相信很多人在MongoDB怎么实现创建删除数据库、创建删除表、数据增删改查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-02
  • PHP中怎么删除数据库表
    本篇文章给大家分享的是有关PHP中怎么删除数据库表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。PHP删除数据库表具体实现代码如下function deldata($...
    99+
    2023-06-17
  • mysql 大表批量删除大量数据的实现方法
    问题参考自:https://www.zhihu.com/question/440066129/answer/1685329456 ,mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业...
    99+
    2022-05-11
    mysql 大表批量删除 mysql 大表批量
  • MongoDB实现创建删除数据库、创建删除表(集合 )、数据增删改查
    一、 数据库使用 开启 mongodb 服务:要管理数据库,必须先开启服务,开启服务使用  mongod --dbpath c:\mongodb 管理 mongodb 数据库:(一定要在新的 cmd 中输入...
    99+
    2022-06-26
    MongoDB 创建删除数据库 创建删除表 创建删除对象 数据增删改查
  • MongoDB实现创建删除数据库、创建删除表(集合)、数据增删改查
    一、 数据库使用 开启 mongodb 服务:要管理数据库,必须先开启服务,开启服务使用  mongod --dbpath c:\mongodb 管理 mongodb ...
    99+
    2022-11-13
  • php怎么删除数据库对应的表
    在PHP开发中,删除数据库表是一个常见的操作。有时候在开发过程中需要删除某些不用的表,那么如何使用PHP完成这个操作呢?本文将会为大家介绍如何使用PHP删除数据库对应的表。一、使用DROP语句删除数据库表在MySQL中,可以使用DROP语句...
    99+
    2023-05-14
  • plsql怎么删除表数据
    要删除表中的数据,可以使用PL/SQL中的DELETE语句。DELETE语句用于从表中删除行。以下是一个使用PL/SQL删除...
    99+
    2023-10-18
    plsql
  • Visual C#数据表怎么删除和修改记录
    这篇文章主要讲解了“Visual C#数据表怎么删除和修改记录”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Visual C#数据表怎么删除和修改记录”吧!Visual C#数据表操作:用V...
    99+
    2023-06-18
  • 数据库中如何高效率删除大表历史数据
    这篇文章主要介绍数据库中如何高效率删除大表历史数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!清理大表历史数据通过将非分区表Online Redefinition转换为以删除条件为...
    99+
    2022-10-18
  • php怎么实现删除数据
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么实现删除数据?php实现基本数据增删改操作之删除数据根据id值删除信息 delete.php<php // header('Conten...
    99+
    2015-01-19
    php 数据
  • mysql怎么删除数据库
    这篇文章主要介绍了mysql怎么删除数据库,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql怎么删除数据库1. 通过win+r快...
    99+
    2022-10-18
  • 怎么删除SQLServerCompact数据库
    这篇文章主要讲解了“怎么删除SQLServerCompact数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么删除SQLServerCompact数据...
    99+
    2022-10-18
  • 怎么在数据表中删除数据
    今天就跟大家聊聊有关怎么在数据表中删除数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL 提供了 DELETE 和 TRUNCAT...
    99+
    2022-10-18
  • MySQL数据库中怎么定期删除日志表
    这篇文章将为大家详细讲解有关MySQL数据库中怎么定期删除日志表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 开启事件调度器set glob...
    99+
    2022-10-18
  • SQLserver中怎么删除某数据库的所有表
    SQLserver中怎么删除某数据库的所有表,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。方便删除数据库中所有的数据表,清空数据库,有些有约束...
    99+
    2022-10-18
  • Mysql怎么删除数据库表中的某一列
    本篇内容主要讲解“Mysql怎么删除数据库表中的某一列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql怎么删除数据库表中的某一列”吧!删除数据库表中的某一列删除某一字段的值update&...
    99+
    2023-07-02
  • MySQL中怎么删除数据库
    今天就跟大家聊聊有关MySQL中怎么删除数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL 删除数据库使用 mysqladmi...
    99+
    2022-10-18
  • MySQL中怎么删除多表数据
    MySQL中怎么删除多表数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  MySQL删除多表数据有哪些问题  1、delete...
    99+
    2022-10-18
  • 删除表数据的sql怎么写
    这篇文章给大家分享的是有关删除表数据的sql怎么写的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。一、SQL中的删除语法1、drop table 表名称   &...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作