集群每隔大概30分钟出现server is busy状态


e9ea87e0a4fa1b8e0fd5a129d33142c
通过慢查询发现,集群每隔大概30分钟,就会出现集中commit;,每次1.7万个 这种指令,导致整个集群出现短暂响应时间慢,这种是程序引起的还是tidb内部某个部分压力过大导致的?

这么规律,排查下有什么定时任务没,数据库的业务上的都查下

数据库这块是我安装的,安装后除了br备份,就没有啥定时任务了。
找到这个commit的txn,然后根据txn找一下sql,这个如何操作?

这么有规律,在有问题时间点刷刷数据库连接信息,看看能不能查到跑什么呢
select * from INFORMATION_SCHEMA.PROCESSLIST
where command<>‘Sleep’

从监控面板上看,是scheduler is busy,而且只有一个tikv节点有报这个busy,多半是热点写入导致的,可以分析下写入热点问题

写入热点数据,通过grafana的哪些监控可以判断出来?

你的应用程序有没有批量操作,比如批量插入或者导入的情况,然后程序中一次提交几百条数据这样的情况,排查下

开发说是没有,都是用户一条一条请求过来。不过不太相信开发的话,还是得找出证据来说明。

可以按专栏中的文章排查

有规律性的,基本都是定时任务执行,看看数据本身,或是应用

嗯,如果批量插入或者导入容易出现这种情况。你可以在dashboard上的日志搜索查看下对应节点在某个时间范围内的日志信息,看看有没有大量操作同一张表的日志


流量可视化里也看一下又没有热点表

可以写个脚本把当时的连接都打印出来

检查下是不是有定时任务

好像是跟analyze统计信息有关。每次出现都是伴随着analyzte统计语句的出现

我觉得analyze应该不会有那么多commit吧,应该是你commit多了,对应的表提交的多了,触发了自动analyze(可以先看下是不是自动收集信息的时间段之内),建议看下对应analyze的表在那个时间点是不是有很多增删改的语句。

经过测试,由于表的分区有1024个,后台一直在analyze,占用了大量资源,导致每隔一段时间就会出现server is busy,我现在的处理方法是把自动收集关闭,手动写脚本,凌晨指定时间收集统计信息。听官方说v7.5即将在未来两个出,对分区的统计收集有很好的支持。到时候升级一下集群版本再观察一下。

1 个赞

如何关闭的自动analyze 啊,我也想关闭


这个关闭就可以了。特别对分区较多的表,关闭后还会有统计信息收集的。关闭后,如果表的数据量比较大,需要等表执行完后才行

收到已经配置,谢谢