神秘的mariadb 10.4.1 ram ussage

au9on6nz  于 2023-08-05  发布在  其他
关注(0)|答案(6)|浏览(178)

我已经从mariadb 10. 1. 36升级到10. 4. 8,我可以看到神秘的增加ram ussage在那个新版本。我还编辑了innodb_buffer_pool_size ant,如果设置为15 M或4G,似乎没有影响,RAM只是慢慢增加。之后,它吃整个公羊和oom杀手杀死mariadb,这是重复。
我的服务器有8 GB的RAM,每天增加60- 150 MB。这并不可怕,但我有大约150个数据库服务器,所以它的巨大问题。
我可以通过重新启动mariadb并重新启动来临时解决问题。
数据库服务器信息:数据库:200+表:28200(每个数据库141)个平均活动连接:100-200存储数据的大小:100-350GB
CPU:4 RAM:8GB
这是我的配置:

server-id=101
datadir=/opt/mysql/
socket=/var/lib/mysql/mysql.sock
tmpdir=/tmp/
gtid-ignore-duplicates=True
log_bin=mysql-bin
expire_logs_days=4
wait_timeout=360
thread_cache_size=16
sql_mode="ALLOW_INVALID_DATES"
long_query_time=0.8
slow_query_log=1
slow_query_log_file=/opt/log/slow.log
log_output=TABLE
userstat = 1
user=mysql
symbolic-links=0
binlog_format=STATEMENT
default_storage_engine=InnoDB
slave_skip_errors=1062,1396,1690innodb_autoinc_lock_mode=2
innodb_buffer_pool_size=4G
innodb_buffer_pool_instances=5
innodb_log_file_size=1G
innodb_log_buffer_size=196M
innodb_flush_log_at_trx_commit=1
innodb_thread_concurrency=24
innodb_file_per_table
innodb_write_io_threads=24
innodb_read_io_threads=24
innodb_adaptive_flushing=1
innodb_purge_threads=5
innodb_adaptive_hash_index=64
innodb_flush_neighbors=0
innodb_flush_method=O_DIRECT
innodb_io_capacity=10000
innodb_io_capacity_max=16000
innodb_lru_scan_depth=1024
innodb_sort_buffer_size=32M
innodb_ft_cache_size=70M
innodb_ft_total_cache_size=1G
innodb_lock_wait_timeout=300
slave_parallel_threads=5
slave_parallel_mode=optimistic
slave_parallel_max_queued=10000000
log_slave_updates=on
performance_schema=on
skip-name-resolve
max_allowed_packet = 512M
query_cache_type=0
query_cache_size = 0
query_cache_limit = 1M
query_cache_min_res_unit=1K
max_connections = 1500
table_open_cache=64K
innodb_open_files=64K
table_definition_cache=64K
open_files_limit=1020000
collation-server = utf8_general_ci
character-set-server = utf8
log-error=/opt/log/error.log
log-error=/opt/log/error.log
pid-file=/var/run/mysqld/mysqld.pid
malloc-lib=/usr/lib64/libjemalloc.so.1

字符串

fruv7luv

fruv7luv1#

我解决了!内存分配库问题。
如果执行以下SQL查询:
显示变量LIKE 'version_malloc_library';
你必须得到值“jemalloc”库。如果你只得到“系统”,你可能会有问题。
要改变这一点,您需要编辑此目录中的任何.conf文件:
/etc/systemd/system/mariadb.service.d/
在那里,添加这一行:
环境=“LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1”
(this库文件可能在其他文件夹中)
然后你必须重新启动mysqld
service mysqld stop && systemctl daemon-reload && service mysqld start

kx5bkwkv

kx5bkwkv2#

你在my. cnf中增加值时忘乎所以了。
许多缓存会一直增长直到达到其极限,因此您会经历内存增长。
SHOW GLOBAL STATUS LIKE 'Max_used_connections';的值是多少?具有大的max_connections强调了其他几个值;放低点。
但也许真正糟糕的是表缓存--它的单位是 * 表 *,而不是 * 字节 *。把这些放下来:

table_open_cache=64K
innodb_open_files=64K
table_definition_cache=64K

字符串

siotufzp

siotufzp3#

我也有同样的问题。是因为配置不好吗?还是新版本的bug?
就在我将Debian 9升级到Debian 10的时候,mariadb 10.1更新到了10.3。我试着用mariadb 10.4解决这个问题,但没有改变。
我想降级版本,但我认为这是neccesary转储所有数据库和恢复它,这意味着没有服务的小时。
我不认为Debian 10与这个问题有关

qgzx9mmu

qgzx9mmu4#

请阅读我以前关于替代内存分配器的评论…
使用jemalloc时:

的数据
使用默认内存分配器时:

4xy9mtcn

4xy9mtcn5#

尝试使用tcmalloc
环境=“LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4.5.3.1”

iih3973s

iih3973s6#

TL;DR:从mariadb.org获取MariaDB包。

我在Debian 11上的默认10.5.18-MariaDB-0+ deb 11 u1也有类似的问题。它每小时消耗约5 Mb RAM。
这很神秘,原因有二:

  • 我们在许多其他服务器上有完全相同的OS/MariaDB,并且运行良好
  • 这个特定的机器运行非常小的数据库(如果备份到SQL,则为300 Kb),因此即使完全缓存所有索引,它可能需要多少空间?500Kb?1Mb?100 Mb?但内存消耗每天都在慢慢增加。

我尝试了使用jemalloc的建议,这只是部分工作(内存消耗增长较慢,但仍然增长)。
所有其他建议也没有帮助。它们在“普通”mariadb中减少了内存消耗,但不能帮助防止内存泄漏(我们可能有)。它是治疗其他问题的良药。
真正有帮助的是将MariaDB升级到mariadb.org官方网站的版本。(所有流行的发行版都有预编译的软件包)我的MariaDB正常运行时间现在超过2个月。我每小时记录一次内存使用情况:
我现在的日志是:

Sun Apr 23 14:17:01 UTC 2023
     Active: active (running) since Sun 2023-04-23 13:42:29 UTC; 34min ago
     Memory: 184.4M
....
Fri May 26 10:17:01 UTC 2023
     Active: active (running) since Sun 2023-04-23 13:42:29 UTC; 1 months 2 days ago
     Memory: 235.1M
....
Fri Jun 30 10:17:01 UTC 2023
     Active: active (running) since Sun 2023-04-23 13:42:29 UTC; 2 months 6 days ago
     Memory: 236.4M

字符串
它仍然会随着时间的推移“吃掉”一些内存,但速度越来越慢。(第一个月为50 Mb,第二个月为1 Mb,而原始Debian MariaDB为5 Mb/hr)。

相关问题