惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - 喵喵2023

学习Langchain笔记三——输出格式化 学习Langchain笔记二——多模板提示词 学习LangChain笔记一 论云原生架构在高并发系统中的设计与实践 数据血缘图在数据错误追溯中的应用指南 观察者设计模式:原理、应用与对比分析 区块链技术:原理、应用与案例分析 docker 安装nginx 和 nginx proxy manager 微服务设计10个需要考虑的要素 MySQL 8.0 参考手册——8.2优化 SQL 语句(二) MySQL 8.0 参考手册——8.2优化 SQL 语句(一) docker 推送本地镜像到docker Hub仓库 微服务架构设计模式 系统分析与设计 SpringBoot 与 nacos 最新版本整合 CentOS 添加定时任务 安装docker-compose docker nginx镜像 获取并挂载目录 供应链管理(五) 供应链管理(四) 供应链管理(三) 供应链管理(二)
MySQL 8.0 参考手册——8.1优化概述
喵喵2023 · 2023-08-16 · via 博客园 - 喵喵2023

数据库性能取决于数据库级别的几个因素,例如表、查询和配置设置。这些软件结构在硬件级别上产生CPU和I/O操作,您必须最小化和尽可能有效地进行这些操作。在改进数据库性能时,您首先应学习软件的高级规则和指南,并使用执行时间测量性能。随着您成为专家,您将了解更多内部发生的事情,并开始测量诸如CPU周期和I/O操作之类的东西。

典型的用户旨在最大限度地提高其现有软件和硬件配置的数据库性能。高级用户则寻找改进MySQL软件本身的机会,或者开发自己的存储引擎和硬件设备,以扩展MySQL生态系统。

  • 在数据库级别进行优化

  • 在硬件级别进行优化

  • 平衡移植性和性能

一、在数据库级别进行优化

使数据库应用程序快速运行的最重要因素是其基本设计:

  1. 表格的结构是否合理?特别是,列的数据类型是否正确,每个表是否都有适合工作类型的列?例如,执行频繁更新的应用程序通常有许多列数较少的表,而分析大量数据的应用程序通常有列数较多的少数几个表。
  2. 是否建立了正确的索引,以提高查询效率?
  3. 您是否为每个表使用了合适的存储引擎,并利用了每个存储引擎的优点和功能?尤其是,选择 InnoDB 等事务型存储引擎还是 MyISAM 等非事务型存储引擎对性能和可扩展性非常重要。
  4. 注意:InnoDB 是新表的默认存储引擎。实践中, InnoDB 的高级特性意味着 InnoDB 表的性能往往优于简单的 MyISAM 表,对于繁忙的数据库来说尤其如此。
  5. 每个表是否使用合适的行格式?这个选择也取决于用于表的存储引擎。特别是,压缩表占用更少的磁盘空间,因此只需要更少的磁盘I/O来读取和写入数据。InnoDB表和只读的MyISAM表所有类型的工作负载都可以使用压缩功能。
  6. 应用程序是否使用了合适的锁策略?例如,在可能的情况下允许共享访问,以便数据库操作可以并发运行;在适当的情况下请求独占访问,以便关键操作获得最高优先级。同样,存储引擎的选择也很重要。InnoDB 存储引擎可以处理大多数锁定问题,无需用户参与,从而提高数据库的并发性,减少代码的实验和调整工作量。
  7. 用于缓存的所有内存区域大小是否正确?也就是说,大到足以容纳频繁访问的数据,但又不会大到使物理内存超载并导致分页。需要配置的主要内存区域是 InnoDB 缓冲池和 MyISAM 密钥缓存。 

二、在硬件级别进行优化

随着数据库变得越来越繁忙,任何数据库应用程序最终都会达到硬件极限。DBA 必须评估是否有可能调整应用程序或重新配置服务器以避免这些瓶颈,或者是否需要更多的硬件资源。系统瓶颈通常来自以下几个方面:

  1. 磁盘寻道。磁盘查找数据需要一定时间。现代磁盘的平均寻道时间通常低于 10 毫秒,因此理论上我们每秒可以进行约 100 次寻道。新磁盘的寻道时间改善得很慢,而且很难对单个表进行优化。优化寻道时间的方法是将数据分布到多个磁盘上。
  2. 磁盘读写。当磁盘正常挂载时,我们可以按需读取或写入数据。对于现代磁盘,一个磁盘的吞吐量至少为 10-20MB/s 。这比寻道更容易优化,因为可以从多个磁盘并行读取。
  3. CPU 周期。当数据在主内存中时,我们必须对其进行处理才能得到结果。与内存容量相比,数据表过大是最常见的限制因素。但对于小表,速度通常不是问题。
  4. 内存带宽。当 CPU 需要的数据超过 CPU 缓存所能容纳的容量时,主内存带宽就会成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但也是一个需要注意的问题。 

三、平衡可移植性和性能

要在可移植的 MySQL 程序中使用面向性能的 SQL 扩展,可以在语句中用 /*!*/ 注释分隔符,其他 SQL 服务器会忽略注释关键字。