当前位置: 首页 > article >正文

【每日八股】MySQL篇(九):优化

目录

  • 慢查询的原因?
  • MySQL 磁盘 I/O 很高有什么优化的方法?
  • 总结

慢查询的原因?

  • 索引不足:如果查询的表没有合适的索引,MySQL需要遍历整个表才能找到匹配的记录,这会导致查询变慢。可以通过添加索引来优化查询性能。
  • 数据库设计问题:如果数据库设计不合理,例如表过于庞大、列过多等,查询时可能需要耗费大量时间。这时可以通过优化数据库设计来解决问题。
  • 数据库服务器负载过高:如果MySQL服务器上同时运行了太多的查询,会导致服务器负载过高,从而导致查询变慢。可以通过增加服务器硬件配置或分散查询负载来解决问题。
  • 查询语句复杂:复杂的查询语句可能需要耗费更多的时间才能完成。可以尝试简化查询语句或将查询分解成多个较简单的查询语句来提高性能。
  • 数据库统计信息不准确:如果数据库统计信息不准确,MySQL可能会选择不合适的查询计划,从而导致查询变慢。可以通过更新数据库统计信息来解决问题。
  • MySQL版本过低:较老版本的MySQL可能性能较差,升级到较新版本的MySQL可能会提高查询性能。

MySQL 磁盘 I/O 很高有什么优化的方法?

  • 设置组提交的两个参数:binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 参数,延迟 binlog 刷盘的时机,从而减少 binlog 的刷盘次数。
  • 将 sync_binlog 设置为大于 1 的值(比较常见是 100~1000):表示每次提交事务都 write,但累积 N 个事务后才 fsync,相当于延迟了 binlog 刷盘的时机。但是这样做的风险是,主机掉电时会丢 N 个事务的 binlog 日志。、
  • 将 innodb_flush_log_at_trx_commit 设置为 2:表示每次事务提交时,都只是缓存在 redo log buffer 里的 redo log 写到 redo log 文件,注意写入到redo log 文件并不意味着写入到了磁盘,因为操作系统的文件系统中有个 Page Cache,专门用来缓存文件数据的,所以写入 redo log 文件意味着写入到了操作系统的文件缓存,然后交由操作系统控制持久化到磁盘的时机。但是这样做的风险是,主机掉电的时候会丢数据。

总得来说,优化 MySQL 磁盘 I/O 的方法是降低 binlog 和 redo log 的落盘次数,比如设置 binlog 组提交。

总结

至此,通过九篇文章,我根据 csview 整理完了 MySQL 部分的所有八股文。

前 8 篇文章的链接如下:

  • 【每日八股】MySQL篇(一):概述
  • 【每日八股】MySQL篇(二):事务
  • 【每日八股】MySQL篇(三):索引(上)
  • 【每日八股】MySQL篇(四):索引(下)
  • 【每日八股】MySQL篇(五):锁
  • 【每日八股】MySQL篇(六):存储引擎
  • 【每日八股】MySQL篇(七):日志(上)
  • 【每日八股】MySQL篇(八):日志(下)

http://www.kler.cn/a/571386.html

相关文章:

  • golang程序员如何3天完成python学习
  • 【区块链 + 智慧政务】科大讯飞:省级一体化区块链平台 | FISCO BCOS 应用案例
  • 软件试用 防破解 防软件调试(C# )
  • Excel的行高、列宽单位不统一?还是LaTeX靠谱
  • 用matplotlib构建BI看板:Superset插件开发实战
  • 高并发场景下的数据库优化
  • 机器学习的半监督学习,弱监督学习,自监督学习
  • Linux : 环境变量
  • 【C语言5】函数:库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、声明和定义
  • 剑指 Offer II 040. 矩阵中最大的矩形
  • PPT 小黑第36套
  • 建筑兔零基础自学python记录37|编程练习3
  • HTML label 标签使用
  • HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解
  • 【随手笔记】利尔达NB模组
  • jenkins流程概述
  • 计算机中的架构
  • 基于微信小程序的心理健康恢复系统+LW示例参考
  • 《深度学习进阶》第9集:自监督学习与无监督学习
  • react+vite+pnpm+ts基础项目搭建