0

0

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

P粉602998670

P粉602998670

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

|

558人浏览过

|

来源于php中文网

原创

用好innodb行级锁需确保走索引,避免全表锁;调低隔离级别至read committed可关闭间隙锁;批量操作用多值sql或load data infile;连接池与wait_timeout需合理匹配。

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

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

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

  • 检查执行计划:对关键 DML 语句运行 EXPLAIN,确认 typeref/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 场景下容易卡住。

家政网在线管理系统
家政网在线管理系统

经过多家家政公司实际运作,并参照目前市面上流行的家政管理软件精心打造的一套管理平台,专业化的后台管理能让您处理繁琐的小事更加轻松,前台和后台的无缝链接处处体现网络的巨大威力,全国首创的多人在线预订系统,系统首次提供候选名额,让您一次预订,多人受约,成交概率大幅提高,首次使用网络蜘蛛技术,定时搜集全国各地及时发布的家政信息,智能化处理后即时加入系统数据库

下载
  • 如果业务能接受「不可重复读」,把隔离级别设为 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 UPDATEREPLACE 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 resetLost connection
真正卡并发的地方,往往不在 SQL 写得多炫,而在索引有没有生效、事务是不是最小化、连接是不是被无效占着——这些点不盯紧,加再多 CPU 和内存也白搭。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1068

2023.10.12

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

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

339

2023.10.27

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

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

379

2024.02.23

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

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

1946

2024.03.06

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

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

379

2024.03.06

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

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

1499

2024.04.07

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

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

585

2024.04.29

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

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

437

2024.04.29

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

43

2026.02.28

热门下载

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

精品课程

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

共48课时 | 2.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 842人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号