一切福田,不離方寸,從心而覓,感無不通。

MYSQL解决 The total number of locks exceeds the lock table size 问题

当我们对Mysql 中的表进行大批量的分组,查询、 创建的时候经常会出现这个问题,他翻译过来大概是这个意思,总数已经超过锁定表的大小。一般出现这个原因会有两种可能:

1.MySQL的临时表过小也就是tmp_table_size

tmp_table_size:它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,默认如下图:

那么怎么改变临时表的大小呢?同样有两种方法

第一种是 使用命令行进行修改

先使用 show variables like "%tmp%";查看临时表的大小,我的是64M

然后使用SET GLOBAL  tmp_table_size =1024*1024*1024;我是给了1个G

第一种重启电脑后默认的设置会还原,适合临时使用一次的用户。或者我没有找到怎么设置永久的方法,如果有小伙伴们发现请告诉我哦,

第二种是修改mysql 的配置文件

1.关闭mysql 服务,方式是我的电脑——》管理->服务-》找到mysql的服务选择关闭。

2.找到mysql 的配置文件的位置,在前面的章节中我已经详细的介绍了这么找到Linux或者windows配置文件链接如下:

https://blog.csdn.net/dingweiye123/article/details/80991341

3.注意配置文件要备份然后找到 tmp_table_size直接修改成tmp_table_size=3G

4.重启服务

2.MySQL的innod缓冲池过小也就是innodb_buffer_pool_size

和修改tmp_table_size的大小一样分为两种办法

1.mysql命令行设置

show variables like "%_buffer%";查看大小

使用SET GLOBAL innodb_buffer_pool_size=67108864;(3*1024*1024*1024,不要忘记;号)设置如下

第二种一样是修改配置文件

1.关闭mysql 服务,方式是我的电脑——》管理->服务-》找到mysql的服务选择关闭。

2.找到mysql 的配置文件的位置,在前面的章节中我已经详细的介绍了这么找到Linux或者windows配置文件链接如下:

https://blog.csdn.net/dingweiye123/article/details/80991341

3.修改 innodb_buffer_pool_size的值 innodb_buffer_pool_size=3G

4.重启服务

 

from:https://blog.csdn.net/dingweiye123/article/details/80994576