官方参考
注意事项
TiDB不允许修改 操作系统内存分配策略为 2
,只允许为 0
或 1
TUG修改内存使用策略导致 TiDB自动下线
什么是操作系统内存分配策略?
调整TiDB-Server的内存使用上限tidb3.0
1 修改 inventory.ini
inventory.ini
配置文件最后添加MemoryLimit=25G
- 根据自己机器实际的内存来设置
- 当 TiDB-Server 进程的
常驻内存
超过这个限制,进程将被杀死 - 并且在TiDB-Server的日志中抛出 OOM 异常
[root@test ~]# cat /etc/systemd/system/tidb-4000.service
[Unit]
Description=tidb-4000 service
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
# 常驻内存上限
MemoryLimit=25G
LimitNOFILE=1000000
#LimitCORE=infinity
LimitSTACK=10485760
User=tidb
ExecStart=/home/tidb/deploy/scripts/run_tidb.sh
Restart=always
RestartSec=15s
[Install]
WantedBy=multi-user.target
[root@dev11 ~]#
注:这个操作改变的是 /etc/systemd/system/tidb-4000.service
文件中的配置
[root@hostname ~]# cat /etc/systemd/system/tidb-4000.service | grep MemoryLimit
MemoryLimit=25G
[root@hostname ~]#
TiDB Server 常驻内存与实际堆内存相差较大
2 滚动更新 tidb (修改完配置文件一定要更新配置)
[root@hostname ~]# ansible-playbook rolling_update.yml --tags=tidb
修改日志保存天数、设置最大索引长度
修改tidb.yml 一定要对应版本的配置来配置
tidb3.0修改
设置日志保留天数
max-days: 10
以字节为单位设置查询的内存配额。默认32G
mem-quota-query: 1073741824
设置最大索引长度
max-index-length: 12288
[root@hostname ~]# ansible-playbook rolling_update.yml --tags=tidb
tidb4.0修改
执行:
tiup cluster edit-config test-cluster
添加以下配置
server_configs:
tidb:
# 以字节为单位设置查询的内存配额。4.0默认1G
mem-quota-query: 1073741824
# 设置最大索引长度
max-index-length: 12288
# 最长的 SQL 输出长度。(变更)4.0需要修改
log.query-log-max-len: 6000
# 设置日志保留天数
log.file.max-days: 10
tikv:
pd:
重新加载配置文件
tiup cluster reload tidb-dev -R tidb,tikv
或
tiup cluster reload tidb-dev -N ip:port
mem-quota-query
- 单条 SQL 语句可以占用的最大内存阈值,单位为字节。
默认值:1073741824
超过该值的请求会被 oom-action 定义的行为所处理。
该值作为系统变量 tidb_mem_quota_query 的初始值。