TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

0    619    2

Tags:

👉 本文共约1509个字,系统预计阅读时间或需6分钟。

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

在 TiDB 数据库中运行耗内存较大的 SQL 语句,观察其对 TiDB Server 内存使用情况的影响,对其进行监控和限制。

初始化环境

使用 TiUP bench 组件构造包括 customer、lineitem、nation 等在内的基础表结构以及数据:

过程:

时间较长,估计得1小时。

这是一个商业订购系统的数据库。其中,tpch.nation 表是国家信息、tpch.region 表是地区信息、tpch.part 表是零件信息、tpch.supplier 表是供货商信息、tpch.partsupp 表是供货商的零件信息、tpch.customer 表是消费者信息、tpch.orders 表是订单信息、tpch.lineitem 表是在线商品的信息。

执行测试 SQL 语句, 观察内存消耗情况(memory列)

反复执行测试用 SQL 语句,进行监控

通过监控 ( http://192.168.66.35:43000/ ):Grafana监控 --> TiDB --> Server --> Memory Usage 监控内存使用呈上升趋势,如下图:

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

找到内存占用较大的 SQL 语句

http://192.168.66.35:42382/dashboard 空密码

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

TiDB Dashboard SQL 语句分析

选择目标时间,以及数据库名称,可以看到 SQL list,其中可以通过『平均内存』看到集群中,执行过的 SQL 消耗的平均内存:

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

TiDB Dashboard 慢查询

选择目标时间,以及数据库名称,可以看到 SQL list,按照『总执行时间』排序:

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

点击排序结果 SQL,并查看详情,可以看到该 SQL 使用的最大内存:

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

通过参数限制单条 SQL 语句对于内存的使用

配置参数

修改参数 tidb_expensive_query_time_threshold ,使测试 SQL 可以被记录到 tidb.log 中, 如下:

修改参数 tidb_mem_quota_query ,限制测试 SQL 的内存使用为 107 M, 如下:

观察内存

再次执行测试 SQL 语句, 观察内存和磁盘的消耗情况:

参考:https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage/

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

解决:

重新测试:

观察 TiDB Server 日志

可以通过过滤 tidb.log 中的 expensivequery 关键字,来发现内存占用高的 SQL ,如下:

可以通过过滤 tidb.log 中的 memory exceeds quota, spill to disk now 关键字,来发现 SQL 执行过程中的一部分中间结果使用了磁盘作为临时存储,如下:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

最后,我们观察下 Grafana 监控 --> TiDB --> Server --> Memory Usage 内存使用情况:

TiDB数据库OOM问题诊断及处理(查询内存消耗较大的SQL语句)

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部