1. 背景:
最近做一个微信小游戏的项目,里边有获取微信昵称的功能,用户访问之后,就会保存用户的昵称,昵称中含有图片、表情等,如果想要正确的存入mysql库中,必须将昵称这个字段的字符集设置成utf8mb4的格式,utf8只能解析三位的编码,而utfmb4能解析图片转换的4位的编码,但是由于项目已经上线,访问量比较大,想更改数据库编码,就有可能出现锁表的情况。过了几天之后访问量有所下降,但是仍然不清楚在现在的访问量的情况下,还会不会出现锁表,于是就请教人研究了一下什么情况下会出现锁表。
2. 研究方向:
(1)考虑数据库的最大链接数
锁表是因为访问数超过了连接数,才会导致锁表,所以查看一下数据库的最大连接数,然后对比访问量就可以大致确定会不会锁表,一下摘自百度https://zhidao.baidu.com/question/2139356366670143228.html
通常。MySQL的最大连接数默认是100,最大可以达到16384.
1、查看最大连接数:
show variables like '%max_connections%';
2、修改最大连接数
方法一:修改配置文件。推荐方法一
进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MySQL即可.
方法二:命令行修改。不推荐方法二
命令行登录MySQL后。设置新的MySQL最大连接数为200:
MySQL> set global max_connections=200。
这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。
(2)考虑项目中配置的数据库最大连接数
spring.datasource.maxActive=200
**如果当前访问量小于你所设置的最大连接数,那么就不会产生锁表的问题。