it is normal to have a memory usage of 85%?

Hi everybody, I am new here and I am confronted with a situation, so I will start with the questions first: 1. It is normal that on my server, mariadb to use almost 85% of available ram or something is wrong? 2. In case I want to limit the whole application (mariadb) to not use more than 5.5 GB RAM from total of 7.8GB it could be possible - without affecting it's performance? 3. Is anything to optimize (change) now? If yes, which variable? 4. Do we need more RAM for this server or actual RAM could be enough? See below: Operating system: "Debian 12.10 (bookworm)" MariaDB Version: 10.11.11-MariaDB-0+deb12u1-log The server was configured (limited) to use for InnoDB -> max 3GB Ram MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 3221225472 | +-------------------------+------------+ 1 row in set (0.001 sec) But, on that server *we are running also MySam, Memory *and Innodb, in total, ~70 databases (8 MySam, 1 MEMORY, and the rest are InnoDB) MariaDB [mysql]> select count(distinct db) from db; +--------------------+ | count(distinct db) | +--------------------+ | 73 | +--------------------+ 1 row in set (0.001 sec) MariaDB [mysql]> SYSTEM 4CPU, 7.8GB RAM root@adsns-db-node0:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 776M 764K 775M 1% /run /dev/sda1 150G 48G 97G 34% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 241M 138K 241M 1% /boot/efi tmpfs 776M 0 776M 0% /run/user/0 root@adsns-db-node0:~# I found some articles on internet regarding /dev/shm, which could influence mysql performance. In my case /dev/shm is not used even defined, so the system could use the whole available RAM - 7.8GB RAM, so I excluded this as possible cause. MariaDB [(none)]> SHOW VARIABLES LIKE '%buffer_size%'; +----------------------------+-----------+ | Variable_name | Value | +----------------------------+-----------+ | aria_pagecache_buffer_size | 134217728 | | aria_sort_buffer_size | 268434432 | | bulk_insert_buffer_size | 8388608 | | innodb_log_buffer_size | 16777216 | | innodb_sort_buffer_size | 1048576 | | join_buffer_size | 4194304 | | key_buffer_size | 10485760 | | mrr_buffer_size | 262144 | | myisam_sort_buffer_size | 134216704 | | preload_buffer_size | 32768 | | read_buffer_size | 131072 | | read_rnd_buffer_size | 262144 | | sort_buffer_size | 2097152 | +----------------------------+-----------+ 13 rows in set (0.001 sec) Traffic is not high, just 123 queries per second. MariaDB [(none)]> status; -------------- mysql Ver 15.1 Distrib 10.11.11-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper Connection id: 877596 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.11-MariaDB-0+deb12u1-log Debian 12 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /run/mysqld/mysqld.sock Uptime: 7 days 3 hours 24 min 6 sec Threads: 78 Questions: 75901186 Slow queries: 4891595 Opens: 12573592 Open tables: 2000 Queries per second avg: 123.007 -------------- MariaDB [(none)]> Even I am restarting mariadb, after a short time, the memory usage is 85% root@adsns-db-node0:~# free -g total used free shared buff/cache available Mem: 7 6 0 0 0 1 Swap: 0 0 0 root@adsns-db-node0:~# The swap is not used, just the memory, which is ok. CPU usage is less than ~10%, so is ok. See below, output of top. %Cpu(s): 2.2 us, 0.7 sy, 0.0 ni, 96.2 id, 0.4 wa, 0.0 hi, 0.4 si, 0.0 st MiB Mem : 7750.8 total, 161.4 free, 6351.8 used, 712.6 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1399.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1555028 mysql 20 0 7752424 6.5g 15476 S 10.6 85.2 188:29.16 mariadbd root@adsns-db-node0:~# pstree |grep maria |-mariadbd---51*[{mariadbd}] root@adsns-db-node0:~# All 51 childs of mariadb are using 85% from the system memory (each child ~1.6% of total RAM). I found a mysql calculator and changing innodb_buffer_pool_size - its default value 8M - with 3G, I got ~3.7GB ... still not 6.6G (aprox 85% from total RAM). See: https://www.mysqlcalculator.com/ 5. Why this difference, from 3.7GB up to 6.6GB? 6. Where could it be the rest of 2GB which is used by mariadb (from 3.7GB up to 6.6GB)? Any help will be appreciated. Catal

