tidb删除数据很慢

delete from + delTab + where +timeKey+ < startDay limit 100000,
删除数据很慢10多秒删除一次,表有10亿条数据并按timeKey建了索引,删除的很慢,各位大神有快方案?

https://docs.pingcap.com/zh/tidb/stable/dev-guide-paginate-results

1 个赞

SELECT
floor((t.row_num - 1) / 1000) + 1 AS page_num,
min(t.id) AS start_key,
max(t.id) AS end_key,
count(*) AS page_size
FROM (
SELECT id, row_number() OVER (ORDER BY id) AS row_num
FROM books
) t
GROUP BY page_num
ORDER BY page_num;

先找id 找到后

delete talbe where id>999 and I’d<99999

1 个赞

image
这段SQL执行时间慢不慢呢 ??消耗多久

image

delete table where id =1;
delete table where id =2

写个python脚本 ,开启10个线程。 速度飞起! 我经常这么干!
注意:监控CPU

limit 100000这种删除会越删越慢,不要加里面的,要用where 条件

  1. 这个表有主键没 ?
  2. select 主键id from deltable where timekey < ‘2023-0101’; 看看需要多久??
  3. python脚本从 上面 获取的 主键id 并行删除 delete from deltable where id = 111 。 python的会??

获取最大最小ID的SQL 语句执行起来都很慢,也是瓶颈


1万条

一百万条花了191秒

分页删除,楼上给了方案。还可以避免热点问题

到底是 秒 还是 毫秒???

先把你 tidb 集群的配置先贴出来,部署架构、对应机器的配置;

而且,你别用 navicat测了,我看你时间显示都有问题,你就用mysql 客户端,直连测吧

有, 留下的数据插到别的表里, 然后drop表, 之后rename不就行了。

社区大佬写的一个脚本,你看看有没有用
#可以实现删除百万级别以上的数据,而且不影响tidb正常使用

date1=date -d “1 day ago” +“%Y-%m-%d”
echo $date1
delete_db_sql=" delete from xxa where a.create_time < ‘2023-01-01 00:00:00’ and a.intelligent_type = ‘2’ limit 50000;"
echo $delete_db_sql
i=0

while ((++i)); do
a=$(/bin/mysql -uroot -pxxx -A xxx -h10.20.10.xx -P 4000 --comments -e “${delete_db_sql}” -vvv|grep “Query OK” |awk ‘{print $3}’)
echo $a
if (($a<1)); then
break 1
fi
sleep 1
printf “%-4d” $((i))
done

realcp1018/tidb-toolkit 试试这个

10亿数据,删完还剩多少啊

慢慢的批量删除了,这个计划任务

哪个库都不快

怎么看着是ms 是毫秒啊