高性能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