Hi Catal From experience, in most cases where a mariadb server uses more memory than expected, especially if it’s consistently growing to the point of oomkiller taking it out, the culprit has been the default malloc handler on the OS. I’ve found this both on various flavours of EL (Centos and Rocky, 6-9) as well as Debian 12. As it’s a bit of a FAQ, I jotted down how we solve it by using jemalloc or tcmalloc, both of which work well with MariaDb on linux. https://digdilem.org/2025/03/solving-excess-memory-usage-in-mariadb/ I would suggest trying that before going further. It’s a quick and cheap fix, and if it doesn’t work, easy to revert. Regards, Simon See below: Operating system: "Debian 12.10 (bookworm)" MariaDB Version: 10.11.11-MariaDB-0+deb12u1-log The server was configured (limited) to use for InnoDB -> max 3GB Ram MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 3221225472 | +-------------------------+------------+ 1 row in set (0.001 sec) But, on that server we are running also MySam, Memory and Innodb, in total, ~70 databases (8 MySam, 1 MEMORY, and the rest are InnoDB) MariaDB [mysql]> select count(distinct db) from db; +--------------------+ | count(distinct db) | +--------------------+ | 73 | +--------------------+ 1 row in set (0.001 sec) MariaDB [mysql]> SYSTEM 4CPU, 7.8GB RAM root@adsns-db-node0:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 776M 764K 775M 1% /run /dev/sda1 150G 48G 97G 34% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 241M 138K 241M 1% /boot/efi tmpfs 776M 0 776M 0% /run/user/0 root@adsns-db-node0:~# I found some articles on internet regarding /dev/shm, which could influence mysql performance. In my case /dev/shm is not used even defined, so the system could use the whole available RAM - 7.8GB RAM, so I excluded this as possible cause. MariaDB [(none)]> SHOW VARIABLES LIKE '%buffer_size%'; +----------------------------+-----------+ | Variable_name | Value | +----------------------------+-----------+ | aria_pagecache_buffer_size | 134217728 | | aria_sort_buffer_size | 268434432 | | bulk_insert_buffer_size | 8388608 | | innodb_log_buffer_size | 16777216 | | innodb_sort_buffer_size | 1048576 | | join_buffer_size | 4194304 | | key_buffer_size | 10485760 | | mrr_buffer_size | 262144 | | myisam_sort_buffer_size | 134216704 | | preload_buffer_size | 32768 | | read_buffer_size | 131072 | | read_rnd_buffer_size | 262144 | | sort_buffer_size | 2097152 | +----------------------------+-----------+ 13 rows in set (0.001 sec) Traffic is not high, just 123 queries per second. MariaDB [(none)]> status; -------------- mysql Ver 15.1 Distrib 10.11.11-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper Connection id: 877596 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.11-MariaDB-0+deb12u1-log Debian 12 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /run/mysqld/mysqld.sock Uptime: 7 days 3 hours 24 min 6 sec Threads: 78 Questions: 75901186 Slow queries: 4891595 Opens: 12573592 Open tables: 2000 Queries per second avg: 123.007 -------------- MariaDB [(none)]> Even I am restarting mariadb, after a short time, the memory usage is 85% root@adsns-db-node0:~# free -g total used free shared buff/cache available Mem: 7 6 0 0 0 1 Swap: 0 0 0 root@adsns-db-node0:~# The swap is not used, just the memory, which is ok. CPU usage is less than ~10%, so is ok. See below, output of top. %Cpu(s): 2.2 us, 0.7 sy, 0.0 ni, 96.2 id, 0.4 wa, 0.0 hi, 0.4 si, 0.0 st MiB Mem : 7750.8 total, 161.4 free, 6351.8 used, 712.6 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1399.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1555028 mysql 20 0 7752424 6.5g 15476 S 10.6 85.2 188:29.16 mariadbd root@adsns-db-node0:~# pstree |grep maria |-mariadbd---51*[{mariadbd}] root@adsns-db-node0:~# All 51 childs of mariadb are using 85% from the system memory (each child ~1.6% of total RAM). I found a mysql calculator and changing innodb_buffer_pool_size - its default value 8M - with 3G, I got ~3.7GB ... still not 6.6G (aprox 85% from total RAM). See: https://www.mysqlcalculator.com/ 5. Why this difference, from 3.7GB up to 6.6GB? 6. Where could it be the rest of 2GB which is used by mariadb (from 3.7GB up to 6.6GB)? Any help will be appreciated. Catal From: cata via discuss <discuss@lists.mariadb.org> Sent: 02 April 2025 15:27 To: discuss@lists.mariadb.org Subject: [MariaDB discuss] it is normal to have a memory usage of 85%? Hi everybody, I am new here and I am confronted with a situation, so I will start with the questions first: 1. It is normal that on my server, mariadb to use almost 85% of available ram or something is wrong? 2. In case I want to limit the whole application (mariadb) to not use more than 5.5 GB RAM from total of 7.8GB it could be possible - without affecting it's performance? 3. Is anything to optimize (change) now? If yes, which variable? 4. Do we need more RAM for this server or actual RAM could be enough?

