You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下MariaDB 11.3.2执行特定INSERT时崩溃求助

MariaDB 11.3.2容器批量INSERT时崩溃的排查与解决

使用DockerHub上的MariaDB 11.3.2容器(版本标识:11.3.2-MariaDB-1:11.3.2+maria~ubu2204),执行一段批量插入SQL时服务器会触发崩溃(Fatal signal 11),每次崩溃后重启服务,该语句就能正常执行,本次操作计划插入约1400条数据。

崩溃日志

2024-04-09 13:45:52 information that should help you find out what is causing the crash.
2024-04-09 13:45:52 Writing a core file...
2024-04-09 13:45:52 Working directory at /var/lib/mysql
2024-04-09 13:45:52 Resource Limits:
2024-04-09 13:45:52 Limit                     Soft Limit           Hard Limit           Units     
2024-04-09 13:45:52 Max cpu time              unlimited            unlimited            seconds   
2024-04-09 13:45:52 Max file size             unlimited            unlimited            bytes     
2024-04-09 13:45:52 Max data size             unlimited            unlimited            bytes     
2024-04-09 13:45:52 Max stack size            8388608              unlimited            bytes     
2024-04-09 13:45:52 Max core file size        0                    unlimited            bytes     
2024-04-09 13:45:52 Max resident set          unlimited            unlimited            bytes     
2024-04-09 13:45:52 Max processes             unlimited            unlimited            processes 
2024-04-09 13:45:52 Max open files            1048576              1048576              files     
2024-04-09 13:45:52 Max locked memory         unlimited            unlimited            bytes     
2024-04-09 13:45:52 Max address space         unlimited            unlimited            bytes     
2024-04-09 13:45:52 Max file locks            unlimited            unlimited            locks     
2024-04-09 13:45:52 Max pending signals       63274                63274                signals   
2024-04-09 13:45:52 Max msgqueue size         819200               819200               bytes     
2024-04-09 13:45:52 Max nice priority         0                    0                    
2024-04-09 13:45:52 Max realtime priority     0                    0                    
2024-04-09 13:45:52 Max realtime timeout      unlimited            unlimited            us        
2024-04-09 13:45:52 Core pattern: /mnt/wslg/dumps/core.%e
2024-04-09 13:45:52 
2024-04-09 13:45:52 Kernel version: Linux version 5.15.133.1-microsoft-standard-WSL2 (root@1c602f52c2e4) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Oct 5 21:02:42 UTC 2023
2024-04-09 13:45:52 
2024-04-09 13:45:52 Fatal signal 11 while backtracing

触发崩溃的SQL语句

SELECT @group_id := id FROM `groups` WHERE name = 'olab';
SELECT @role_id := id FROM `roles` WHERE name = 'learner';
SELECT @max_id := MAX(id) FROM `users`;
SET @batch_size = @max_id / 10;
SET @num_batches = @max_id / @batch_size;

DELIMITER //
FOR l in 0..@num_batches
DO
    START TRANSACTION;
    SET @start = l * @batch_size;
    SET @end = ( l + 1 ) * @batch_size;
    INSERT INTO `user_groups` (user_id, group_id, role_id )
        SELECT id, @group_id, @role_id
        FROM `users` WHERE id >= @start and id <= @end;
    COMMIT;
END FOR;
//

排查方向与解决办法

1. 版本BUG排查

Fatal signal 11是段错误,大概率是MariaDB 11.3.2版本的未修复BUG。可以尝试:

  • 降级到10.11系列的LTS稳定版本
  • 升级到11.3.x的后续小版本,看官方是否已修复该问题

2. 调整批量插入逻辑

原SQL存在两个潜在问题:

  • 除法计算@batch_size可能得到小数,导致范围判断异常,改成CEIL(@max_id /10)确保是整数
  • FOR循环在MariaDB中属于存储过程专属语法,直接执行可能引发异常,换成WHILE循环更稳妥

修改后的SQL示例:

SELECT @group_id := id FROM `groups` WHERE name = 'olab';
SELECT @role_id := id FROM `roles` WHERE name = 'learner';
SELECT @max_id := MAX(id) FROM `users`;
SET @batch_size = CEIL(@max_id / 10);
SET @current = 0;

DELIMITER //
WHILE @current <= @max_id DO
    START TRANSACTION;
    INSERT INTO `user_groups` (user_id, group_id, role_id )
        SELECT id, @group_id, @role_id
        FROM `users` WHERE id >= @current and id < @current + @batch_size;
    COMMIT;
    SET @current = @current + @batch_size;
END WHILE;
//
DELIMITER ;

3. 容器资源调整

WSL2环境下的容器可能存在隐性内存限制,尝试:

  • 给Docker容器分配更多内存(比如调整到4G以上)
  • 修改MariaDB配置中的innodb_buffer_pool_size参数,提升内存分配

4. 临时禁用并行优化

可以临时关闭innodb_parallel_read_threads或调整optimizer_switch中的并行选项,排查是否是并行处理导致的崩溃。

内容的提问来源于stack exchange,提问作者pathrider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:44:52