讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql如何提高数据库的并发处理能力_mysql并发控制优化

轻敏君_2921

轻敏君_2921

发布时间:2026-03-02 10:37:57

|

598人浏览过

|

来源于php中文网

原创

用好InnoDB行级锁需确保走索引,避免全表锁;调低隔离级别至READ COMMITTED可关闭间隙锁;批量操作用多值SQL或LOAD DATA INFILE;连接池与wait_timeout需合理匹配。

mysql如何提高数据库的并发处理能力_mysql并发控制优化

用好 InnoDB 的行级锁而不是默认用表锁

MySQL 默认的 MyISAM 引擎只支持表级锁,一写全堵;InnoDB 才真正支持行级锁,但前提是必须走索引。如果 UPDATE 或 SELECT ... FOR UPDATE 语句没命中索引,InnoDB 会退化为锁整张表——这是并发骤降最常见原因。

  • 检查执行计划:对关键 DML 语句运行 EXPLAIN,确认 type 是 ref/range 而非 ALL
  • 避免在 WHERE 条件里对索引列做函数操作,比如 WHERE YEAR(create_time) = 2024 会让索引失效
  • 主键或唯一索引上的等值查询(WHERE id = ?)才能保证精确到单行锁;范围查询(WHERE id > 100)可能锁住间隙,需结合 SELECT ... LOCK IN SHARE MODE 或事务隔离级别权衡

调低事务隔离级别,别死守 REPEATABLE READ

InnoDB 默认隔离级别是 REPEATABLE READ,它靠多版本并发控制(MVCC)+ 间隙锁(Gap Lock)来防止幻读,但间隙锁会显著增加锁冲突概率,尤其在高并发 INSERT 场景下容易卡住。

kashen-mysql DDLtoExcel
kashen-mysql DDLtoExcel

解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。

下载
  • 如果业务能接受「不可重复读」,把隔离级别设为 READ COMMITTED:关闭间隙锁,MVCC 版本链只保留已提交版本,大幅减少锁等待
  • 设置方式:连接级用 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;全局可在配置文件加 transaction_isolation = 'READ-COMMITTED'
  • 注意:READ COMMITTED 下,同一个事务中多次 SELECT 可能读到不同结果,需前端逻辑兜底

批量操作别用循环单条 INSERT/UPDATE

每条语句都走一次网络往返 + 事务开销 + 行锁获取,在并发写入时极易形成锁队列瓶颈。哪怕只是 100 条数据,逐条执行可能比批量插入慢 5–10 倍。

  • 改用 INSERT INTO ... VALUES (...), (...), (...) 多值语法,单语句插入最多 1000 行(受 max_allowed_packet 限制)
  • 更新场景优先考虑 INSERT ... ON DUPLICATE KEY UPDATE 或 REPLACE INTO,避免先查后更的两阶段锁
  • 超大批量(如 > 10 万行)用 LOAD DATA INFILE,它绕过 SQL 解析层,直接写入存储引擎,吞吐量提升一个数量级

连接池大小和 wait_timeout 要匹配实际负载

应用端连接池(如 HikariCP)最大连接数设太高,MySQL 的 max_connections 没跟上,会导致连接拒绝;设太低又让请求排队。更隐蔽的问题是 wait_timeout 过长,空闲连接占着不放,把可用连接数悄悄耗尽。

  • 观察指标:SHOW STATUS LIKE 'Threads_connected' 和 SHOW STATUS LIKE 'Threads_running',前者持续接近 max_connections 就说明要扩容或优化
  • wait_timeout 建议设为 60–180 秒(应用连接池的 idleTimeout 应略小于此值),避免连接僵死
  • 连接池的 maxLifetime 要小于 wait_timeout,否则连接被 MySQL 主动断开后,应用端还试图复用,抛出 Connection reset 或 Lost connection
真正卡并发的地方,往往不在 SQL 写得多炫,而在索引有没有生效、事务是不是最小化、连接是不是被无效占着——这些点不盯紧,加再多 CPU 和内存也白搭。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4683

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

971

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1229

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6681

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3403

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6660

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

9181

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1250

2024.04.29

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn