MySQL是一个开放源代码数据库应用程序,可为大量数据创建有意义的结构和可访问性。但是,大数据会带来性能问题。本文将为您提供MySQL技巧中的性能调优,以提高其[性能]。
确保您正在使用最新的MySQL版本
如果您是旧数据库或较旧的数据库,则可能不可行。但是,如果是这样,请检查[最新版本的MySQL]并升级到最新([最新的NoSQL数据库]
较新版本默认情况下具有性能改进,从而使您无需再为MySQL问题中的常见性能调整找到更多的解决方案。通常最好使用默认或本机MySQL性能改进,而不是脚本或配置文件。
选择基于MyISAM的InnoDB
MyISAM的高级功能少于InnoDB。总体而言,MyISAM的效率较低,而本机优化增强功能较少。例如,InnoDB有一个聚簇索引,其中数据包含在页面和连续的物理块中。如果某个值太大而无法容纳在页面上,则InnoDB会将其迁移到其他位置,为其值编制索引-相关数据将保留在硬盘驱动器上的同一位置,从而缩短了检索时间。
硬件资源:MySQL中的系统级性能调整
处理器
处理器的速度显示了计算机的速度。该顶部命令会给你洞察每个进程的CPU和内存使用情况-换句话说,是如何被使用的资源。使用MySQL时,请注意该特定进程的使用百分比。太高了,瓶颈很可能是您的机器,这意味着需要对其进行升级。
记忆
调整或改善内存将增加MySQL服务器中的总RAM并提高性能。转到服务器配置部分,您将在其中看到用于优化内存的缓冲池大小命令。
硬盘
如果您使用HDD进行存储,则升级到固态驱动器可以提高性能。注意与其他资源相比,MySQL正在使用多少磁盘。如果基本上不成比例,请添加更多存储空间。诸如sar或iotop(sysstat软件包)之类的工具可用于监视磁盘输入与输出速率。
网络
网络带宽的瓶颈会导致数据包丢失,延迟甚至完全停机。您应该能够提供正常的数据库流量。
MySQL中的软件级性能调优
调整脚本可以实现更高效的数据库查询,MySQL配置文件和最佳的数据库设计。
专家提示:调整软件配置可能会导致更多问题,而不是解决的问题。我建议一次只进行少量更改,每次都进行测试,因为这样可以更轻松地[识别问题]并总体评估对性能的影响。
代码剖析
使用诸如[Stackify Prefix之]类的代码分析工具,可以在编写代码时对代码进行概要分析和测试。通过在编写代码时验证代码的性能,Prefix用户可以将更好的代码推送到测试中,从生产中获得更少的支持票,并拥有更快乐的开发经理。前缀的概要分析和跟踪功能甚至可以帮助最有经验的开发人员找到慢速的SQL查询,隐藏的异常等等。
发现性能不佳的SQL查询,ORM生成的查询以及以前未知的瓶颈。跟踪每个SQL调用参数,受影响的记录和下载时间。前缀还可以轻松发现可怕的N + 1模式。前缀涵盖了您的整个技术堆栈,并且在Windows和Mac操作系统上均支持.NET,Java,PHP,Node.js,Python和Ruby。
查询
查询数据库时,要求其检索与您输入的值匹配的特定数据。警惕可能在后台耗尽表格的自动查询。使用show processlist函数密切关注它们,并杀死不需要的函数。一些种植者比其他种植者花费更长的时间。如果允许不必要的MySQL进程运行,则这些进程将编译并阻止其他用户访问和修改数据。
自动性能改善
我们对前三项自动性能改进工具的建议是MySQLTuner,tuning-primer和PHPMyAdmin Adviser。第一个工具MySQLTuner最适用于现代MySQL数据库。它找到可以优化的部分,建议进行调整,并且与MySQL 8.x兼容。尽管Tuning-primer较旧,是MySQL 5.5至5.7版,但其他两个功能也具有类似的功能。
服务器调整
同样,请确保仅在此处进行增量更改。我们将调整/etc/mysql/my.cnf文件。
**innodb_buffer_pool_size **—
该命令配置将系统内存划分为数据库的数据缓存。数据块越大,值应越大。进行更改时,请注意有多少RAM用于其他系统资源。
**innodb_io_capacity **—
这显示了存储设备的输入/输出速率。硬限制是您使用的任何类型的存储驱动器。可以进行调整以更好地将数据库与硬件对齐
**query_cache_size **—
这设置了未决MySQL查询的缓存大小。我们建议从小开始,大约10MB,然后再增加到100-200MB,但不要再增加。如果查询太多,并且收到“等待缓存锁等待”消息,请尝试使用EXPLAIN函数来评估单个查询以及优化每个查询的方法。
**max_connection **—
这显示了数据库中启用的连接数。为了克服“连接过多”的错误,请增加此数字。
解释
现代的MySQL数据库包括解释功能。如果在查询开始时使用此表达式,则查询将被读取和评估。如果表达式效率低下或结构出现异常,EXPLAIN可以帮助您查明它们。然后,您可以调整查询短语,以消除性能消耗和不必要的表扫描。
JOIN,UNION,DISTINCT
虽然“内部联接”是要使用的首选类型,但在适用时也应使用联接,并集和不重复。外部联接在相关列之外搜索无关的数据。在某些情况下,可能需要数据,但是这对于搜索不相关的数据会造成不必要的性能消耗。
查询有时涉及DISTINCT和UNION命令。再一次,如果需要,请使用它们,但请注意,它们需要从数据库中进行额外的读取和排序。如果不需要它们,最好选择一个更有效的命令。
索引可能有用
该SELECT ... WHERE结构是常用的数据库中使用。他们处理过滤,检索和评估结果。为连接的表创建一个小的索引集是一种有用的结构,它允许将查询指向索引,以便在运行时加快索引的速度。
避免在查询谓词中使用函数和通配符
避免在查询谓词中使用函数。例如,如果要创建一个UPPER表示法(创建一个函数),这将迫使您在SELECT操作中进行操作。按此顺序工作会使查询的工作量加倍。
使用通配符也是如此—通配符% 表示零个或多个字符。例如,表达式' %345 '包含所有以345结尾的值。%代表该字符串之前出现的任何字符,包括不存在任何后续字符。这会强制搜索对所有这些可能性进行全表扫描。
使用**SELECT ***操作时,请记住,在扫描特定列时,您可能需要缩短搜索查询时间,因为并非所有数据库列都在被扫描。
的ORDER BY由所选择的列表达式排列的结果。这也适用于同时排序两列。但是,两列均应按升序或降序均匀排序。如果排序不均匀,将会降低性能。为此添加索引以加快排序。