gpt4 book ai didi

mysql - 如何衡量 mySQL 瓶颈?

转载 作者:可可西里 更新时间:2023-11-01 07:08:29 32 4
gpt4 key购买 nike

对于以下问题场景,我们应该查看哪些 mySQL 服务器变量以及哪些阈值很重要:

  1. CPU 限制
  2. 磁盘读取限制
  3. 磁盘写入绑定(bind)

对于每种情况,除了获得更好的硬件或将数据库扩展到多台服务器之外,建议使用哪些解决方案来改进它们?

最佳答案

这是一个复杂的领域。将影响您的三个类别中的每一个的“阈值”有很多重叠。

  1. 如果您的操作受 CPU 限制而遇到问题,那么您肯定需要查看:(a) 你的数据库的结构——它是否完全标准化。错误的数据库结构会导致复杂的查询影响处理器。(b) 您的索引——您的查询所需的一切是否已被充分索引。缺少索引会严重影响处理器和内存。要检查索引,执行“EXPLAIN ...your query”。结果解释中的任何一行表明它没有使用索引,您需要仔细查看并在可能的情况下添加索引。(c) 尽可能使用准备好的语句。这些可以节省 CPU 做相当多的运算。(d) 使用适合您的 CPU 优化的更好的编译器。这是专用类型的一种,但它可以在这里和那里收集到奇怪的额外百分比。

  2. 如果您的操作被读取绑定(bind)时遇到问题(a) 确保尽可能缓存。检查 query_cache_limit 和 query_cache_size 的配置变量。这不是 Elixir ,但提高这些可以有所帮助。(b) 和上面一样,检查你的索引。好的索引可以减少需要读取的数据量。

  3. 如果您对写绑定(bind)的操作有疑问(a) 查看您是否需要当前拥有的所有索引。索引很好,但它们改进查询时间的权衡是,维护这些索引会影响写入数据和保持数据更新所花费的时间。如果有疑问,通常您需要索引,但有时您对快速写入表比从中读取更感兴趣。(b) 尽可能使用 INSERT DELAYED 来“排队”写入数据库。请注意,这不是神奇的修复并且通常不合适,但在适当的情况下会有所帮助。(c) 检查同时大量读取和写入的表,例如一个访问列表,不断更新访问者的 session 数据,并从中读取同样多的数据。优化表的读取和写入很容易,但设计一个同时兼顾两者的表是不可能的。如果您遇到这种情况并且它是一个瓶颈,请考虑是否可以拆分其功能或将使用该表的任何复杂操作移动到一个临时表,您可以定期将其更新为一个 block 。

请注意,以上内容中唯一具有主要 效果的是良好的查询设计/索引。除此之外,您想开始考虑使用更好的硬件。特别是,您可以从 RAID-0 阵列中获得很多好处,它对写入绑定(bind)问题没有多大作用,但可以为读取绑定(bind)问题带来奇迹。它可以是一个非常便宜的解决方案,可以实现巨大的提升。

您还遗漏了 list 中的两项。

  1. 内存不足。如果您遇到内存问题,那么您必须检查所有可以被索引的内容是否被索引。如果由于某种原因您使用大量离散连接到您的数据库,您还可以查看更大的连接池。

  2. 受网络约束。如果您遇到了网络限制问题……嗯,您可能没有遇到,但如果遇到了,则需要另一 block 网卡或更好的网络。

请注意,分析数据库性能的一种简便方法是打开 log_slow_queries 选项并将 long_query_time 设置为 0 以获取所有内容,或设置为 0.3 或类似内容以捕获可能阻碍数据库运行的任何内容。您还可以打开 log-queries-not-using-indexes 以查看是否显示了任何有趣的内容。请注意,这种日志记录可以杀死繁忙的实时服务器。在开发盒上尝试一下。

希望对您有所帮助。我很想知道任何人对上述内容的评论。

关于mysql - 如何衡量 mySQL 瓶颈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6555549/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com