美文网首页程序员
高性能MySQL第八章 读书笔记

高性能MySQL第八章 读书笔记

作者: yellowone | 来源:发表于2020-08-05 08:21 被阅读0次

    第八章 优化服务器设置

    • 服务器的设置并不能一概而论,也不能依靠网上所谓的优化脚本,默认的配置就已经很好了,需要调整的是InnoDB的缓存池大小和文件日志大小(原来的配置是让mysql在性能一般的机器也能正常运行,太小了)
    • 配置有全局的和线程的,但是注意,并不是所有的配置一旦设置就能生效,每个配置都有自己重新生效的时机。
    • 有些可配置的内存也不是越大越好的,配置越大会导致内存消耗过快而频繁内存交换降低性能。
    • 调整配置应该放在最后,而且除非是真的遇到了只有调整配置能解决的问题才去调整配置,否则应该把重心放在查询语句和schema中。
    • innodb的缓存池尽可能大确实是能提高效率,但是也要为其他的一些内存损耗留下一些空间。分配太多了是一件很糟糕的事情。但是放置mysql中服务器的内存要是还有较多空间没有利用的,那适当压榨一下很好的。
    • 32位Linux内核通常限制任意进程可用的内存存量在2.5GB到2.7GB之间。
    • mysql每个连接也会使用到内存,每条连接也有可能会使用到大量的内存,可以监控服务器的内存波动,避免内存不足。
    • innodb缓存池比其他东西更需要内存,它不单单缓存索引,还缓存行的数据,自适应哈希索引,插入缓存,锁,以及其他的内部数据结构。innodb还使用缓冲池来帮助延迟写入,合并多个写出操作。分配很多内存也会导致预热和关闭会花费较长时间。
    • MySQL会有一个线程池,来快速响应新的连接。
    • innodb会有自己的表缓存,叫数据字段,一张4kb或者更多,如果表太多(数千或数万张),也可能占用大量内存。
    • innodb利用日志把随机IO 变成顺序io。
    • 日志文件是循环写入的,写到日志的尾部之后会回到头部继续写入。
    • 整体日志文件的大小受控于innodb_log_file_size 和innodb_log_files_in_group 两个参数,在高性能服务器上,至少需要几百M甚至上G的日志文件。
    • 如果日志过大,也会影响数据库重新启动的时间。
    • Innodb将内存中的日志缓存刷到磁盘的时候,会先使用一个锁锁住缓冲区,刷新到所需要的位置,然后移动剩下的条目到缓冲区的前面。
    • innodb_flush_log_at_trx_commit变量可以用来控制mysql的日志刷新行为

    0:日志每秒刷新,但是在事务提交时不做任何处理,1,每次提交都刷新,这是最安全的也是默认的。2,每次事务提交都把日志缓存写到日志文件,再由innodb每秒做一次刷新。

    • 把日志缓冲写到文件日志里:大部分操作系统中只是简单的把数据从InnoDB的内存缓冲转移到了操作系统的缓存,并没有真正写入磁盘。
    • 把日志刷新到持久化存储是Innodb请求操作系统吧数据刷出到缓存,并确认写入磁盘,是阻塞的。
    • 这就是为什么2跟0之间的差别。2就算mysql进程停止了,机器只要正常还是能把日志刷到磁盘里的。
    • 如果是类UNIX操作系统,并且有RAID控制器,关于如何打开和刷新日志以及数据文件的innodb_flush_method建议使用0 _DIRECT,利用这个配置选项可以关闭操作系统缓存,如果不是,选择默认。
    • Innodb用双写缓冲来避免页没有写完整导致的数据损坏。双写缓冲是表空间一个特殊的保留区域,本质上是最近写回的页面的备份拷贝。当Innodb从缓冲池刷新页面到磁盘时,首先把它们写到双写缓冲中。可配置innodb_doublewrite为0去关闭双写缓冲。
    • read_only配置可以让备库只接受从主库传输过来的变更。

    相关文章

      网友评论

        本文标题:高性能MySQL第八章 读书笔记

        本文链接:https://www.haomeiwen.com/subject/xmovrktx.html