Hi Simon, Great answer. Indeed, it seems that is working. I tried both: jemalloc and tcmalloc. See the graph below. - jemalloc, was implemented first, around 10:30. Memory increases almost like before. In 90 minutes, memory usage increased from ~20% to 52% (the same as the default system malloc) - tcmalloc, implemented around 12:00. This time, much better. Memory usage started to increase very slowly and around 4pm it stabilized at 47% (approx 4Gb Ram from total 7.8) According to my calculation and to mysqlcalculator.com, this is the expected usage (around 4Gb). [image: Screenshot from 2025-04-03 17-20-25.png] In my case, jemalloc was not efficient. I found a short explanation here: https://www.managedserver.eu/Improve-mysql-and-mariadb-performance-with-memo... *"If your database has memory fragmentation problems, Jemalloc is the best choice.If you need to reduce latency in multi-threaded workloads, TCMalloc can offer superior benefits."* I used libtcmalloc.so.4 by installing google-perftools (apt-get install google-perftools) MariaDB [mysql]> show global variables like '%malloc%'; Connection id: 327 Current database: mysql +------------------------+--------------------------+ | Variable_name | Value | +------------------------+--------------------------+ | version_malloc_library | tcmalloc gperftools 2.10 | +------------------------+--------------------------+ 1 row in set (0.022 sec) MariaDB [mysql]> Now I am continuing to monitor it. I'll come back tomorrow with more data. Regards, Catal On Thu, Apr 3, 2025 at 8:40 AM Simon Avery <Simon.Avery@atass-sports.co.uk> wrote:
Hi Catal
From experience, in most cases where a mariadb server uses more memory than expected, especially if it’s consistently growing to the point of oomkiller taking it out, the culprit has been the default malloc handler on the OS. I’ve found this both on various flavours of EL (Centos and Rocky, 6-9) as well as Debian 12.
As it’s a bit of a FAQ, I jotted down how we solve it by using jemalloc or tcmalloc, both of which work well with MariaDb on linux.
https://digdilem.org/2025/03/solving-excess-memory-usage-in-mariadb/
I would suggest trying that before going further. It’s a quick and cheap fix, and if it doesn’t work, easy to revert.
Regards, Simon
See below: Operating system: "Debian 12.10 (bookworm)"
MariaDB Version: 10.11.11-MariaDB-0+deb12u1-log
The server was configured (limited) to use for InnoDB -> max 3GB Ram
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 3221225472 | +-------------------------+------------+ 1 row in set (0.001 sec)
But, on that server *we are running also MySam, Memory * and Innodb, in total, ~70 databases (8 MySam, 1 MEMORY, and the rest are InnoDB)
MariaDB [mysql]> select count(distinct db) from db; +--------------------+ | count(distinct db) | +--------------------+ | 73 | +--------------------+ 1 row in set (0.001 sec) MariaDB [mysql]>
SYSTEM 4CPU, 7.8GB RAM
root@adsns-db-node0:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 776M 764K 775M 1% /run /dev/sda1 150G 48G 97G 34% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 241M 138K 241M 1% /boot/efi tmpfs 776M 0 776M 0% /run/user/0 root@adsns-db-node0:~#
I found some articles on internet regarding /dev/shm, which could influence mysql performance.
In my case /dev/shm is not used even defined, so the system could use the whole available RAM - 7.8GB RAM, so I excluded this as possible cause.
MariaDB [(none)]> SHOW VARIABLES LIKE '%buffer_size%'; +----------------------------+-----------+ | Variable_name | Value | +----------------------------+-----------+ | aria_pagecache_buffer_size | 134217728 | | aria_sort_buffer_size | 268434432 | | bulk_insert_buffer_size | 8388608 | | innodb_log_buffer_size | 16777216 | | innodb_sort_buffer_size | 1048576 | | join_buffer_size | 4194304 | | key_buffer_size | 10485760 | | mrr_buffer_size | 262144 | | myisam_sort_buffer_size | 134216704 | | preload_buffer_size | 32768 | | read_buffer_size | 131072 | | read_rnd_buffer_size | 262144 | | sort_buffer_size | 2097152 | +----------------------------+-----------+ 13 rows in set (0.001 sec)
Traffic is not high, just 123 queries per second.
MariaDB [(none)]> status; -------------- mysql Ver 15.1 Distrib 10.11.11-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Connection id: 877596 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.11-MariaDB-0+deb12u1-log Debian 12 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /run/mysqld/mysqld.sock Uptime: 7 days 3 hours 24 min 6 sec
Threads: 78 Questions: 75901186 Slow queries: 4891595 Opens: 12573592 Open tables: 2000 Queries per second avg: 123.007 --------------
MariaDB [(none)]>
Even I am restarting mariadb, after a short time, the memory usage is 85%
root@adsns-db-node0:~# free -g total used free shared buff/cache available Mem: 7 6 0 0 0 1 Swap: 0 0 0 root@adsns-db-node0:~#
The swap is not used, just the memory, which is ok.
CPU usage is less than ~10%, so is ok.
See below, output of top.
%Cpu(s): 2.2 us, 0.7 sy, 0.0 ni, 96.2 id, 0.4 wa, 0.0 hi, 0.4 si, 0.0 st MiB Mem : 7750.8 total, 161.4 free, 6351.8 used, 712.6 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1399.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1555028 mysql 20 0 7752424 6.5g 15476 S 10.6 85.2 188:29.16 mariadbd
root@adsns-db-node0:~# pstree |grep maria |-mariadbd---51*[{mariadbd}] root@adsns-db-node0:~#
All 51 childs of mariadb are using 85% from the system memory (each child ~1.6% of total RAM).
I found a mysql calculator and changing innodb_buffer_pool_size - its default value 8M - with 3G, I got ~3.7GB ... still not 6.6G (aprox 85% from total RAM).
See: https://www.mysqlcalculator.com/
5. Why this difference, from 3.7GB up to 6.6GB?
6. Where could it be the rest of 2GB which is used by mariadb (from 3.7GB up to 6.6GB)?
Any help will be appreciated.
Catal
*From:* cata via discuss <discuss@lists.mariadb.org> *Sent:* 02 April 2025 15:27 *To:* discuss@lists.mariadb.org *Subject:* [MariaDB discuss] it is normal to have a memory usage of 85%?
Hi everybody,
I am new here and I am confronted with a situation, so I will start with the questions first:
1. It is normal that on my server, mariadb to use almost 85% of available ram or something is wrong?
2. In case I want to limit the whole application (mariadb) to not use more than 5.5 GB RAM from total of 7.8GB it could be possible - without affecting it's performance?
3. Is anything to optimize (change) now? If yes, which variable?
4. Do we need more RAM for this server or actual RAM could be enough?

