MySQL全局优化

目录

1 硬件层面优化

1.1 CPU优化

1.2 内存优化

1.3 存储优化

1.4 网络优化

2 系统配置优化

2.1 操作系统配置

2.2 MySQL服务配置

3 库表结构优化

4 SQL及索引优化


mysql可四个层面考虑优化分别是

  • 硬件
  • 系统配置
  • 库表结构
  • SQL及索引

成本优化效果以上四方面优化如下

1 硬件层面优化
1.1 CPU优化

选择高性能多核处理器可以有效提升高并发处理能力

1.2 内存优化
  • MySQL InnoDB存储引擎使用缓冲缓存数据索引足够内存可以更多数据缓存减少磁盘I/O操作
  • 增加物理内存同时需要调整MySQL服务配置innodb_buffer_pool_size一般设置物理内存70%~80%
1.3 存储优化
  • 使用SSD提供更好地磁盘IO能力
  • 如果不能完全使用SSD替换可以考虑部分替换
  • 比如redo日志undo日志binlog日志重要日志存储路径指向SSD磁盘
1.4 网络优化
  • 提高网络吞吐能力
  • 减少网络传输
2 系统配置优化
2.1 操作系统配置
  • 文件描述符限制ulimit -n
  • tcp参数调优

参数

作用

影响

tcp_window_scaling

允许网络连接两端使用比标准创建大小(65535字节)更大接收窗口

对于广域网或者数据中心数据传输非常有用

可以减少由于网络延迟造成传输瓶颈

net.ipv4.tcp_fastopen

允许三次握手期间传输数据

减少了建立连接时间

对于频发短连接场景有利

tcp_keepalive_time

tcp连接多久没有活动后开始发送保活探测

适当调整配置可以帮助更快检测断开连接

避免长时间占用资源等待无响应客户端

避免设置太短产生不必要流程

tcp_tw_reuse

允许TIME_WAIT状态套接字用于相同四元组连接

可以更快复用TIME_WAIT状态端口

  • 选择合适文件系统比如ext4或者xfs
  • 禁用 atime 更新减少不必要磁盘写入
2.2 MySQL服务配置

参数

说明

max_connections

最大连接

连接创建意味需要分配系统资源内存文件描述符

连接建立时分配内存=线程栈空间 (thread_stack)+基本的连接管理结构较小且固定)

执行全表扫描分配缓冲区(read_buffer_size)

执行没有索引查询分配连接缓冲区join_buffer_size

需要排序操作分配排序缓冲区sort_buffer_size

需要使用临时表分配临时缓冲tmp_table_size, max_heap_table_size如果需要临时表超过内存大小使用磁盘存储临时表

如果系统内存不足将会使用磁盘swap内存导致性能降低

因此需要设置合适连接

max_user_connections

单个用户允许最大连接

back_log

暂存连接超过最大连接小于该设置值时立即失败而是等待资源释放

wait_timeout

jdbc连接空闲一定时间断开连接

interactive_timeout

mysql client连接空闲一定时间断开

sort_buffer_size

排序缓冲区可以加速order bygroup by

每个连接分配排序缓冲区

join_buffer_size

表关联缓冲区关联不走索引使用缓冲区驱动一部分数据读取缓冲区然后驱动进行关联查询查询完成清理缓冲区继续驱动剩余数据读取缓冲区进行关联查询

每个连接分配表关联缓冲区

innodb_thread_concurrency

innodb并发线程

默认值0表示不限制

通常设置cpu核心数或者核心数2

innodb_buffer_pool_size

innodb缓冲区大小

一般物理内存70%~80%

innodb_lock_wait_timeout

行锁锁定时间

默认值50s

innodb_flush_log_at_trx_commit

redo日志落盘时机

  • 设置为0:表示每次事务提交时都将redo日志写入redo日志缓冲区,数据库宕机时可能会丢失数据
  • 设置为1时(默认值),表示每次事务时都会将redo日志持久化到磁盘,数据最安全,不会因为数据库或者系统宕机导致数据丢失,但是性能差一点
  • 设置为2时,表示每次提交事务时都只是将redo日志写到操作系统缓存(page cache)中,这种情况数据库宕机不会丢失数据,操作系统宕机的话,如果page cache中的数据没来的及写入磁盘文件的话就会丢失数据

