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-memory-allocators-like-jemalloc-and-tcmalloc/


*"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 <[email protected]>
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 <[email protected]>
> *Sent:* 02 April 2025 15:27
> *To:* [email protected]
> *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?
>
_______________________________________________
discuss mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to