当我们对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