Hi Catal, Glad it was of use. That’s a good link from ManagedServer – I’ve added it to my article to help explain a bit more. A question for the MariaDb devs: I don’t know of the technical considerations for this, or the practical or licence needs and it may not be possible, but given this memory bloat issue affects a lot of users and is often wrongly attributed to MariaDb itself leaking memory; is bundling and preconfiguring tcmalloc or jemalloc in the official builds a possibility? Thanks, S From: catal <catal.linux@gmail.com> Sent: 03 April 2025 16:44 To: Simon Avery <Simon.Avery@atass-sports.co.uk> Cc: discuss@lists.mariadb.org Subject: Re: [MariaDB discuss] it is normal to have a memory usage of 85%? Hi Simon, Great answer. Indeed, it seems that is working. I tried both: jemalloc and tcmalloc. See the graph below. - jemalloc, was implemented first, around 10:30. Memory increases almost like before. In 90 minutes, memory usage increased from ~20% to 52% (the same as the default system malloc) - tcmalloc, implemented around 12:00. This time, much better. Memory usage started to increase very slowly and around 4pm it stabilized at 47% (approx 4Gb Ram from total 7.8) According to my calculation and to mysqlcalculator.com<http://mysqlcalculator.com>, this is the expected usage (around 4Gb). [cid:image001.png@01DBA53E.B351F5D0] In my case, jemalloc was not efficient. I found a short explanation here: https://www.managedserver.eu/Improve-mysql-and-mariadb-performance-with-memo... "If your database has memory fragmentation problems, Jemalloc is the best choice. If you need to reduce latency in multi-threaded workloads, TCMalloc can offer superior benefits." I used libtcmalloc.so.4 by installing google-perftools (apt-get install google-perftools) MariaDB [mysql]> show global variables like '%malloc%'; Connection id: 327 Current database: mysql +------------------------+--------------------------+ | Variable_name | Value | +------------------------+--------------------------+ | version_malloc_library | tcmalloc gperftools 2.10 | +------------------------+--------------------------+ 1 row in set (0.022 sec) MariaDB [mysql]> Now I am continuing to monitor it. I'll come back tomorrow with more data. Regards, Catal On Thu, Apr 3, 2025 at 8:40 AM Simon Avery <Simon.Avery@atass-sports.co.uk<mailto:Simon.Avery@atass-sports.co.uk>> wrote: Hi Catal From experience, in most cases where a mariadb server uses more memory than expected, especially if it’s consistently growing to the point of oomkiller taking it out, the culprit has been the default malloc handler on the OS. I’ve found this both on various flavours of EL (Centos and Rocky, 6-9) as well as Debian 12. As it’s a bit of a FAQ, I jotted down how we solve it by using jemalloc or tcmalloc, both of which work well with MariaDb on linux. https://digdilem.org/2025/03/solving-excess-memory-usage-in-mariadb/ I would suggest trying that before going further. It’s a quick and cheap fix, and if it doesn’t work, easy to revert. Regards, Simon See below: Operating system: "Debian 12.10 (bookworm)" MariaDB Version: 10.11.11-MariaDB-0+deb12u1-log The server was configured (limited) to use for InnoDB -> max 3GB Ram MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 3221225472 | +-------------------------+------------+ 1 row in set (0.001 sec) But, on that server we are running also MySam, Memory and Innodb, in total, ~70 databases (8 MySam, 1 MEMORY, and the rest are InnoDB) MariaDB [mysql]> select count(distinct db) from db; +--------------------+ | count(distinct db) | +--------------------+ | 73 | +--------------------+ 1 row in set (0.001 sec) MariaDB [mysql]> SYSTEM 4CPU, 7.8GB RAM root@adsns-db-node0:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 776M 764K 775M 1% /run /dev/sda1 150G 48G 97G 34% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 241M 138K 241M 1% /boot/efi tmpfs 776M 0 776M 0% /run/user/0 root@adsns-db-node0:~# I found some articles on internet regarding /dev/shm, which could influence mysql performance. In my case /dev/shm is not used even defined, so the system could use the whole available RAM - 7.8GB RAM, so I excluded this as possible cause. MariaDB [(none)]> SHOW VARIABLES LIKE '%buffer_size%'; +----------------------------+-----------+ | Variable_name | Value | +----------------------------+-----------+ | aria_pagecache_buffer_size | 134217728 | | aria_sort_buffer_size | 268434432 | | bulk_insert_buffer_size | 8388608 | | innodb_log_buffer_size | 16777216 | | innodb_sort_buffer_size | 1048576 | | join_buffer_size | 4194304 | | key_buffer_size | 10485760 | | mrr_buffer_size | 262144 | | myisam_sort_buffer_size | 134216704 | | preload_buffer_size | 32768 | | read_buffer_size | 131072 | | read_rnd_buffer_size | 262144 | | sort_buffer_size | 2097152 | +----------------------------+-----------+ 13 rows in set (0.001 sec) Traffic is not high, just 123 queries per second. MariaDB [(none)]> status; -------------- mysql Ver 15.1 Distrib 10.11.11-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper Connection id: 877596 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.11-MariaDB-0+deb12u1-log Debian 12 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /run/mysqld/mysqld.sock Uptime: 7 days 3 hours 24 min 6 sec Threads: 78 Questions: 75901186 Slow queries: 4891595 Opens: 12573592 Open tables: 2000 Queries per second avg: 123.007 -------------- MariaDB [(none)]> Even I am restarting mariadb, after a short time, the memory usage is 85% root@adsns-db-node0:~# free -g total used free shared buff/cache available Mem: 7 6 0 0 0 1 Swap: 0 0 0 root@adsns-db-node0:~# The swap is not used, just the memory, which is ok. CPU usage is less than ~10%, so is ok. See below, output of top. %Cpu(s): 2.2 us, 0.7 sy, 0.0 ni, 96.2 id, 0.4 wa, 0.0 hi, 0.4 si, 0.0 st MiB Mem : 7750.8 total, 161.4 free, 6351.8 used, 712.6 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1399.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1555028 mysql 20 0 7752424 6.5g 15476 S 10.6 85.2 188:29.16 mariadbd root@adsns-db-node0:~# pstree |grep maria |-mariadbd---51*[{mariadbd}] root@adsns-db-node0:~# All 51 childs of mariadb are using 85% from the system memory (each child ~1.6% of total RAM). I found a mysql calculator and changing innodb_buffer_pool_size - its default value 8M - with 3G, I got ~3.7GB ... still not 6.6G (aprox 85% from total RAM). See: https://www.mysqlcalculator.com/ 5. Why this difference, from 3.7GB up to 6.6GB? 6. Where could it be the rest of 2GB which is used by mariadb (from 3.7GB up to 6.6GB)? Any help will be appreciated. Catal From: cata via discuss <discuss@lists.mariadb.org<mailto:discuss@lists.mariadb.org>> Sent: 02 April 2025 15:27 To: discuss@lists.mariadb.org<mailto:discuss@lists.mariadb.org> Subject: [MariaDB discuss] it is normal to have a memory usage of 85%? Hi everybody, I am new here and I am confronted with a situation, so I will start with the questions first: 1. It is normal that on my server, mariadb to use almost 85% of available ram or something is wrong? 2. In case I want to limit the whole application (mariadb) to not use more than 5.5 GB RAM from total of 7.8GB it could be possible - without affecting it's performance? 3. Is anything to optimize (change) now? If yes, which variable? 4. Do we need more RAM for this server or actual RAM could be enough?

