0

0

101个MySQL 的调节和优化的提示_MySQL

php中文网

php中文网

发布时间:2016-06-01 13:30:46

|

902人浏览过

|

来源于php中文网

原创

mysql优化

AI角色脑洞生成器
AI角色脑洞生成器

一键打造完整角色设定,轻松创造专属小说漫画游戏角色背景故事

下载

  MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧。

  MySQL 服务器硬件和操作系统调节:

  1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。

  2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。

  3. 使用电池供电的RAM(注:RAM即随机存储器)。

  4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列) – 最好是RAID10或更高。

  5. 避免RAID5(注:一种存储性能、数据安全和存储成本兼顾的存储解决方案) – 确保数据库完整性的校验是要付出代价的。

  6. 将操作系统和数据分区分开,不仅仅是逻辑上,还包括物理上 – 操作系统的读写操作会影响数据库的性能。

  7. 把MySQL临时空间和复制日志与数据放到不同的分区 – 当数据库后台从磁盘进行读写操作时会影响数据库的性能。

  8. 更多的磁盘空间等于更快的速度。

  9. 更好更快的磁盘。

  10. 使用SAS(注: Serial Attached SCSI,即串行连接SCSI)代替SATA(注:SATA,即串口硬盘)。

  11. 较小的硬盘 比 较大的硬盘快,尤其是在RAID配置的情况下。

  12. 使用电池支持的高速缓存RAID控制器。 

  13. 避免使用软件磁盘阵列。 

  14. 考虑为数据分区使用固态IO卡 (不是磁盘驱动器)  – 这些卡能够为几乎任何数量的数据支持2GB/s的写入速度。

  15. 在Linux中设置swappiness的值为0 – 在数据库服务器中没有理由缓存文件,这是一个服务器或台式机的优势。 

  16. 如果可以的话,使用  noatime 和 nodirtime 挂载文件系统 – 没有理由更新访问数据库文件的修改时间。

  17. 使用 XFS 文件系统 – 一种比ext3更快、更小的文件系统,并且有许多日志选项, 而且ext3 已被证实与MySQL有双缓冲问题。 

  18. 调整 XFS 文件系统日志和缓冲变量 – 为了最高性能标准。 

  19. 在 Linux 系统中, 使用 NOOP 或者 DEADLINE IO 定时调度程序 – 同 NOOP 和 DEADLINE定时调度程序相比,这个 CFQ 和 ANTICIPATORY 定时调度程序 显得非常慢。 

  20. 使用64位的操作系统 – 对于MySQL,会有更大的内存支持和使用。 

  21. 删除服务器上未使用的安装包和守护进程 – 更少的资源占用。 

  22. 把使用MySQL的host和你的MySQL host放到一个hosts文件中 – 没有DNS查找。 

  23. 切勿强制杀死一个MySQL进程 – 你会损坏数据库和正在运行备份的程序。 

  24. 把服务器贡献给MySQL – 后台进程和其他服务能够缩短数据库占用CPU的时间。

  MySQL 配置:

  25. 当写入时,使用 innodb_flush_method=O_DIRECT 来避免双缓冲。 

  26. 避免使用 O_DIRECT 和 EXT3 文件系统 – 你将序列化所有要写入的。 

  27. 分配足够的 innodb_buffer_pool_size 来加载整个 InnoDB 文件到内存中– 少从磁盘中读取。 

  28. 不要将 innodb_log_file_size 参数设置太大, 这样可以更快同时有更多的磁盘空间 – 丢掉多的日志通常是好的,在数据库崩溃后可以降低恢复数据库的时间。 

  29. 不要混用 innodb_thread_concurrency 和 thread_concurrency 参数– 这2个值是不兼容的。 

  30. 分配一个极小的数量给 max_connections 参数 – 太多的连接会用尽RAM并锁定MySQL服务。 

  31. 保持 thread_cache 在一个相对较高的数字,大约 16 – 防止打开连接时缓慢。 

  32. 使用skip-name-resolve参数 – 去掉 DNS 查找。

  33.如果你的查询都是重复的,并且数据不常常发生变化,那么可以使用查询缓存。但是如果你的数据经常发生变化,那么使用查询缓存会让你感到失望。\

  34.增大temp_table_size值,以防止写入磁盘

  35.增大max_heap_table_size值,以防止写入磁盘

  36.不要把sort_buffer_size值设置的太高,否则的话你的内存将会很快耗尽

  37.根据key_read_requests和key_reads值来决定key_buffer的大小,一般情况下key_read_requests应该比key_reads值高,否则你不能高效的使用key_buffer

  38.将innodb_flush_log_at_trx_commit设置为0将会提高性能,但是如果你要保持默认值(1)的话,那么你就要确保数据的完整性,同时你也要确保复制不会滞后。

  39.你要有一个测试环境,来测试你的配置,并且在不影响正常生产的情况下,可以常常进行重启。

  MySQL模式优化:

  40. 保持你的数据库整理性。 

  41. 旧数据归档 - 删除多余的行返回或搜索查询。

  42. 将您的数据加上索引.

  43. 不要过度使用索引,比较与查询.

  44. 压缩文字和BLOB数据类型 - 以节省空间和减少磁盘读取次数.

  45. UTF 8和UTF16都低于latin1执行效率.

  46. 有节制地使用触发器.

  47. 冗余数据保持到最低限度 - 不重复不必要的数据.

  48. 使用链接表,而不是扩展行.

  49. 注意数据类型,在您的真实数据中,尽可能使用最小的一个.

  50. 如果其他数据经常被用于查询时,而BLOB / TEXT数据不是,就把BLOB / TEXT数据从其他数据分离出来.

  51.检查和经常优化表.

  52. 经常重写InnoDB表优化.

  53. 有时,当添加列时删除索引,然后在添加回来索引,这样就会更快.

  54. 针对不同的需求,使用不同的存储引擎.

  55. 使用归档存储引擎日志表或审计表-这是更有效地写道.

  56.  会话数据存储在缓存(memcache)的而不是MySQL中 - 缓存允许自动自动填值的,并阻止您创建难以读取和写入到MySQL的时空数据.

  57.存储可变长度的字符串时使用VARCHAR而不是CHAR - 节省空间,因为固定长度的CHAR,而VARCHAR长度不固定(UTF8不受此影响).

  58. 逐步进行模式的变化 - 一个小的变化,可以有巨大的影响.

  59.在开发环境中测试所有模式,反映生产变化.

  60. 不要随意更改你的配置文件中的值,它可以产生灾难性的影响.

  61. 有时候,在MySQL的configs少即是多.

  62.有疑问时使用一个通用的MySQL配置文件.

  查询优化:

  63. 使用慢查询日志去发现慢查询。

  64. 使用执行计划去判断查询是否正常运行。

  65. 总是去测试你的查询看看是否他们运行在最佳状态下 –久而久之性能总会变化。

  66. 避免在整个表上使用count(*),它可能锁住整张表。

  67. 使查询保持一致以便后续相似的查询可以使用查询缓存。

  68. 在适当的情形下使用GROUP BY而不是DISTINCT。

  69. 在WHERE, GROUP BY和ORDER BY子句中使用有索引的列。

  70. 保持索引简单,不在多个索引中包含同一个列。

  71. 有时候MySQL会使用错误的索引,对于这种情况使用USE INDEX。

  72. 检查使用SQL_MODE=STRICT的问题。

  73. 对于记录数小于5的索引字段,在UNION的时候使用LIMIT不是是用OR.

  74. 为了 避免在更新前SELECT,使用INSERT ON DUPLICATE KEY或者INSERT IGNORE ,不要用UPDATE去实现。

  75. 不要使用 MAX,使用索引字段和ORDER BY子句。

  76. 避免使用ORDER BY RAND().

  77。LIMIT M,N实际上可以减缓查询在某些情况下,有节制地使用。

  78。在WHERE子句中使用UNION代替子查询。

  79。对于UPDATES(更新),使用 SHARE MODE(共享模式),以防止独占锁。

  80。在重新启动的MySQL,记得来温暖你的数据库,以确保您的数据在内存和查询速度快。

  81。使用DROP TABLE,CREATE TABLE DELETE FROM从表中删除所有数据。

  82。最小化的数据在查询你需要的数据,使用*消耗大量的时间。

  83。考虑持久连接,而不是多个连接,以减少开销。

  84。基准查询,包括使用服务器上的负载,有时一个简单的查询可以影响其他查询。

  85。当负载增加您的服务器上,使用SHOW PROCESSLIST查看慢的和有问题的查询。

  86。在开发环境中产生的镜像数据中 测试的所有可疑的查询。

  MySQL 备份过程:

  87. 从二级复制服务器上进行备份。

  88. 在进行备份期间停止复制,以避免在数据依赖和外键约束上出现不一致。

  89. 彻底停止MySQL,从数据库文件进行备份。 

  90. 如果使用 MySQL dump进行备份,请同时备份二进制日志文件 – 确保复制没有中断。

  91. 不要信任LVM 快照 – 这很可能产生数据不一致,将来会给你带来麻烦。

  92. 为了更容易进行单表恢复,以表为单位导出数据 – 如果数据是与其他表隔离的。

  93. 当使用mysqldump时请使用 –opt。

  94. 在备份之前检查和优化表。

  95. 为了更快的进行导入,在导入时临时禁用外键约束。

  96. 为了更快的进行导入,在导入时临时禁用唯一性检测。

  97. 在每一次备份后计算数据库,表以及索引的尺寸,以便更够监控数据尺寸的增长。

  98. 通过自动调度脚本监控复制实例的错误和延迟。

  99. 定期执行备份。

  100. 定期测试你的备份。

  最后 101: 执行MySQL 监控: Monitis Unveils The World’s First Free On-demand MySQL Monitoring.

  英文原文:101-tips-to-mysql-tuning-and-optimization/

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

3

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

12

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

69

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

59

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

46

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

24

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

20

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

4

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

348

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 842人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号