39 | 数据库参数设置优化,失之毫厘差之千里
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了MySQL数据库参数设置的优化对性能提升的重要性。首先强调了深入了解MySQL配置参数的必要性,指出过大的内存设置和过快的数据刷新会带来新的问题。文章详细介绍了MySQL的体系结构,包括客户端连接器、Server层、存储引擎和数据存储层,并描述了查询语句和更新语句的执行流程以及内存调优的重要性。针对InnoDB存储引擎,文章重点介绍了InnoDB Buffer Pool的优化方法,包括调整IBP大小、划分缓冲池实例、设置读写线程数量以及调整日志缓冲池大小和日志文件大小等参数。此外,还提出了评估key buffer设置是否合理的方法。总的来说,本文通过深入讲解MySQL的体系结构和内存调优的重要性,为读者提供了优化数据库参数设置的重要指导。
《Java 性能调优实战》,新⼈⾸单¥59
全部留言(21)
- 最新
- 精选
- 张学磊通过在内存中维护一个链表,并使用LRU(最近最少使用)算法淘汰非热点数据
作者回复: 对的,MySQL基于LRU算法来实现淘汰非热点数据,但与我们熟悉的LRU算法不同的是,MySQL新增了一个midpoint insertion startegy策略,就是默认情况下,读取到的新页并不是直接放入的LRU列表的首部,而是LRU列表长度的5/8处,目的是为了避免由于一些不常查询SQL偶尔一次查询就把之前热点数据淘汰的情况。
2019-08-20441 - 晓杰mysql的缓冲池(buffer_pool)使用改进版的lru算法来缓存数据,如果使用传统的lru算法,会存在预读失效和缓冲池污染的问题,为了解决预读失效问题,mysql将lru分为新生代和老生代,为了解决缓冲池污染的问题,引入老生代停留时间窗口,只有大于设置的值,才能加入新生代头部
作者回复: 解释的比我全面,赞
2019-08-2121 - Mr.wang刘老师,您可以详细讲一下redolog和binlog吗,以后他们的使用场景吗?
作者回复: redo log 是 InnoDB 存储引擎层的日志,主要记录的是该引擎的数据变更记录,有了redo log,当数据库发生宕机重启后,可通过redo log将未落盘的数据恢复,即保证已经提交的事务记录不会丢失。 而binlog 属于逻辑日志,属于server层的日志,可以记录各个存储引擎的数据变更记录,是事务提交之后的数据变更日志。 redo log可以作为异常down机或者介质故障后的数据恢复使用,而binlog可以作为误删数据恢复数据使用, binlog日志还用于主从数据库的数据同步。
2020-03-1216 - 许童童我来回答一下思考题: InnoDB 的缓存淘汰策略是分代的,分为老年代和新生代,大致是7:3,新数据总是先加入到新生代,如果在一定时间内有被再次查询,才会进入到老年代。老年代和新生代内部都是LRU算法来淘汰缓存页的。
作者回复: 👍
2019-08-2013 - 晓杰mysql8.0已经没有用查询缓存了
作者回复: 是的,MySQL8.0版本已经不支持查询缓存,我们文中也提到了其中的弊端。MySQL官方建议使用服务器端使用缓存或ProxySQL作为中间缓存。
2019-08-2125 - LWIBP通过LRU链表管理热点数据和淘汰非热点数据,LRU本身分为两大区域,young区域和old区域,热点数据在young区,非热点数据在old区。其实LRU的划分还更细致,young区还划分成几个不同的区域。
作者回复: 👍
2019-08-205 - -W.LI-老师好!问个问题,这些IO操作,是同步阻塞,还是同步非阻塞啊?
作者回复: 有不同的策略,可以实现同步和异步
2019-08-2023 - DY老师,你好。有个问题请教下。select id from order_detail where order_id between 5000 and 10000;这种sql根据索引查询,为什么当条件是=时不回表,是区间段时就回表。非聚簇索引的叶子结点存放的不是主键吗?怎么索引查询区间段时就回表了
作者回复: 这个操作不会引起回表
2019-09-113 - 张德记得好像是lru算法 新旧比例好像是5比3
作者回复: 对的
2019-09-03 - 晓杰老师,redo log和bin log好像不是在更新语句提交事务成功就刷新到磁盘的。
作者回复: redo log是根据innodb_flush_log_at_trx_commit参数来设置刷新到磁盘的策略。
2019-08-21