Hi Simon, This messages was sent yesterday but it did not reach the mailing list. Resent today. Great answer, thank you very much. Indeed, it seems that is working. I tried both: jemalloc and tcmalloc. See the graph below. - jemalloc, was implemented first, around 10:30. Memory increases almost like before. In 90 minutes, memory usage increased from ~20% to 52% (the same as the default system malloc) - tcmalloc, implemented around 12:00. This time, much better. Memory usage started to increase very slowly and around 4pm it stabilized at 47% (approx 4Gb Ram from total 7.8) According to my calculation and to mysqlcalculator.com, this is the expected usage (between 3.6Gb-4Gb). [image: Screenshot from 2025-04-03 17-20-25.png] In my case, jemalloc was not efficient. I found a short explanation here: https://www.managedserver.eu/Improve-mysql-and-mariadb-performance-with-memo... *"If your database has memory fragmentation problems, Jemalloc is the best choice.If you need to reduce latency in multi-threaded workloads, TCMalloc can offer superior benefits."* Before change: MariaDB [mysql]> show global variables like '%malloc%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | version_malloc_library | *system* | +------------------------+--------+ 1 row in set (0.001 sec) MariaDB [mysql]> I used libtcmalloc.so.4 by installing google-perftools (apt-get install google-perftools) After change: MariaDB [mysql]> show global variables like '%malloc%'; Connection id: 327 Current database: mysql +------------------------+--------------------------+ | Variable_name | Value | +------------------------+--------------------------+ | version_malloc_library | *tcmalloc gperftools 2.10* | +------------------------+--------------------------+ 1 row in set (0.022 sec) MariaDB [mysql]> And today, the memory usage is 45% (3.87GB) ... pretty stable. Just a quick question regarding jemalloc. After it was implemented, show global variables like '%malloc%'; was still showing the system (like default). I could not find if is normal or the output should be something like MariaDB [mysql]> show global variables like '%malloc%'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | version_malloc_library | *jemalloc-something* | +------------------------+--------+ Did you implemented jemalloc on your side? If yes, how is looking the output of show global variables like '%malloc%';? Regards, Catal On Thu, Apr 3, 2025 at 5:43 PM catal <catal.linux@gmail.com> wrote:
Hi Simon,
Great answer. Indeed, it seems that is working. I tried both: jemalloc and tcmalloc. See the graph below. - jemalloc, was implemented first, around 10:30. Memory increases almost like before. In 90 minutes, memory usage increased from ~20% to 52% (the same as the default system malloc) - tcmalloc, implemented around 12:00. This time, much better. Memory usage started to increase very slowly and around 4pm it stabilized at 47% (approx 4Gb Ram from total 7.8) According to my calculation and to mysqlcalculator.com, this is the expected usage (around 4Gb).
[image: Screenshot from 2025-04-03 17-20-25.png]
In my case, jemalloc was not efficient. I found a short explanation here:
https://www.managedserver.eu/Improve-mysql-and-mariadb-performance-with-memo...
*"If your database has memory fragmentation problems, Jemalloc is the best choice.If you need to reduce latency in multi-threaded workloads, TCMalloc can offer superior benefits."*
I used libtcmalloc.so.4 by installing google-perftools (apt-get install google-perftools)
MariaDB [mysql]> show global variables like '%malloc%'; Connection id: 327 Current database: mysql
+------------------------+--------------------------+ | Variable_name | Value | +------------------------+--------------------------+ | version_malloc_library | tcmalloc gperftools 2.10 | +------------------------+--------------------------+ 1 row in set (0.022 sec)
MariaDB [mysql]>
Now I am continuing to monitor it. I'll come back tomorrow with more data.
Regards, Catal
On Thu, Apr 3, 2025 at 8:40 AM Simon Avery <Simon.Avery@atass-sports.co.uk> wrote:
Hi Catal
From experience, in most cases where a mariadb server uses more memory than expected, especially if it’s consistently growing to the point of oomkiller taking it out, the culprit has been the default malloc handler on the OS. I’ve found this both on various flavours of EL (Centos and Rocky, 6-9) as well as Debian 12.
As it’s a bit of a FAQ, I jotted down how we solve it by using jemalloc or tcmalloc, both of which work well with MariaDb on linux.
https://digdilem.org/2025/03/solving-excess-memory-usage-in-mariadb/
I would suggest trying that before going further. It’s a quick and cheap fix, and if it doesn’t work, easy to revert.
Regards, Simon
See below: Operating system: "Debian 12.10 (bookworm)"
MariaDB Version: 10.11.11-MariaDB-0+deb12u1-log
The server was configured (limited) to use for InnoDB -> max 3GB Ram
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 3221225472 | +-------------------------+------------+ 1 row in set (0.001 sec)
But, on that server *we are running also MySam, Memory * and Innodb, in total, ~70 databases (8 MySam, 1 MEMORY, and the rest are InnoDB)
MariaDB [mysql]> select count(distinct db) from db; +--------------------+ | count(distinct db) | +--------------------+ | 73 | +--------------------+ 1 row in set (0.001 sec) MariaDB [mysql]>
SYSTEM 4CPU, 7.8GB RAM
root@adsns-db-node0:~# df -h Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 776M 764K 775M 1% /run /dev/sda1 150G 48G 97G 34% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 241M 138K 241M 1% /boot/efi tmpfs 776M 0 776M 0% /run/user/0 root@adsns-db-node0:~#
I found some articles on internet regarding /dev/shm, which could influence mysql performance.
In my case /dev/shm is not used even defined, so the system could use the whole available RAM - 7.8GB RAM, so I excluded this as possible cause.
MariaDB [(none)]> SHOW VARIABLES LIKE '%buffer_size%'; +----------------------------+-----------+ | Variable_name | Value | +----------------------------+-----------+ | aria_pagecache_buffer_size | 134217728 | | aria_sort_buffer_size | 268434432 | | bulk_insert_buffer_size | 8388608 | | innodb_log_buffer_size | 16777216 | | innodb_sort_buffer_size | 1048576 | | join_buffer_size | 4194304 | | key_buffer_size | 10485760 | | mrr_buffer_size | 262144 | | myisam_sort_buffer_size | 134216704 | | preload_buffer_size | 32768 | | read_buffer_size | 131072 | | read_rnd_buffer_size | 262144 | | sort_buffer_size | 2097152 | +----------------------------+-----------+ 13 rows in set (0.001 sec)
Traffic is not high, just 123 queries per second.
MariaDB [(none)]> status; -------------- mysql Ver 15.1 Distrib 10.11.11-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Connection id: 877596 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.11.11-MariaDB-0+deb12u1-log Debian 12 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 UNIX socket: /run/mysqld/mysqld.sock Uptime: 7 days 3 hours 24 min 6 sec
Threads: 78 Questions: 75901186 Slow queries: 4891595 Opens: 12573592 Open tables: 2000 Queries per second avg: 123.007 --------------
MariaDB [(none)]>
Even I am restarting mariadb, after a short time, the memory usage is 85%
root@adsns-db-node0:~# free -g total used free shared buff/cache available Mem: 7 6 0 0 0 1 Swap: 0 0 0 root@adsns-db-node0:~#
The swap is not used, just the memory, which is ok.
CPU usage is less than ~10%, so is ok.
See below, output of top.
%Cpu(s): 2.2 us, 0.7 sy, 0.0 ni, 96.2 id, 0.4 wa, 0.0 hi, 0.4 si, 0.0 st MiB Mem : 7750.8 total, 161.4 free, 6351.8 used, 712.6 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1399.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1555028 mysql 20 0 7752424 6.5g 15476 S 10.6 85.2 188:29.16 mariadbd
root@adsns-db-node0:~# pstree |grep maria |-mariadbd---51*[{mariadbd}] root@adsns-db-node0:~#
All 51 childs of mariadb are using 85% from the system memory (each child ~1.6% of total RAM).
I found a mysql calculator and changing innodb_buffer_pool_size - its default value 8M - with 3G, I got ~3.7GB ... still not 6.6G (aprox 85% from total RAM).
See: https://www.mysqlcalculator.com/
5. Why this difference, from 3.7GB up to 6.6GB?
6. Where could it be the rest of 2GB which is used by mariadb (from 3.7GB up to 6.6GB)?
Any help will be appreciated.
Catal
*From:* cata via discuss <discuss@lists.mariadb.org> *Sent:* 02 April 2025 15:27 *To:* discuss@lists.mariadb.org *Subject:* [MariaDB discuss] it is normal to have a memory usage of 85%?
Hi everybody,
I am new here and I am confronted with a situation, so I will start with the questions first:
1. It is normal that on my server, mariadb to use almost 85% of available ram or something is wrong?
2. In case I want to limit the whole application (mariadb) to not use more than 5.5 GB RAM from total of 7.8GB it could be possible - without affecting it's performance?
3. Is anything to optimize (change) now? If yes, which variable?
4. Do we need more RAM for this server or actual RAM could be enough?
participants (4)
-
cata
-
catal
-
gtasandreasapk@gmail.com
-
Simon Avery