数据库默认的最大连接数为mysql的最大连接数默认是100, 最大可以达到16384,如何设置该值,除了考虑平台业务程序所需要的连接数多少外,还需要根据系统的内存是否足够。根据以下的系统配置对mysql最大连接数进行设置说明:
(1)系统内存为:32G;
(2)mysql当前最大连接数为:151个
通过top -H 查看内存使用情况,如:
[poseidon@iZwz90yas4kb5ad02eyywnZ home]$ top -H
top - 11:27:15 up 1220 days, 2:51, 10 users, load average: 0.40, 0.95, 0.77
Threads: 3860 total, 1 running, 3858 sleeping, 1 stopped, 0 zombie
%Cpu(s): 3.0 us, 1.8 sy, 0.0 ni, 94.8 id, 0.3 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 32782012 total, 547572 free, 22160556 used, 10073884 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 10128020 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14833 poseidon 20 0 166004 6284 1616 R 1.6 0.0 0:02.49 top
2373 poseidon 20 0 4214640 664680 13360 S 1.3 2.0 1:43.28 java
4957 poseidon 20 0 3192164 763476 3128 S 1.3 2.3 9224:31 java
14731 poseidon 20 0 4179588 642796 13640 S 1.3 2.0 0:02.20 java
23143 poseidon 20 0 4653384 841900 13356 S 1.3 2.6 30:04.48 java
29565 poseidon 20 0 4838380 904040 13068 S 1.3 2.8 32:00.54 java
10852 poseidon 20 0 61.8g 3.7g 0 S 1.0 11.7 812:52.99 java
11863 poseidon 20 0 4209288 839152 7080 S 1.0 2.6 2046:57 java
27929 poseidon 20 0 3958620 1.3g 3392 S 1.0 4.1 8483:52 java
8891 root 10 -10 178156 54576 6376 S 0.7 0.2 64:11.48 AliYunDun
19510 root 20 0 3910388 76192 2052 S 0.7 0.2 1542:32 3_scheduler
943 poseidon 20 0 4329760 794696 7384 S 0.3 2.4 0:52.06 java
955 poseidon 20 0 4329760 794696 7384 S 0.3 2.4 5:49.79 java
977 poseidon 20 0 4329760 794696 7384 S 0.3 2.4 3:18.34 java
1033 poseidon 20 0 4329760 794696 7384 S 0.3 2.4 155:06.40 java
2386 poseidon 20 0 4214640 664680 13360 S 0.3 2.0 0:00.37 java
4973 poseidon 20 0 3192164 763476 3128 S 0.3 2.3 107:07.41 java
5983 poseidon 20 0 4788860 1.6g 3516 S 0.3 5.2 920:43.43 java
5984 poseidon 20 0 4788860 1.6g 3516 S 0.3 5.2 348:23.88 java
5999 poseidon 20 0 4788860 1.6g 3516 S 0.3 5.2 320:08.62 java
7630 poseidon 20 0 155208 2280 944 S 0.3 0.0 0:00.10 sshd
14989 root 10 -10 178156 54576 6376 S 0.3 0.2 0:00.23 AliYunDun
9058 poseidon 20 0 4162028 369232 11504 S 0.3 1.1 0:39.55 java
20032 poseidon 20 0 2919580 1.7g 7268 S 0.3 5.4 0:10.21 mysqld
10847 poseidon 20 0 61.8g 3.7g 0 S 0.3 11.7 381:17.71 java
查看kiB Mem:一行,total 为总的内存数(单位为kb),free为空闲的内存(单位为kb),也就是只有547572/1024=534.73mb空闲,mysql 的一个连接数就是一个线程,通常一个线程占用的内存为8mb,不过根据实际的数据来看的话,一个线程占用的内存不止8mb,如:
(3)查看centos系统一个线程占用的内存:
[root@iZwz90yas4kb5ad02eyywnZ bits]# ulimit -s
8192
(4)根据mysql的端口查看对应的进程id:
netstat -nlp|grep 5190
tcp6 0 0 :::5190 :::* LISTEN 10364/mysqld
(5)根据进程id(10364)查看该进程对应的总的线程数:
[root@iZwz90yas4kb5ad02eyywnZ app]# ps hH p 10364|wc -l
142
(6)根据进程id(10364)查看该线程对应的线程情况:
注:实践证明,设置的最大连接数,不管当前实际使用的连接数为多少,mysql占用的内存都是固定的,最大连接数固定为151,不管实际使用的连接数为多少,mysql占用总的内存5.4%已经固定,转换为:32G10245.4%/151=11.72mb,按照实际的情况,一个线程占用的内存为11.72mb,所以在设置最大连接数时,需按照每增加一个连接数,就占用大于8Mb的内存,否则出现设置的最大连接数过大导致系统没有足够的空闲的内存提供,从而导致msql 服务启动不了。为使得所设置的最大连接数生效,除了考虑系统空闲内存外,还需要查看对应的打开文件数的open_files_limit 。可知,操作系统最大文件描述符限制为 1024, 在 配置文件中添加open_files_limit = 65535 实际上也没有生效
更改 MySQL 在 Linux 的最大文件描述符限制,编辑 /usr/lib/systemd/system/mysqld.service 文件,在文件最后添加:
LimitNOFILE=65535
LimitNPROC=65535
保存后,执行下面命令,使配置生效(重启mysql服务)
$ systemctl daemon-reload
$ systemctl restart mysqld.service
[root@iZwz90yas4kb5ad02eyywnZ app]# top -H -p 10364
top - 17:40:35 up 1220 days, 9:05, 11 users, load average: 0.14, 0.18, 0.22
Threads: 142 total, 0 running, 142 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.4 us, 1.6 sy, 0.0 ni, 94.6 id, 0.3 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 32782012 total, 433412 free, 22162676 used, 10185924 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 10125068 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29898 poseidon 20 0 2919580 1.7g 7268 S 1.0 5.4 0:03.54 mysqld
10385 poseidon 20 0 2919580 1.7g 7268 S 0.3 5.4 221:43.87 mysqld
23435 poseidon 20 0 2919580 1.7g 7268 S 0.3 5.4 0:03.66 mysqld
10364 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 1:01.97 mysqld
10367 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 5:53.80 mysqld
10368 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 11:44.17 mysqld
10369 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 13:43.68 mysqld
10370 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 13:45.55 mysqld
10371 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 14:08.40 mysqld
10372 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 14:30.96 mysqld
10373 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 31:24.59 mysqld
10374 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 11:55.39 mysqld
10375 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 11:50.13 mysqld
10376 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 16:24.38 mysqld
10380 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 4:34.70 mysqld
10381 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 9:47.35 mysqld
10382 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:40.80 mysqld
10383 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 19:55.73 mysqld
10384 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 158:43.95 mysqld
10386 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.00 mysqld
10387 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 71:15.12 mysqld
10388 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:44.06 mysqld
10389 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.00 mysqld
26752 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:04.86 mysqld
32549 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:42.98 mysqld
7317 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:02.04 mysqld
4632 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:01.60 mysqld
32366 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:28.42 mysqld
4408 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:16.76 mysqld
9484 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.90 mysqld
17250 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:14.27 mysqld
6564 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:35.00 mysqld
7302 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:16.78 mysqld
7304 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:07.55 mysqld
13523 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:08.39 mysqld
13524 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:02.86 mysqld
30521 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.72 mysqld
30522 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.59 mysqld
30529 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.95 mysqld
30530 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:11.08 mysqld
30531 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:13.79 mysqld
30535 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.42 mysqld
30539 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.44 mysqld
30614 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:10.07 mysqld
30818 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.01 mysqld
30918 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:01.93 mysqld
31898 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.21 mysqld
32669 poseidon 20 0 2919580 1.7g 7268 S 0.0 5.4 0:00.01 mysqld
在内存充足的情况下,最大连接数的设置一般为:max_used_connections / max_connections * 100% (理想值≈ 85%)即可。