分批次删除大表数据的shell脚本】的更多相关文章

#!/bin/bash # 分别是主机名,端口,用户,密码,数据库,表名称,字段名称 readonly HOST="XXX" readonly PORT=" readonly USERNAME="tmp" readonly PASSWD="tmp" readonly DATABASE_NAME="YYY" readonly TABLE_NAME="ZZZ" readonly COLUMN_NAME…
#!/usr/bin/env python # encoding: utf-8 #@author: 东哥加油! #@file: del_tb_bigtable_statistic.py #@time: 2018/11/21 15:39 import pymysql import datetime import math import time #获取连接 def get_conn(): conn = None try: conn = pymysql.connect( host="192.168.…
一.推荐.删了不可恢复 TRUNCATE TABLE table_name IMMEDIATE 二. DB2 LOAD FROM d:\DB2_BAK\null.del of del REPLACE INTO table_name null.del为空文件 table_name表名…
转自http://tech.ddvip.com/2013-07/1373269453198566.html 微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结: (微博地址:http://weibo.com/1642466057/yuPz2guYJ) 当buffer_pool很大的时候(30G+),由于删除表时,会遍历整个buffer pool来清理数据,会导致MySQL hang住,解决的办法是: 1.当innodb_f…
mysql删除大表更快的drop table办法 参考资料:https://blog.csdn.net/anzhen0429/article/details/76284320 利用硬链接和truncate降低drop table对线上环境的影响 在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起:直到DROP结束才继续执行:这是因为INNODB会维护一个全局独占锁(在table cache上面), 直到DROP TABLE完成才释放.在我们常用的ext3,ext4,ntf…
在清理整个大表时,我们推荐使用drop,而非delete.但是如果表实在太大,即使是drop,也需要消耗一定的时间.这时可以利用linux的硬连接来快速删除大表,操作过程如下:有一个大表test,共有4194304行数据,表空间文件大小为1.3Gmysql> select count(*) from test;+----------+| count(*) |+----------+|  4194304 |+----------+1 row in set (15.20 sec) mysql> s…
最近在开发的时候遇到一个mysql的子查询删除原表数据的问题.在网上也看了很多方法,基本也是然并卵(不是写的太乱就是效率太慢). 公司DBA给了一个很好的解决方案,让人耳目一新. DELETE fb.* FROM froadbill.bill fb LEFT JOIN froadbill.refundinfo br ON br.billSeqNo = fb.seq_no WHERE br.billSeqNo IS NULL AND fb.create_time >=' ; froadbill.b…
MYSQL中delete删除多表数据 DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1. delete from t1 where 条件 2.delete t1 from t1 where 条件 3. delete t1 from t1,t2 where 条件 4.delete t1,t2 from t1,t2 where 条件 前 3者是可行的,第4者不可行. 也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,在两个表之间建立级联…
1.权限问题 alter routine 编辑或删除存储过程 create routine 建立存储过程 execute 创建存储过程 2.存储过程相关的一些命令 show procedure status\G  查看数据库中有哪些存储过程 show procedure status where db = 'db_name'\G 查看指定数据库(db_name)中有哪些存储过程 select name from mysql.proc where db = 'db_name';  查看指定数据库(…
--删除整个表数据 SET STATISTICS TIME ON; DECLARE @Timer DATETIME = GETDATE(); TRUNCATE TABLE LOG_DEBUG_ERROR ; SELECT DATEDIFF(MS, @Timer, GETDATE()) AS [执行时间(毫秒)]; SET STATISTICS TIME OFF; select * from SYS_PERFORMANCE 不可以添加where 删除后自增id从1开始…
来源于:https://www.cnblogs.com/CtripDBA/p/11465315.html,侵删,纯截图,避免吸引流量之嫌 case1,删除大表时,因为清理自适应hash索引占用的内容导致的MySQL服务挂起 来源:https://keithlan.github.io/2018/03/27/truncate_drop/ case2,大表的随意Drop或者truncate导致MySQL服务的挂起 按照本文中的结论就是 MySQL5.6版本以下:使用truncate table + d…
--删除数据库表数据 慎用 create PROCEDURE sp_DeleteAllData AS ) ) ) ) ) ) begin try begin tran -- 失效索引,触发器 open tb fetch next from tb into @tblName begin set @sNOCHECKCONSTRAINT ='ALTER TABLE ' + @tblName+ ' nocheck CONSTRAINT ALL' set @sDISABLETRIGGER ='ALTER…
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo-- =============================================-- Author: wolf-- Create date: 2014-06-25-- Description: 将表数据生成Insert脚本-- Demo : exec pCreateInsertScript 'Station','StationID = 61'-- ========================…
使用db2的时候,有时候需要对表数据进行删除,防止数据太多,造成数据库空间满了 以下是一个定时删除表tmp,tm1中id为1的数据的脚本 #!/bin/sh ##---------------------------------------------------------- ##--功能说明:定时删除数据 ##--开发公司:XXX ##--作者:qys ##--时间:2019-01-02 ##--输入参数:无 ##--版本维护 ## 版本: 更新日期: 更改人: 更改说明: ## -----…
前言 删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候.这样一条命令下去,MySQL可能就直接夯住了,外在表现就是QPS急速下降,客户请求变慢. 解决办法 1.业务低峰时间手动执行删除 这个可能就需要DBA不辞辛劳,大晚上爬起来删表了. 2.先清除数据,最后再删除的方式 譬如1000万条数据,写脚本每次删除20万,睡眠一段时间,继续执行.这样也能做到对用户无感知. 3.对表文件(idb文件…
需求场景: 有一业务数据库,使用MySQL 5.5版本,每天会写入大量数据,需要不定期将多表中“指定时期前“的数据进行删除,在SQL SERVER中很容易实现,写几个WHILE循环就搞定,虽然MySQL中也存在类似功能,怎奈自己不精通,于是采用Python来实现 话不多少,上脚本: # coding: utf-8 import MySQLdb import time import os # delete config # 如果VIEW_OR_RUN = "VIEW",仅生成小批量删除的…
数据库有一张表数据量很大,真正WEB项目只用到一个月内的数据,因此把一个月前的旧数据定期归档. 1 - 创建一个新表,表结构和索引与旧表一模一样 create table table_news like table_name; 2 - 新建存储过程,查询30天的数据并归档进新数据库,然后把30天前的旧数据从旧表里删除 delimiter $create procedure sp()begininsert into tb_new select * from table_namewhere crea…
背景 数据库分区表数据越来越大,需要对过期话的数据进行迁移,以及大的分区表需要进行数据的清理和删除,达到释放磁盘空间的目的. 问题说明 环境:linux 6.X 数据库:oracle 11.2.0.4 (PSU为2016年6月份的) 问题说明: S_T_RTNRP_STATUS_2017是分区表,每天一个分区,且一共使用了2.5TB的空间,现在需要进行空间清理,操作步骤是先对表进行truncate,然后删除表,后对相应的表空间的每个数据文件进行resize成1g,在进行删除表空间语句 drop…
在mysql中遇到一个大表,大概有17G左右,在对这个表进行查询.修改时均遇到了很大的困难,于是想着删除这张表.通常的删除操作可以通过delete.drop.truncate操作,试了这三个命令,但是最终都以失败,都无法删除此表,最后使用下面的方式最终删除.(linux下) 1.建立硬链接 找到mysql的数据文件,找到这张表在硬盘上的名称,我的是tmplst.frm和tmplst.ibd,通过查看tmplst.ibd的大小到了17G左右,这就是无法删除的原因.其中tmplst是表名. 在这个文…
先说问题:我遇到的问题是,在用户和用户组对象关系中他们是多对多关系.所以中间是成在一张中间表的.经理要求当逻辑删除对象数据时,必须删除中间表中的数据. hibernate是面向对象操作sql语句的,如何当逻辑删除对象时,删除中间表呢,我开始想把中间表生成一个对象,但是发现中间表无法建立映射关系,所以放弃 最终选择写纯sql语句,语句如下 public void deleteGroupById(int id) { this.getSessionFactory().openSession().cre…
********************************* 注意备份好数据! *************************** 1.删除表数据 delete 表名 2.执行 dbcc checkident('表名',reseed,0) 举例 :删除表 T1的数据 使id从0开始 DELETE dbo.T1 dbcc checkident('dbo.T1',reseed,0) //说明 要加上 架构 .另: (如果没有主键或主键不是int型则无效) *****************…
在mysql中删除数据方法有很多种,最常用的是使用delete来删除记录,下面我来介绍delete删除单条记 录与删除多表关联数据的一些简单实例. 1.delete from t1 where 条件 2.delete t1 from t1 where 条件 3.delete t1 from t1,t2 where 条件 4.delete t1,t2 from t1,t2 where 条件 前3者是可行的,第4者不可行. 也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,…
[使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] 小表join大表转为小表broadcast+map大表实现.具体为: 普通的join是会shuffle的,而一旦shuffle,就相当于会将相同key的数据拉取到一个shuffle read task中再进行join,此时就是reduce join,此时如果发生数据倾斜,影响处理性能,而此时恰好一…
实现:巧用LINK(硬链接),原理:linux文件系统中硬链接相当于文件的入口,记录着ionde的信息.一个文件存在多个硬连接时,删除一个硬链接不会真正的删除ionde(存储文件的数据) # 创建硬链接 ln test_table.ibd test_table.hdlk # 登陆数据库,删除table表. drop table test_table; 会很快删除完,因为只是删掉了硬连接符号. # 退出数据库,删除硬链接数据文件 rm -f test_table.hdlk…
问题: MySQL (version 5.7.26) 数据库有一批表 xxx_yyy,由于评估的数据量可能比较大,因此每张表都设置了表分区,把每个月的数据保存在单独的分区里. 那么如果每年年末,没有提前创建好第二年的表分区,当第二年的数据写入时,就会出现以下报错: ERROR 1526 (HY000): Table has no partition for value from column_list 解决: 今年的表分区忘了创建,因此需要批量对以 xxx_ 开头的表创建分区.执行开发提供的存储…
工作中,往往数据库备份是件非常重要的事情,毕竟数据就是金钱,就是生命!废话不多,下面介绍一下:如何实现对MySQL数据库进行分库备份(shell脚本) Mysq数据库dump备份/还原语法: mysqldump -u 用户名 –p 数据库名 > 导出的文件名; mysqldump -u 用户名 –p 数据库名 < 导入的文件名; 首先,我们需要知道是备份全库还是部分库: 其次,我们需要获取到需要备份的库名列表: 最后,编写脚本实现数据备份. 分库备份: 1.查看当前环境是否启动了MySQL服务…
需求: 项目中有一张表大概有7000多万条数据,造成表空间已满,需要清理部分数据,打算清理3000万. 2B 做法: delete from table_name where ID > '40000000'; 备注:select count(1) from table_name where ID > 'his_batch_4000000';  的结果大概有3000万条数据. 影响: 删了N个小时也没执行完,最终强制停止,造成表被锁.(没有管理员权限,需要联系DBA 才能解锁) 改进: decl…
使用REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值. 使用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作.这样就可以不必考虑在同时使用DELETE和INSERT时添加事务等复杂操作了. 在使用REPLACE时,表中必须有唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE就和INSERT完全一样的. 在执行REPLACE后,系统返回了所影响的行…
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL' EXEC sp_MSForEachTable 'DELETE FROM ?' EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'ALTER…
DELETE og,oiFROM order_goods og, order_info oiWHERE oi.order_id = og.order_id and oi.user_id = 6…