MySQL优化
1、调优思路
- 硬件优化
- 数据库设计与规划–以后再修改很麻烦,估计数据量,使用什么存储引擎
- 数据的应用–怎样取数据,SQL语句的优化
- 磁盘 IO优化
- 操作系统的优化–内核、TCP连接数量
- MySQL服务优化–内存的使用,磁盘的使用
- my.cnf 内参数的优化
- 分库分表思路和优劣
MySQL资源分配参考
| CPU资源 | 物理机内存 | 分配给系统的内存 | 分配给mysql的内存 |
|---|---|---|---|
| 系统和mysql共用 | 8G | 2G | 6G |
| 系统和mysql共用 | 16G | 4G | 12G |
| 系统和mysql共用 | 32G | 8G | 24G |
| 系统和mysql共用 | 64G | 8G | 56G |
| 系统和mysql共用 | 128G | 8G | 120G |
| 系统和mysql共用 | 以此类推 | 以此类推 | 以此类推 |
1.1 硬件优化
- CPU—— 64 位、高主频、高缓存,高并行处理能力
- 内存——大内存、主频高,尽量不要用 SWAP
- 硬盘——15000转、RAID5、raid10 。 SSD
- 网络——标配的千兆网卡,10G网卡,bond,team MySQL服务器尽可能和使用它的web服务器在同一局域网内,尽量避免诸如防火墙策略等不必要的开销
1.2 数据库设计与规划(架构上的优化)
纵向拆解: 专机专用
例:现在公司一台服务器同时负责 web、ftp、数据库等多个角色。当web服务器把cpu占满了,mysql服务也没有办法运行了。一个服务坏了,全所有服务全坏。
纵向拆解后就是:数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性。
横向拆解:当单个 MySQL数据库无法满足日益增加的需求时,可以考虑在数据库这个逻辑层面增加多台服务器,以达到稳定、高效的效果。比如:使用主从读写分离、MHA,MGR等技术。
1.3 查询优化
建表时表结构要合理,每个表不宜过大;在任何情况下均应使用最精确的类型。例如,如果ID列用int是一个好主意,而用text类型则是个蠢办法;TIME列酌情使用DATE或者DATETIME。
索引,建立合适的索引。
查询时尽量减少逻辑运算(与运算、或运算、大于小于某值的运算);
减少不当的查询语句,不要查询应用中不需要的列,比如说select * from 等操作。
减小事务包的大小;
将多个小的查询适当合并成一个大的查询,减少每次建立/关闭查询时的开销;
将某些过于复杂的查询拆解成多个小查询,和上一条恰好相反
建立和优化存储过程来代替大量的外部程序交互。
1.4 MySQL服务器物理机上磁盘 IO优化
存储mysql数据的磁盘使用raid5、raid10 、SSD固态盘 、15000转SAS盘。
将数据库目录放到一个分区上或一个磁盘上的物理分区。存储数据的硬盘或分区和系统所在的硬盘分开。
1.5 安装mysql并将数据写到独立的磁盘中
文档信息
- 本文作者:Ling He
- 本文链接:https://GoggleHe.github.io/2024/04/07/MySQL-optimization/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)