sync_binlog

binlog落盘时机

  • 为0时(默认),表示每次提交事务只写到os 缓存page cache中,由操作系统自行判断什么时候执行fsync写入磁盘,服务器宕机时有可能丢失数据
  • 为1时,表示每次提交事务都会执行fsync写入磁盘
  • 当>1时,表示每次提交事务都写入到os缓存page cache中,当积累N个事务后调用fsync写入磁盘,服务其宕机时最多丢失N个事务

  • 如何判断服务器内存达到瓶颈
  • 查看服务状态得到命中innodb缓存命中率命中率过小说明缓冲数据频繁交换
 show global status like 'innodb%read%'\G;

参数

说明

nnodb_buffer_pool_reads

物理磁盘读取次数

nnodb_buffer_pool_read_ahead

预读次数

nnodb_buffer_pool_read_ahead_evicted

预读但是没有后续被读取缓冲池替换数量

用于判断预读效率

nnodb_buffer_pool_read_requests

缓冲池读取次数

nnodb_buffer_pool_read_requests

总共读入字节数

nnodb_data_reads

发起读取次数每次读取可能读取多个

3 库表结构优化
  • 选择合适字段类型
  • 选择合适字段大小
  • 选择合适存储引擎
  • 小表
4 SQL及索引优化

参见索引优化章节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue和springboot交互数据,使用axios【跨域问题】

vue和springboot交互数据,使用axios【跨域问题】 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&…

FFMPEG 与 mp4

1. FFmpeg 中的 start_time 与 time_base start_time 流的起始时间戳(单位:time_base),表示第一帧的呈现时间(Presentation Time)。通常用于同步多个流(如音频和视频)。 time_base …

AI世界的崩塌:当人类思考枯竭引发数据生态链断裂

AI世界的崩塌:当人类思考枯竭引发数据生态链断裂 ——论过度依赖AI创作对技术进化的反噬 一、数据生态的恶性循环:AI的“自噬危机” 当前AI模型的训练依赖于人类创造的原始数据——书籍、论文、艺术作品、社交媒体动态等。据统计,2025年全球…

C++【STL】(2)string

C【STL】string用法扩展 1. assign:为字符串赋新值 用于替换字符串内容,支持多种参数形式。 常用形式: // 用另一个字符串赋值 str.assign("Hello World");// 用另一个字符串的子串(从第6个字符开始,取5…

树莓派4基于Debian GNU/Linux 12 (Bookworm)开启VNC,使用MobaXterm连接VNC出现黑屏/灰屏问题

1. 开启树莓派的VNC服务 启用VNC服务:通过raspi-config开启 # 1. 通过 raspi-config 工具开启 sudo raspi-config选择 Interface Options → VNC → Yes退出时会自动启动服务 检查服务状态: sudo systemctl status vncserver-x11-serviced正常输出应显示…

MongoDB使用x.509证书认证

文章目录 自定义证书生成CA证书生成服务器之间的证书生成集群证书生成用户证书 MongoDB配置java使用x.509证书连接MongoDBMongoShell使用证书连接 8.0版本的mongodb开启复制集,配置证书认证 自定义证书 生成CA证书 生成ca私钥: openssl genrsa -out ca…

Python爬虫实战:研究js混淆加密

一、引言 在当今数字化时代,数据已成为推动各行业发展的核心驱动力。网络爬虫作为一种高效的数据采集工具,能够从互联网上自动获取大量有价值的信息。然而,随着互联网技术的不断发展,许多网站为了保护自身数据安全和知识产权,采用了 JavaScript 混淆加密技术来防止数据被…

Java项目层级介绍 java 层级 层次

