• 【Mysql性能优化系列】Mysql优化方案你知道哪些


    前言

    数据库性能取决于数据库级的表、查询和配置设置等因素。这些软件结构会导致硬件级别的 CPU 和 I/O 操作,本文学习通过那些方式能够使其最小化并尽可能提高效率。

    1、数据库优化

    使数据库应用程序快速运行的最重要因素是其基本设计:
    在这里插入图片描述

    • 表的结构是否正确?特别是,每个表的字段是否具有适合类型?
      例如,执行频繁更新的应用程序通常有很多表和很少的列,而分析大量数据的应用程序通常有很少的表和很多列。

    • 是否有正确的 索引来提高查询效率?

    • 是否为每个表使用了适当的存储引擎,并利用了每个存储引擎的优势和特性?特别是,选择事务性存储引擎(例如事务性存储引擎) InnoDB 或非事务性存储引擎(例如)MyISAM 对于性能和可伸缩性可能非常重要。

    • 每个表是否使用适当的行格式?此选择还取决于用于表的存储引擎。特别是,压缩表使用更少的磁盘空间,因此需要更少的磁盘 I/O
      来读取和写入数据。压缩适用于所有类型的带有 InnoDB表的工作负载,也适用于只读 MyISAM表。

    • 应用程序是否使用了适当的 锁定策略(锁定策略包括悲观、乐观和无。)?例如,尽可能允许共享访问,以便数据库操作可以并发运行,并在适当时请求独占访问,以便关键操作获得最高优先级。同样,存储引擎的选择很重要。存储引擎无需您参与即可处理大多数锁定问题,从而提高数据库的InnoDB并发性并减少代码的试验和调整量。

    • 用于缓存的所有内存区域的大小是否正确?也就是说,大到足以容纳经常访问的数据,但又不会大到使物理内存过载并导致分页。要配置的主要内存区域是InnoDB缓冲池、MyISAM键缓存和MySQL 查询缓存。

    2、在硬件级别进行优化

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

    • 磁盘寻道。磁盘找到一条数据需要时间。对于现代磁盘,平均时间通常低于 10 毫秒,因此理论上我们每秒可以进行大约 100次寻道。这个时间随着新磁盘的增加而缓慢改善,并且很难针对单个表进行优化。优化寻道时间的方法是将数据分布到多个磁盘上。

    • 磁盘读写。当磁盘在正确的位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘可提供至少 10–20MB/s的吞吐量。这比查找更容易优化,因为可以从多个磁盘并行读取。

    • CPU周期。当数据在主存中时,我们必须对其进行处理以获得我们的结果。与内存相比,大表是最常见的限制因素。

    • 内存带宽。当 CPU 需要的数据超出 CPU高速缓存的容量时,主内存带宽就会成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但需要注意。

    3、平衡可移植性和性能

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

    MySQL Server 支持三种注释样式:

    • #字符到行尾。
    • – 序列到行尾。在 MySQL 中,-- (双破折号)注释样式要求第二个破折号后跟至少一个空格或控制字符(例如空格、制表符、换行符等)。
    • /*序列到下面的 */序列,就像在 C 编程语言中一样。此语法使注释可以扩展到多行,因为开始和结束序列不必在同一行。

    以下示例演示了所有三种注释样式:

    mysql> SELECT 1+1;     # This comment continues to the end of line
    mysql> SELECT 1+1;     -- This comment continues to the end of line
    mysql> SELECT 1 /* this is an in-line comment */ + 1;
    mysql> SELECT 1+
    /*
    this is a
    multiple-line comment
    */
    1;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    点赞 收藏 关注

  • 相关阅读:
    动态内存管理(C语言)
    CDH CDH 13Cloudera Manager Console FreeIPA 用户规划(markdown新版)
    HNUCM—第14届蓝桥杯CC++组选拔赛
    Linux网络编程-传输层UDP和TCP协议详解
    jsp 静态标签 - 动态标签 - 请求转发标签
    Linux SysRq 简介
    Node.js简介
    c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))
    base相关密码特征
    Day83:服务攻防-开发组件安全&Jackson&FastJson各版本&XStream&CVE环境复现
  • 原文地址:https://blog.csdn.net/qq_35764295/article/details/126887003