更新时间:2022-04-18 09:16:13 来源:极悦 浏览1681次
MySQL作为最流行的数据库关系型数据库管理系统,仍然需要不时进行优化。不仅如此,在大而复杂的数据集的情况下,定期优化操作对于适当的系统性能至关重要。
MySQL的性能优化通常涉及多个级别的配置、分析和监控性能。要调整 MySQL 性能,您不一定需要拥有广泛的专业知识和对 SQL 的深刻理解。
在本文中,我们将带您了解主要的性能调整技术,以确保您的数据库驱动应用程序的稳定性、可靠性和速度。
要求
首先要做的是检查 MySQL 的最佳硬件和软件要求,尤其是如果您是低端 PC 的所有者,因为硬件限制可能会对性能产生重大影响。
最低 MySQL 数据库服务器硬件要求(适用于 5.7 - 8.0 版本):
1Ghz 处理器
512MB 内存
硬盘空间取决于数据库的大小
还值得一提的是,如果可能的话,最好使用最新的官方版本的 MySQL。
在硬件层面,您可以采取一系列措施来改善硬件和软件资源。
磁盘空间
如果您使用传统硬盘驱动器 (HDD) 并寻求性能增强,您应该考虑升级到 SSD。MySQL 官方文档没有明确指出有效运行 MySQL 服务器所需的磁盘空间或内存设置,因为它们主要取决于潜在数据库的大小。但是,最好使用sar和iostat系统性能工具来监控磁盘性能。如果磁盘使用率明显高于其他资源的使用率,则绝对应该添加更多存储空间或升级到更快的存储空间。
RAM 内存
不足也会严重影响数据库性能。这可能看起来很陈词滥调,但如果您的服务器经常在内存不足并且 RAM 磁盘性能不令人满意,则值得添加更多内存。当 RAM 用完时,MySQL 服务器会缓存物理内存,这会降低性能。因此,MySQL 内存优化极为重要。
CPU
MySQL CPU 使用优化应该从仔细分析您机器上发生的 MySQL 进程以及它们所需的处理器使用百分比开始。CPU 升级并不便宜,但是,如果它是一个瓶颈,升级将是必要的。
Internet 连接
网络是 MySQL 基础架构的关键部分,跟踪和分析网络流量以确保您有足够的资源来管理工作负载非常重要。确保您的 MySQL 服务器有良好且稳定的 Internet 连接以正常运行。
正如我们已经提到的,您可以在硬件和软件级别优化 MySQL 性能。现在让我们看看 MySQL 软件性能调优。
MySQL 在软件方面的性能调优涉及到配置 MySQL 服务器选项、提高 MySQL 查询性能、调优 MySQL 索引、切换到MySQL InnoDB存储引擎等。让我们详细考虑所有这些。
为提高性能而进行适当的索引并不容易,并且需要一定程度的专业知识,但它是您可以对数据库进行的最佳性能改进之一。
MySQL 使用索引作为书籍索引或路线图来快速查找给定查询的值。如果没有索引,MySQL 将逐行扫描整个表以查找相关数据。因此,索引优化旨在加速数据检索。索引对用户不可见,并且包含有关实际数据存储位置的信息。还值得注意的是,InnoDB 表的 MySQL 索引长度有限制,具体取决于行格式。
MySQL 索引对于大型数据集非常有用,如果您的数据库快速增长,索引调整是正确的做法。索引对以下操作特别有用:查找与 WHERE 子句匹配的行、使用 JOIN 检索数据、在 ORDER BY 和 GROUP BY 的帮助下进行数据排序和分组。
那么为什么不插入尽可能多的索引呢?那将是一个坏主意——不必要的索引会占用空间并浪费系统的时间,更不用说它们还会增加查询的成本,因为索引需要更新。所以你必须找到合适的平衡点来实现最优的 MySQL 索引使用。
对于那些数据库负载很重的人来说,第一个调优技巧是尝试从 MyISAM 存储引擎切换到 InnoDB。与 MyISAM 相比,InnoDB 具有聚集索引,数据在页面和连续的物理块中,在处理大量数据时具有更好的性能。
InnoDB 还拥有一组丰富的变量和高级设置,可以对其进行配置以进一步提高 MySQL 性能。InnoDB 性能设置更广泛,因此与调整 MyISAM 相比,有更多方法可以调整 InnoDB 以获得更高的性能。
现在让我们看看如何优化 MySQL 查询以获得更好的性能和速度。对于那些想要增强 MySQL 查询的人来说,遵循以下优化技术将是一个好主意。
为 WHERE、ORDER BY 和 GROUP BY 子句中使用的列添加索引
这样,您将提高 MySQL 查询的性能,因为 MySQL 服务器将从数据库中获取结果的速度明显更快。
在 SELECT 语句中指定必要的列
尽量避免使用 SELECT * FROM,因为它检索表的所有列,从而导致服务器上的额外负载并降低其性能。将始终指定 SELECT 语句中的列作为一项规则。
谨慎使用 DISTINCT 和 UNION
查询调优的另一个好技巧是仅在必要时使用 DISTINCT 和 UNION 运算符,因为使用它们的查询会导致服务器开销并通常会增加响应时间。考虑将 UNION 替换为 UNION ALL 并将 DISTINCT 替换为 GROUP BY 以提高流程效率。
避免在 LIKE 模式的开头使用通配符
带有 LIKE 运算符的 MySQL 条件查询通常会导致服务器性能下降,因此应谨慎使用它们。当 LIKE 模式以通配符开头时,MySQL 不能使用索引,例如,'%xyz',并在这种情况下执行全表扫描。在优化 MySQL 查询时应牢记这一点,并尽可能尝试使用“xyz%”。
使用 INNER JOIN 而不是
OUTER JOIN 仅在必要时使用 OUTER JOIN。与 INNER JOIN 相比,MySQL 在获取 OUTER JOIN 的结果方面做了更多的工作。我们建议您检查您的 JOIN 查询的性能,以防不满意 - 尽可能开始将您的 OUTER JOIN 转换为 INNER JOIN。 MySQL JOINs优化可以带来显着的性能提升。
现在让我们关注如何在性能调优方面优化 MySQL 服务器选项。为此,您需要调整配置文件 (my.cnf/my.ini)。
innodb_buffer_pool_size
该参数指定 MySQL 分配给 InnoDB 缓冲池的内存量。此参数的推荐值为可用内存的 70-80%。您的数据集越大,值应该越大。
max_connection
该参数定义允许同时连接的最大客户端连接数,默认值为151。为了避免出现“连接太多”错误,可以增加该值。但是,请记住,打开的连接过多会影响性能。
query_cache_size
此参数设置分配给查询缓存的内存总量。它的最佳值主要取决于您的工作情况,需要暂时确定。这个想法是从非常小的开始——例如 10MB——然后以小增量增加到 100-200MB。调整query_cache_size,记得开启查询缓存(query-cache-type ON)。请注意,较大的查询缓存大小会导致性能严重下降。
innodb_io_capacity
该参数指定后台执行的任务每秒允许的 I/O 操作数,默认值为 200。一般 100 左右的值适合普通硬盘,而更快更现代存储设备较高的值将是有利的。
innodb_log_file_size
此参数指定日志组中每个 MySQL 重做日志文件的大小(以字节为单位),默认值为 134,217,728(约 128 MB)。innodb_log_files_in_group 参数依次指定日志组中的日志文件数,默认值为 2。如果 innodb_log_file_size 值对于您的工作负载来说很小并且您的应用程序是写密集型的,我们建议增加它。但是,太大的 innodb_log_file_size 会增加崩溃恢复时间。所以你必须找到它的最佳尺寸。
dbForge Studio for MySQL 带有一个高级MySQL 分析器,它允许收集有关已执行查询的最完整的统计信息、发现慢速查询以及对任何类型的性能问题进行故障排除。
使用 dbForge MySQL 性能调优工具,您可以:
使用 EXPLAIN 计划优化查询
监控会话统计
比较查询分析结果
确定最昂贵的查询
始终在测试环境中检查优化工作的结果
永远不要在没有基准测试的情况下进行优化
一次只改变一件事
将性能监控添加到您的日常工作中
记录结果
以上就是关于“Mysql高性能优化和有效优化技巧”的介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下极悦的MySQL教程,里面的课程内容细致全面,通俗易懂,很适合没有基础的小白学习,希望对大家能够有所帮助哦。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习