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 2023-05-16 09:36  zyp_java_net  阅读(350)  评论(0编辑  收藏  举报

导航