我运行 MySQLTuner 来验证 MySQL 数据库的配置,它报告了这个问题:
[!!] Maximum possible memory usage: 40.9G (1022% of installed RAM)
这些数字来自计算max_connections
乘以文件中的read_buffer_size
++ ,有效地给出了sort_buffer_size
40Gb 。 join_buffer_size
my.cnf
但是,服务器有 128Gb 的 RAM。看来 MySQL 只能看到 4Gb。
起初我以为这是因为64 位操作系统上的 MySQL 32 位二进制文件只能有效访问 4Gb 的 RAM。但是,MySQL 二进制文件和操作系统都是 64 位的:
root@box# isainfo -v
64-bit amd64 applications
pclmulqdq aes sse4.2 sse4.1 ssse3 popcnt tscp ahf cx16 sse3 sse2 sse
fxsr mmx cmov amd_sysc cx8 tsc fpu
32-bit i386 applications
pclmulqdq aes sse4.2 sse4.1 ssse3 popcnt tscp ahf cx16 sse3 sse2 sse
fxsr mmx cmov sep cx8 tsc fpu
root@box# uname -a
SunOS box 5.11 11.2 i86pc i386 i86pc
root@box# file /usr/local/bin/mysql
/usr/local/bin/mysql: ELF 64-bit LSB executable AMD64 Version 1 [SSE2 SSE FXSR CMOV FPU], dynamically linked, not stripped
并且进程可以访问多少内存没有限制:
root@box# ulimit -a
address space limit (kbytes) (-M) unlimited
core file size (blocks) (-c) unlimited
cpu time (seconds) (-t) unlimited
data size (kbytes) (-d) unlimited
file size (blocks) (-f) unlimited
locks (-x) not supported
locked address space (kbytes) (-l) not supported
message queue size (kbytes) (-q) not supported
nice (-e) not supported
nofile (-n) 256
nproc (-u) 29995
pipe buffer size (bytes) (-p) 5120
max memory size (kbytes) (-m) not supported
rtprio (-r) not supported
socket buffer size (bytes) (-b) 5120
sigpend (-i) 128
stack size (kbytes) (-s) 8192
swap size (kbytes) (-w) not supported
threads (-T) not supported
process size (kbytes) (-v) unlimited
还有另一种方法可以查看 MySQL 有效使用了多少内存吗?
(如果你问,shell 是 tcsh;由于权限不足,我无法标记帖子“tcsh”。)
这不是 MySQL 的事情——如果 MySQLTuner 运行在 32 位 perl 解释器上,它本身就看不到更多的内存。