java 层级 层次 实体层 控制器层 数据连接层 Service : 业务处理类 Repository :数据库访问类 Java项目层级介绍 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java项目中,层级结构(Layered Architecture&#xf…

网络安全顶会——SP 2025 论文清单与摘要

1、"Check-Before-you-Solve": Verifiable Time-lock Puzzles 时间锁谜题是一种密码学原语,它向生成者保证该谜题无法在少于T个顺序计算步骤内被破解。近年来,该技术已在公平合约签署和密封投标拍卖等场景中得到广泛应用。然而,求解…

《100天精通Python——基础篇 2025 第18天:正则表达式入门实战,解锁字符串处理的魔法力量》

目录 一、认识正则表达式二、正则表达式基本语法2.1 行界定符2.2 单词定界符2.3 字符类2.4 选择符2.5 范围符2.6 排除符2.7 限定符2.8 任意字符2.9 转义字符2.10 反斜杠2.11 小括号2.11.1 定义独立单元2.11.2 分组 2.12 反向引用2.13 特殊构造2.14 匹配模式 三、re模块3.1 comp…

思迈特软件携手天阳科技,打造ChatBI金融智能分析新标杆

5月10日,广州思迈特软件有限公司(以下简称“思迈特软件”)与天阳宏业科技股份有限公司(以下简称“天阳科技”)在北京正式签署战略合作协议。思迈特软件董事长吴华夫、CEO姚诗成,天阳科技董事长兼总裁欧阳建…

OPENSSL-1.1.1的使用及注意事项

下载链接: OpenSSL1.1.1一个广泛使用的开源加密库资源-CSDN文库 OpenSSL 1.1.1 是一个广泛使用的开源加密库,以下是其使用方法及注意事项: 使用方法 安装: Linux系统: 从源码编译安装:访问 OpenSSL 官网…

数据库优化

一、慢 SQL 排查全流程 1. 开启慢查询日志:精准定位问题 SQL 慢查询日志是定位性能问题的首要工具,通过记录执行超时或未使用索引的 SQL,为优化提供依据。 配置步骤: ① 临时启用(生效至服务重启) sql …

GO语言-导入自定义包

文章目录 1. 项目目录结构2. 创建自定义包3. 初始化模块4. 导入自定义包5. 相对路径导入 在Go语言中导入自定义包需要遵循一定的目录结构和导入规则。以下是详细指南(包含两种方式): 1. 项目目录结构 方法1:适用于Go 1.11 &#…

记录算法笔记(2025.5.11) 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] …

【iptables防火墙】 -- DDos防御

最近有客户要定制路由器的默认防火墙等级,然后涉及到了DDos规则,对比客户提供的规则发现我们现有的规则存在明显的错误,在此记录一下如何使用iptables防护DDoS攻击 直接贴一下规则 #开启TCP SYN Cookies 机制 sysctl -w net.ipv4.tcp_synco…

[Java][Leetcode simple]26. 删除有序数组中的重复项

思路 第一个元素不动从第二个元素开始&#xff1a;只要跟上一个元素不一样就放入数组中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}

微服务!!

1.Nacos注册中心 2.服务注册 3.服务发现 4.负载均衡 5.OpenFeign 6.OpenFeign连接池 启动程序 7.路由 8.微服务保护 1.雪崩问题 2.解决方案 1.请求限流 2.线程隔离 3.服务熔断 3.Sentinel 1.链路 2.请求限流 3.线程隔离 4.Fallback 5.服务熔断 4.分布式事务 1.Seata 2.部…

代码随想录算法训练营 Day44 动态规划 ⅩⅠ 子序列问题

动态规划 题目 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 公共子序列&#xff0c;类似于最长重复子数组&#xff0c;但是不要求连续 (子序列) 1. 定义 dp&#xff0c;dp[i][j] 表示以 i-1 与 j-1 结尾的最长公共子序列的长度 2. 定义递推公式 如果字符相…

聊一聊接口测试依赖第三方服务变更时如何处理?

目录 一、依赖隔离与模拟 二、契约测试 三、版本控制与兼容性 四、变更监控与告警 五、容错设计 六、自动化测试维护 七、协作机制与文档自动化 第三方API突然改了参数或者返回结构&#xff0c;导致我们的测试用例失败&#xff0c;这时候该怎么办呢&#xff1f;首先想到…