tidb4.0.0如何定位tidb-server重启原因

前提:

  • tidb版本v4.0.0
  • 192.168.192.32、192.168.192.31两台tidb-server做的HA,都是8核64G

问题:

1、查看监控发现其中192.168.192.32内存使用量发生大的波动,之后因为oom重启(下面已截图)。该如何定位重启的原因是大查询导致,还是并发导致。如果是并发、大查询该如何定位?
2、按照这个时间段筛选,查看系统中记录的慢查询语句并没有过大的sql。
3、如果是大sql语句导致tidb-server重启,tidb是否会记录导致oom的大sql,如果不记录,那该以何种方式定位,是由哪个大查询导致的?
4、对于tidb-server,oom定位问题应该主要看哪些监控页面?
慢查询语句,按内存占用从大到小排列:

SELECT
        DATE_FORMAT( Time, '%Y/%m/%d-%H:%i' ) AS '发生日期',
				Digest as '指纹',
        CONCAT( Query_time, '(秒)' ) AS '执行这个语句花费的时间',
                -- Cop_wait_addr AS '等待时间最长的 cop-task 所在地址',
                DB AS 'DB',
                Request_count AS 'Cop请求数量',
                Process_keys AS 'Cop处理的key的数量', 
        `Query` AS 'SQL语句',    
        CONCAT( Process_time, '(秒)' ) AS 'SQL在TiKV处理时间和',
        CONCAT( Wait_time, '(秒)' ) AS 'SQL在TiKV等待时间和',
        Mem_max / 1024 / 1024 AS 'sql使用的内存mb',
        CONCAT( `User`, '@', `HOST` ) AS '谁执行的',
        CONCAT( Backoff_time, '(秒)' ) AS '语句遇到错误,在重试前等待的时间',
        ( CASE succ WHEN '1' THEN '成功' ELSE '失败' END ) AS '是否执行成功',
        Stats AS '统计信息时间戳,是否显示为pseudo' 
FROM
        information_schema.`slow_query` 
WHERE
        `is_internal` = FALSE -- 是否为 tidb 内部的 sql 语句
        AND DB != ''
       AND time BETWEEN '2020-09-02 02:30' AND '2020-09-02 02:57'
ORDER BY
        Mem_max DESC
        LIMIT 2000;


192.168.192.32tidb-server重启

查看192.168.192.32服务器,是因为内存溢出重启

1 个赞

https://github.com/pingcap/tidb-map/blob/master/maps/diagnose-map.md#tidb-集群问题导图

看下这个?

多谢
1、看了,意思就是导致oom的原因还是无法定位是因为大查询引起的还是并发导致的是吧?
2、tidb-server只要重启了,在此期间没有运行完的sql是无法记录的是么?

1 个赞

嗯,需要结合业务综合判断。

前端应该有记录。tidb 中没有类似记录

问题:

1、事务日志的记录在哪里,如何查找事务日志。事务日志是commit之前记录还是之后记录?
2、Tidb是否可以开启临时表空间,像Oracle的临时表空间可以用来做查询和存放一些缓冲区数据,来减轻内存使用压力,把压力分散到磁盘上。

指的是什么

4.0 有类似设置。当超过某个阈值,将缓存结果放在磁盘上,可以看下 4.0 tidb 的配置文件参数说明

前提:

  • tidb是从3.0.11使用tiup升级到4.0.0版本

1、指的是sql的事务日志是否有记录,方便分析一个事务中执行了哪些sql,可以做手动回滚操作。
2、参数 oom-use-tmp-storagetmp-storage-path tmp-storage-quota这三个参数在配置文件中没有看到,需要手动修改配置文件添加么,如何设置生效。
在tiup主机上查看配置文件

做了一个sql的大查询,查看内存占用监控以上三个参数并没有生效

修改参数使用 tiup cluster edit-config 修改,reload生效,文档有提及,按照关键字搜索下。

genera log 看可以满足需求吗。

https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file

非常感谢:
1、我看是server级别的这个该如何生效,直接SET GLOBAL tidb_general_log = 1就可以么,如果设置开启哪个参数可以控制这个日志的存储大小,以防日志保存过大?
image
2、参数修改是否以下这几个参数联合使用就可以,还有其他参数会有相关影响么

tiup cluster edit-config <cluster-name>
server_configs:
  tidb:
    mem-quota-query = 1073741824
    oom-action = log
    oom-use-tmp-storage = true
    tmp-storage-path =  "/tmp/<os/user.Current().Uid>_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage"
    tmp-storage-quota = -1

生效

tiup cluster reload <cluster-name> -R tidb

一般线上不建议开启,有较大的性能影响。

这个具体问题具体看需要哪些参数,本次 oom 问题,可以使用以上参数缓解和记录

好的多谢,我这边修改测试下。

:call_me_hand:

tiup cluster edit-config
如下为更改的参数已经生效

更改参数后执行了大查询语句发现跟更改之前并没有什么变化,还需要更改哪个地方能生效么?

要什么变化,tidb-server 有 oom 吗。

做了几个大的查询oom了,感觉并没有把查询压力分散到磁盘上。



mem-quota-query: 9663676416 (总内存的 40%)
tmp-storage-path 配置项去掉。使用默认值即可。

在执行个 14 G 左右的 sql 看下,默认路径下是否有临时文件产生。

mem-qutio-size: 9663676416 这个参数没找到,是哪个的配置参数啊

在没有配置这三个参数( oom-use-tmp-storagetmp-storage-path tmp-storage-quota)的时候我这边就看到了临时文件但是都是0

已更正,

没配置是 0 没问题的,配置了是 0 不正确了就。先调整参数看下吧。

多谢,我先测下,稍后告知结果

前提:我的tidb是从3.0.11使用tiup升级到4.0.5版本

查看配置还是0,oom了



image