高性能MySQL
date: 2022-01-13
1~2章
mysql历史,基准测试
3~7章
较为常用,可以当指导手册。(数据类型,sql编写,简单的调优方式)
8~16章
服务调优,不常用,但是需要时候可以翻一下。
第七章: 高级特性
触发器:行级别的触发器,一次事件只有一个触发器,好坏参半。
存储过程:可以访问到一些需要权限的数据,但是消耗也大,编写麻烦。
变量: 在许多地方可以使用 x:=xxx 赋值,字段值互换的sql用这个效率很高。
排序规则:
utf8mb4_general_ci ( ci即case-insensitive,不区分大小写。没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致,但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。另外,在比较和排序的时候速度更快。)
utf8mb4_bin (将字符串每个字符用二进制数据编译存储,区分大小写,而且可以存二进制的内容)
utf8mb4_unicode_ci ( 不区分大小写,基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法,所以兼容度比较高,但是性能不高。) 全文索引:按比重建立索引,单词出现越少,比重越大。 但是效率不高,非常慢时建议使用搜索引擎。
第八章:
不要盲目跟从网上建议去配置系统,应对实际场景来做基准测试。
配置工作: 建议常用的放在同一个地方且格式也一样。 有时要考虑效益跟时间花费的比例。
缓冲池配置 (约等于) = (服务器总内存 - 操作系统内存以及其他应用内存 - MySQL自身内存 - 缓存日志内存 - 其他缓冲内存)/ 105%
合理思考内存分配问题,需要考虑服务自身需要的内存,MySQL查询时需要的内存,查询连接保持需要的内存。
第九章:
mysql 的性能瓶颈多数在于硬件
固态硬盘和PCIe 都会提交性能
考虑使用硬件前要考虑是否适合当前场景,如读多写少 (闪存), 写多读少RAID (独立硬盘冗余阵列)
mysql 存储时的磁盘数据交互,DNS check, TCP连接丢包,操作系统配置[线程调度策略,缓存策略...] 都会影响到性能
IO 密集型 : CPU 可能没有充分利用,但是 I/O 利用率几乎100% (大型文件传输) CPU 密集型 : I/O 可能没有充分利用,但是 CPU 利用率几乎100% (计算圆周率后1千位) ext2/ext3/ext4 -> unix 的文件系统
10 ~ 16 章:
主要是讲解 mysql 服务层面出现会出现的问题,以及一些解决思路。
高可用时候的配置,以及一些工具。
Last updated