你好,我是田哥
一位朋友找我做模拟面试,我看他简历上写了,有着实际项目的性能调优经验。这个不错,可以算是他的简历亮点之一。
虽说是亮点,亮点也可能是个坑。
背景:本科、非计算机专业、7年多工作经验、上海
为什么说亮点可能也是个坑?
前几天,他刚面试了一家公司,回来找我聊。
面试官当时问我做了什么性能优化?
我当时回答的是对MySQL数据库和一些SQL进行了调优,其中MySQL数据库调优主要是一些参数,比如连接数。 紧接着面试官马上问我为什么要调整连接参数? MySQL默认连接数是多少? 最大连接数是多少? 如何查看当前数据库默认最大连接数?
4连环把我给整懵圈了~
连接数
默认连接数和最大连接数
MySQL的最大连接数可以通过参数max_connections进行设置。
在MySQL 5.5、5.6和5.7版本中,这个默认最大连接数均为151,且上限可以达到100000。
然而,其他版本的MySQL可能有所不同,例如mysql5.5.3的默认最大连接数为151,上限为1000。
在MySQL 5.0版本:默认的最大连接数为100,上限为16384。
比如我的mysql版本是8.2.0(使用命令:SELECT VERSION();
查看当前数据库版本),其默认最大连接数也是151。
查看当前默认最大连接数
要查看当前的最大连接数配置,可以使用命令show variables like '%max_connections%';
。同时,如果需要修改最大连接数,有两种主要方法:一种是实时(临时)修改此参数的值;另一种是在配置文件my.ini
中设置max_connections
的值。
mysqlx_max_connections 是一个参数,主要用于控制通过MySQL X协议(这是用于MySQLmysqlx_max_connections 是一个参数,主要用于控制通过MySQL X协议(这是用于MySQL的新的高级协议)连接到MySQL服务器的最大连接数。这个协议提供了更现代和强大的功能,比如支持异步查询和事务。mysqlx_max_connections 的值指定了服务器可以同时接受的最大MySQL X连接数。如果尝试建立的新连接超过这个限制,服务器将拒绝连接请求。
具体操作步骤如下:
实时(临时)修改此参数的值:可以在MySQL命令行中输入命令SET GLOBAL max_connections=新的数值;
来即时改变最大连接数。
在配置文件my.ini
中设置max_connections
的值:首先需要打开MySQL安装目录下的my.ini
文件,然后找到mysqld部分,添加或修改max_connections=新的数值
。
最后保存并关闭文件,然后重启MySQL服务使改动生效。
到这里,面试官会觉得你基本掌握了这个最大连接数设置和查看。
因为工作年限都7年了,再加上简历上有调优经验。
面试官可能还会问:该设置多大?依据是什么?
为什么要修改最大连接数参数?
在以下场景中,可能需要调整MySQL的连接数:
- 当服务器遇到高并发请求量时:如果一台服务器需要处理大量并发请求,那么提高MySQL的最大连接数可能有助于改善性能。然而,必须注意,随着连接数的增加,MySQL将为每个连接提供缓冲区,这将消耗更多的内存。因此,需要在机器能够支撑的情况下适当调整这个值。
- 数据库查询速度变慢:如果发现数据库查询速度明显下降,可能是由于当前的连接数已经达到了MySQL的最大连接数限制。在这种情况下,提高最大连接数可能有助于提高查询性能。
- 系统资源利用率低:如果发现系统资源(如CPU或内存)利用率低,这可能是因为MySQL的最大连接数设置得过高,导致许多空闲连接占用了系统资源。在这种情况下,可以考虑降低最大连接数以优化资源利用。
- 某个用户占用过多连接:如果发现某个用户的连接数持续较高且没有释放,可能需要考虑限制该用户的最大连接数以防止影响其他用户的使用。
以上只是部分场景,你可以看看能不能套用在你的项目中去,这样至少不会冷场。
那到底应该设置多大呢?
最大连接数的设置可以参考以下建议(假设5.7版本):
最大连接数的默认值是151,但是考虑到并发连接的需求,特别是对于并发连接多的应用,这个数值可能不够用。因此,实际设定的最大连接数应该大于默认值,以满足业务需求。
在设置最大连接数时,应遵循一个规则,即最大连接数占上限连接数的85%左右。
例如:如果你将最大连接数设置为1000,那么理想情况下,使用中的连接数应大约为850。如果发现使用中的连接数占总连接数的比例在10%以下,这可能意味着你的MySQL服务器的最大连接数设置得过高了。
另外,虽然MySQL允许的最大连接数上限是100000,但是请务必在做出这样的调整之前确保你的服务器硬件和网络能够承受这么大的负载。
请注意,修改最大连接数的方式有两种:一种是使用命令设置,另一种是直接修改my.cnf
文件。不过这两种方式都是临时修改,只能治标不能治本。
如果MySQL服务重启,它会恢复到默认的连接数(或者恢复到my.cnf
文件中配置的最大连接数)。
面试嘛,还是要适当装装,但仅限于适当,一旦过了,你就回去等消息吧。
最后,给个建议:如果没有面试机会,你就多写点高大上牛X的东东(分库分表、分布式事务、性能调优、做过架构设计、项目重构等)。如果有机会那就要慎重点,不然很容易被所谓的亮点给咔嚓。
好了,今天就分享这么多。