MariaDB/MySQL 使用大量线程/内存

Bre*_*dan 1 mysql memory centos threads mariadb

我一直在设置一个新的 VPS,想试用 MariaDB。我使用的是 MariaDB 10.0.1,据我所知,它相当于 MySQL 5.6。

自 MariaDB/MySQL 5.5 以来,线程的线程处理是否发生了巨大变化?这是我在旧服务器(CentOS 5.9、MySQL 5.5)上看到的:

centos 5.9 上的 mysql 5.5

在 Centos 6.3 和 MariaDB 10 (MySQL 5.6) 上:

centos 6.3 上的 mariadb 10

以下是事实清单:

在服务器 A(CentOS 5.9,MySQL 5.5)上:

  • 大约有 15 个数据库连接到各种网站和服务
  • Plesk 已安装
  • MySQL 进行了最低限度的调整:

/etc/my.cnf

[mysqld]
local-infile=0
query_cache_type = 1
query_cache_size = 32M

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

# Misc vars
key_buffer_size=32M
join_buffer_size=512K
tmp_table_size=32M
max_heap_table_size=32M
thread_cache_size=4
table_cache=300

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# InnoDB vars
innodb_buffer_pool_size=96M
innodb_additional_mem_pool_size=500K
innodb_log_buffer_size=500K
innodb_thread_concurrency=2
Run Code Online (Sandbox Code Playgroud)

在服务器 B(CentOS 6.3,MariaDB 10)上:

  • 有 3 个数据库,其中只有一个当前“正在使用”并连接到一个低流量站点。
  • 没有 Plesk。
  • MariaDB 微调:

/etc/my.cnf.d/server.cnf

[mysqld]
# threads
thread_concurrency=2
thread_cache_size=1
thread_handling=one-thread-per-connection
thread_pool_size=4
thread_pool_max_threads=4
thread_pool_idle_timeout=60
thread_stack=240K

# Limit Connections?
# max_connections=5

skip-external-locking
key_buffer_size=64M
max_allowed_packet=1M
table_open_cache=128
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M
net_buffer_length=8K
myisam_sort_buffer_size=32M
query_cache_size=16M

# innodb settings
innodb_buffer_pool_size=32M
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=30
innodb_thread_concurrency=0
Run Code Online (Sandbox Code Playgroud)

为什么有这么多线程?我尝试了许多设置来尝试将进程线程数降低到合理的水平,但我似乎无法影响它。它总是使用 20 或 21 个线程。我能够通过调整来减少内存使用量innodb_buffer_pool_size,但是 32M 并不是一个合理的值,因为有 10 个以上的站点正在运行,所以我会将它增加到 96M 或 128M。在这些值下,mysql 使用的 ram 超过 750-850M 内存。

如果这只是我不得不忍受的东西,那很好(我在新的 VPS YOLO 上有更多的内存),但我只是好奇为什么内存使用量会有如此巨大的差异。

另外值得一提的是,如果我在两个 VPS 上都关闭 mysql,我使用的 ram 数量几乎相等——A 约 300M,B 约 260M。

Mir*_*ici 5

MySQL 应该使用尽可能多的可用内存。这个规模的线程数非常少,不影响内存使用。线程共享相同的虚拟内存空间。它们只使用几 KB 的线程元数据。

新 MySQL 上的内存使用量实际上比以前小了。它在虚拟内存空间中分配了1.1GB,但物理内存只有60MB。

在寻找优化 MySQL 时,首先尝试将瓶颈从磁盘 I/O 转移到内存访问。优化查询(重写它们,索引) - 启用 MySQL 慢查询日志。

有时您会遇到硬件限制,唯一的优化就是升级硬件。对于 MySQL,首先要添加更多 RAM、更快的磁盘,然后是更多的 CPU。

  • 服务器 B 上的总 RAM 使用量要高得多,因为较新的高级版本能够利用更多的可用资源,而较旧的、笨拙的服务器让它们浪费掉。不要想着“我希望我的 RAM 现在是免费的,以防我以后需要使用它”。你现在可以*和*以后使用它。你不必妥协。 (3认同)