MySQL调优的方法,理论调优!

很长时间没更新了,趁着午休更新一波,昨天在看MySQL的书籍的时候,自己整理了一些关于MySQL的调优方法,具体可行度,还是得在工作中细细体会。
有些技巧适合特定的安装环境,但是思路是相通的。我已经将它们分成了几类以帮助你理解。
Mysql 监控
1、有足够的物理内存,能将整个InnoDB文件加载到内存里 —— 如果访问的文件在内存里,而不是在磁盘上,InnoDB会快很多。

2、全力避免 Swap 操作 — 交换(swapping)是从磁盘读取数据,所以会很慢。

3、使用一个高级磁盘阵列 — 最好是 RAID10 或者更高。

4、磁盘速度越快越好。

5、SAS优于SATA。

6、小磁盘的速度比大磁盘的更快,尤其是在 RAID 中。

7、将使用 MySQL 的 host 和 MySQL自身的 host 都配置在一个 host 文件中 — 这样没有 DNS 查找。

Mysql 配置
1、使用 innodb_flush_method=O_DIRECT 来避免写的时候出现双缓冲区。

2、分配足够 innodb_buffer_pool_size ,来将整个InnoDB 文件加载到内存 — 减少从磁盘上读。

3、不要让 innodb_log_file_size 太大,这样能够更快,也有更多的磁盘空间 — 经常刷新有利降低发生故障时的恢复时间。

4、为 max_connections 指定一个小的值 — 太多的连接将耗尽你的RAM,导致整个MySQL服务器被锁定。

Mysql Schema优化
1、归档老数据 — 删除查询中检索或返回的多余的行。

2、在数据上加上索引。

3、不要过度使用索引,评估你的查询。

4、压缩 text 和 blob 数据类型 — 为了节省空间,减少从磁盘读数据。

5、UTF 8 和 UTF16 比 latin1 慢。

6、有节制的使用触发器。

7、为不同的需求选择不同的存储引擎。

8、将 session 数据存储在 memcache 中,而不是 MySQL 中 — memcache 可以设置自动过期,防止MySQL对临时数据高成本的读写操作。

Mysql 查询优化
1、使用慢查询日志,找出执行慢的查询。

2、使用 EXPLAIN 来决定查询功能是否合适。

3、经常测试你的查询,看是否需要做性能优化 — 性能可能会随着时间的变化而变化。

4、避免在整个表上使用count(*) ,它可能会将整个表锁住。

5、保持查询一致,这样后续类似的查询就能使用查询缓存了。

6、如果合适,用 GROUP BY 代替 DISTINCT。

7、在 WHERE、GROUP BY 和 ORDER BY 的列上加上索引。

8、保证索引简单,不要在同一列上加多个索引。

9、使用 SQL_MODE=STRICT 来检查问题。

10、索引字段少于5个时,UNION 操作用 LIMIT,而不是 OR。

11、使用 INSERT ON DUPLICATE KEY 或 INSERT IGNORE 来代替 UPDATE,避免 UPDATE 前需要先 SELECT。

12、使用索引字段和 ORDER BY 来代替 MAX。

13、避免使用 ORDER BY RAND()。

14、LIMIT M,N 在特定场景下会降低查询效率,有节制使用。

15、使用 UNION 来代替 WHERE 子句中的子查询。

16、对 UPDATE 来说,使用 SHARE MODE 来防止排他锁。

17、重启 MySQL 时,记得预热数据库,确保将数据加载到内存,提高查询效率。

18、使用 DROP TABLE ,然后再 CREATE TABLE ,而不是 DELETE FROM ,以删除表中所有数据。

19、最小化你要查询的数据,只获取你需要的数据,通常来说不要使用 *。

20、考虑持久连接,而不是多次建立连接,已减少资源的消耗。

21、基准查询,包括服务器的负载,有时一个简单的查询会影响其他的查询。

22、当服务器的负载增加时,使用SHOW PROCESSLIST来查看慢的/有问题的查询。

以上就是一些简单的更新,之前还看过一个文章,里面的东西很多,去看看MySQL教程会更好呦,欢迎关注,么么哒

猜你喜欢

转载自blog.csdn.net/yinlidong77/article/details/85612514