我一直在寻找这个问题的答案,但在任何地方都找不到。
我想减少每个数据库连接的内存使用量。以下是 mysql Tuner 目前所说的关于我的一个数据库的内存使用情况:
[--] Physical Memory : 985.2M
[--] Max MySQL memory : 950.4M
[--] Other process memory: 0B
[--] Total buffers: 292.0M global + 18.8M per thread (35 max threads)
[--] P_S Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 310.8M (31.55% of installed RAM)
[!!] Maximum possible memory usage: 950.4M (96.47% of installed RAM)
您可以看到每个线程的内存使用量非常高18.8M。这是我的其他服务器之一的输出:
[--] Total buffers: 400.0M global + 2.8M per thread (250 max threads)
您可以看到这里的内存使用量要低很多(只有 2.8M),因此我可以与数据库建立更多连接。
我试图找出哪个变量控制每个线程的内存使用量,但找不到任何东西。我认为它与 sort_buffer_size 或 read_buffer_size 有关,但是当我更改其中一个变量时,每个线程的使用率似乎并没有下降。
在我看来,这根本不是我可以修改的东西,可能是根据每个线程的实际内存使用情况计算的?
我能做些什么来减少每个线程的缓冲内存使用量吗?
编辑(2020-06-10):这两个数据库的区别在于第一个是 MariaDB 10.4.12 版本,而第二个是 MariaDB 10.1.38。如果我比较评论中提到的 sort_buffer_size、read_buffer_size、key_buffer_size 等变量,我所看到的只是它们被设置为相同的值。