AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 7630
In Process
Darryl Hein
Darryl Hein
Asked: 2009-05-13 18:47:23 +0800 CST2009-05-13 18:47:23 +0800 CST 2009-05-13 18:47:23 +0800 CST

MySQL 的哪些配置选项提供了最大的速度改进?

  • 772

MySQL 的哪些配置选项提供了最大的速度改进?

我想知道实际的配置文件改进、表类型、硬件设置、复制等。除了查询结构和表结构(这些很容易在网站和 Stack Overflow 上找到)。查询缓存设置之类的东西是什么给了你最快的速度吗?驱动器怎么样?将它放在外部 RAID 上还是内部更好?复制是否为您提供了更好的性能,尤其是在读取大型查询时?

您还进行了哪些其他设置/更改来提高 MySQL 的性能?

注意:我意识到这些非常依赖于使用(即小型网站与数据仓库),但我认为我们中的大多数人可能在各种站点/系统上工作,因此很高兴了解可以应用于不同的各种技术情况。另外,我认为一些技术可以在不同情况之间转移。

mysql optimization
  • 5 5 个回答
  • 3781 Views

5 个回答

  • Voted
  1. Dave Cheney
    2009-05-14T03:02:24+08:002009-05-14T03:02:24+08:00

    这是我的建议(您的米数可能会有所不同)

    • 使用硬件 RAID。这与我在其他帖子中使用软件 RAID 的建议相反,但是这是您需要硬件 RAID 卡的特定情况。具体来说,您希望 RAID 卡上的电池支持 NVRAM 以减少将日志文件 fsync 到磁盘的时间。
    • 仅使用 RAID 1 或 RAID 10 卷。RAID 5 或 6 写入的成本太高,无法在混合读/写工作负载中容忍。
    • 对数据、日志和 tmp 卷使用单独的 LUN。这些都应该与操作系统和交换卷分开。
    • 使用InnoDB。
    • 使用 innodb_file_per_table
    • 使用 64 位操作系统
    • 将 InnoDB 缓冲池设置为可用 RAM 的约 80%
    • 将日志文件设置为缓冲池大小的 1/4,即 2 到 4 个日志文件。较大的日志文件意味着较慢的关闭和恢复时间,但允许您更快地恢复大型数据库转储。
    • log_slow_queries,log-queries-not-using-indexes,set-variable = long_query_time=1,调查该日志中的每个查询,重构您的架构以避免表扫描和 tmp 表尽可能。
    • 20
  2. Bruno Bronosky
    2009-05-29T03:56:57+08:002009-05-29T03:56:57+08:00

    再一次,戴夫切尼真的把它赶出了公园。我真的无法在他对您问题的回答中添加任何内容。但是,我想指出你没有问的问题。正如 Jeremy Zawodny 和 Peter Zaitsev 几年前告诉我的那样,您在跟踪和优化错误查询上所花费的时间的投资回报率将超过您在进行配置更改所花费的时间上的 ROI 10 倍。当然,您不希望配置不佳、RAID 设置错误或 RAM 不足。但是,在优秀的甚至是边缘的 MySQL DBA 错误查询(通常来自开发人员/框架,而不是 DBA)中是一种慢性病,其中错误的配置是可以忍受的。

    (我为那些形容词挖掘了一段时间,但仍然对我选择的那些不满意。)

    我想再次强调,如果您的开发人员正在使用像 Ruby on Rails 和 Django 等框架中常见的 ORM,那么您真的必须监控命中数据库的查询。当开发人员停止考虑 SQL 并让 DB 被抽象出来时,这真的很讨厌。我喜欢我刚才提到的两个框架。(不要因为我说他们的坏话而投票给我。)它只是让查询侦查非常重要。(阅读:工作保障)

    • 11
  3. Nathan
    2009-05-14T08:15:52+08:002009-05-14T08:15:52+08:00

    其他几件事(戴夫切尼的回答中没有提到)

    • 尝试将 innodb_flush_method 设置为 O_DIRECT 以避免数据的双重缓冲。如果您的 RAID 卡没有电池支持的写入缓存或您的数据位于 SAN 上,请避免这种情况。

    • 还可以使用 innodb_thread_concurrency。我相信默认值为 8,但值得对其进行调整以查看它是否可以提高性能

    • 确保查询缓存已打开并检查统计信息以查看命中率。如果它很好,请尝试增加它,看看它是否会提高命中率。

    • 根据运行的应用程序,您可能能够更改默认隔离级别。默认值为 REPEATABLE_READ 但 READ_COMMITTED 可能会给您更好的性能

    • 如果您的语句主要是 UPDATE 和 DELETE,那么您可以尝试通过执行 SELECT 查询来启动从属服务器上的缓存,该查询返回要修改的结果集。查看mk-slave-prefetch工具,它将为您执行此操作

    • 看看除了 MyISAM 和 InnoDB 之外的其他存储引擎

    • 4
  4. weeheavy
    2010-09-17T00:59:24+08:002010-09-17T00:59:24+08:00

    不能说硬件,但你可以试试http://blog.mysqltuner.com 。这是一个分析 MySQL 设置的 Perl 脚本。

    您可以在http://www.thomas-krenn.com/de/wiki/MySQL_Performance_Tuning#mysqltuner.pl看到示例输出

    • 3
  5. staticsan
    2009-05-14T15:54:33+08:002009-05-14T15:54:33+08:00

    您应该做的第一件事是查看内存参数。MySQL 的默认设置非常非常保守。无论您使用什么引擎,您都可能需要将许多内存参数提高十倍甚至一百倍。

    您应该做的下一件事是查看表缓存。默认值为 64,仅当您的表不超过 60 个时才有用。你会想提出很长的路要走。

    您应该做的第三件事是查看线程和连接参数。对于大多数基于 Web 的应用程序来说,默认的 wait_timeout 非常长,可以减少到 30 秒左右。这也将提高内存使用率,因为 MySQL 将更快地获得连接,从而减少处于“睡眠”状态的情况。

    • 1

相关问题

  • 您如何跟踪和调试 mySQL 性能问题?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 如何选择 MySQL 数据库引擎

  • 上线的第一天:如何不杀死您的网站

  • IIS 优化

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve