Out Of Memory Quota!

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
4.0.8
【问题描述】
ods_dj_prd_stock_adapter failed to execute:Out Of Memory Quota![conn_id=368597]
java.lang.Exception: Out Of Memory Quota![conn_id=368597]

1、参数是否能修改?修改后动态生效或重启集群?值设置多少合适?
2、查看参数的命令是什么?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

看下这个 FAQ

或者可以再 asktug 中再搜索下 。感谢

我也看到论坛里其他朋友也遇到了类似问题,不懂的是这些
1、参数是否能修改?修改后动态生效或重启集群?值设置多少合适?
2、查看参数的命令是什么?

这个参数的设置并没有一定的标准 ,在新版本中已经放宽。同时此参数还与 oom-action、 tidb_mem_quota_query 有关联性
https://docs.pingcap.com/zh/tidb/stable/tidb-configuration-file#mem-quota-query

查询与在线修改 相关可以看如下文档

https://docs.pingcap.com/zh/tidb/stable/dynamic-config#在线修改-tidb-配置

默认
mysql> select @@tidb_mem_quota_query;
±-----------------------+
| @@tidb_mem_quota_query |
±-----------------------+
| 1073741824 |
±-----------------------+
1 row in set (0.01 sec)
改了2G
mysql> select @@tidb_mem_quota_query;
±-----------------------+
| @@tidb_mem_quota_query |
±-----------------------+
| 2147483648 |
±-----------------------+
1 row in set (0.00 sec)

退出session
mysql> \q

开启新session 查看
mysql> select @@tidb_mem_quota_query;
±-----------------------+
| @@tidb_mem_quota_query |
±-----------------------+
| 1073741824 |
±-----------------------+
1 row in set (0.01 sec)

mysql> set global tidb_mem_quota_query=‘2147483648’;
ERROR 1105 (HY000): Variable ‘tidb_mem_quota_query’ is a SESSION variable and can’t be used with SET GLOBAL
修改2G成功了 ,可是退出再进又变成了1G。。。。。。

  1. 请参考 https://github.com/pingcap/tidb/blob/v4.0.10/config/config.toml.example 中的 mem-quota-query 参数。
  2. 根据您的环境 tiup edit 修改或者 ansible 配置文件,或者k8s 修改参数

我是从3.0.9升级到4.0.8,我在配置文件/home/tidb/tidb-ansible/conf/tidb.yml 中加入了以下部分,
global:
# TiDB Configuration.

** # The socket file to use for connection.**
** # socket: “”**

** # Schema lease duration, very dangerous to change only if you know what you do.**
** # lease: “45s”**

** # The limit of concurrent executed sessions.**
** # token-limit: 1000**

** # Only print a log when out of memory quota.**
** # Valid options: [“log”, “cancel”]**
** # oom-action: “cancel”**

** # Set the memory quota for a query in bytes. Default: 32GB**
** # mem-quota-query: 34359738368**
mem-quota-query: 2147483648

帮忙看下这样修改参数正确吗?
如果让修改参数生效怎么做,有参考案例吗?

如果是使用 TiDB-ansible 配置参数 需要按照目前 TiDB-server 的服务器上的 相关配置文件进行参数添加 主要注意 对应配置的 变迁组关系。

global 这种形式是 Tiup 中 edit-config 中的 配置方式
尊享 yaml 文件规范,需要注意书写格式和 属性的 父子关系。
mem-quota-query 这类参数 是 root 级别的 参数。直接配置在 tidb 标签下即可

  • mem-quota-query
  • 作用域:GLOBAL
  • 默认值:32GB
  • 含义:该变量是 TiDB 全局 Global 配置,需在 TiDB 配置文件设置(可在 tidb-ansible conf/tidb.yaml 配置 mem-quota-query 滚更生效),如果一条查询语句执行过程中使用的内存空间超过该阈值,会触发 TiDB 启动配置文件中 OOMAction 项所指定的行为,配置文件 oom-action 默认值 log,表示打印超过内存阈值 SQL,可通过配置 cancel 实现 Kill SQL 语句,具体示例如下:
conf/tidb.yaml
---
# default configuration file for TiDB in yaml format
​
global:
  ...
  # Only print a log when out of memory quota.
  # Valid options: ["log", "cancel"]
  # oom-action: "log"
​
  # Set the memory quota for a query in bytes. Default: 32GB
  # mem-quota-query: 34359738368

感谢各位,我先找找"滚更"是怎样操作

Ansible-playbook rolling_update.yml --tags=tidb 会重启 tidb

https://docs.pingcap.com/zh/tidb/v3.0/upgrade-tidb-using-ansible

如果有可能还是尽量使用 tiup 吧。

我是从3.0.9 升级到了4.0.8 ,即使重启不确认使用哪种工具好 ?

目前主要使用的是 tiup,ansible 你可以多查看下3.0版本的文档。

ansible 修改如何操作呢,有没有操作步骤?

上面已经回答了。修改完配置之后,rolling_update -R tidb 即可。

谢谢以上的兄弟 ,搞过了没问题

好的 :ok_hand: