Mysql查询报错:The total number of locks exceeds the lock table size

为何会出现这种错误
这是由于innodb_buffer_pool_size过小导致的。在MySQL5.5之前,广泛使用的和默认的存储引擎是MyISAM,MyISAM使用操作系统缓存来缓存数据,InnoDB需要innodb buffer pool中处理缓存,当InnoDB表执行大批量数据的增删改查时,就需要有足够的innodb buffer pool 空间。

如何设置缓冲池大小
innodb_buffer_pool_size默认大小为8388608(即8M ∗ \ast∗ 1024 ∗ \ast∗ 1024),最大值取决于CPU的架构,在32-bit的平台上,最大值为2^32-1, 在64-bit的平台上最大值为2^64-1。当缓冲池大小大于1G时,设置innnodb_buffer_pool_instances的值大于1可以提高服务器的可扩展性。

缓冲池大小必须始终等于或是innodb_buffer_pool_chunk_size *innodb_buffer_pool_instances的倍数,若不符合条件,则缓冲池大小将自动调整。

配置示例

查询缓冲池大小

1、进入Mysql命令行,输入show variables like “innodb_buffer_pool%”;

 

这里缓冲池大小默认是8M(8 ∗ \ast∗ 1024 ∗ \ast∗ 1024 = 8388608),刚好等于innodb_buffer_pool_instances ∗ \ast∗ innodb_buffer_pool_chunk_size的积。

2、修改缓冲池大小

下面将缓冲池大小设为1G(1 ∗ \ast∗ 1024 ∗ \ast∗ 1024 ∗ \ast∗ 1024 = 1073741824),而1G是innodb_buffer_pool_instances ∗ \ast∗ innodb_buffer_pool_chunk_size的积的倍数,所以1G是有效的size值。
命令行输入set global innodb_buffer_pool_size=1073741824;

 

MySQL> flush privileges;

MySQL> exit

(3). 重启服务
切记,一定要重启mysql服务修改才能生效。

 

posted on   zyp_java_net  阅读(834)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-05-16 NPM 换源

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示