欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DB redo undo日志笔记

程序员文章站 2024-02-18 19:17:30
...

redo log:

1.用户对DB数据的修改过程是先将数据读取到内存缓存-->修改内存中的值-->写redo日志落盘-->返回结果给用户,由此可以看出redo日志主要作用是提高读写效率,减少对磁盘的随机写,可以合并对db中的某一数据的多次不同操作,由此可以看出如果对磁盘的随机写性能如果同顺序写差不多,redolog 存在的必要性还有多少呢?

2.redo log是循环写入覆盖的,因此在覆盖前内存中脏页必须保证已经被flush到磁盘中

3.脏页的数据指的是那些处于内存中的还没写回DB数据文件的被修改过的数据,内存中专门开辟一块空间来管理这些数据,管理的维度是分为 数据页-->数据块-->数据记录,这些脏页数据需要定期同步回db记录,刷脏的工作主要由page cleaner线程异步来执行,平常不会对用户请求有什么影响,但是当DB负载比较高内存块中的脏页数据量达到临界值就会由用户线程同步刷脏,这时候对用户访问会产生极大影响,成为性能临界点:

写道
当当前未刷脏的最老lsn和当前lsn的距离超过max_modified_age_async(71%)时,且开启了选项innodb_adaptive_flushing时,page cleaner线程会去尝试做更多的dirty page flush工作,避免脏页堆积。
当当前未刷脏的最老lsn和当前Lsn的距离超过max_modified_age_sync(76%)时,用户线程需要去做同步刷脏,这是一个性能下降的临界点,会极大的影响整体吞吐量和响应时间。
当上次checkpoint的lsn和当前lsn超过max_checkpoint_age(81%),用户线程需要同步地做一次checkpoint,需要等待checkpoint写入完成。
当上次checkpoint的lsn和当前lsn的距离超过max_checkpoint_age_async(78%)但小于max_checkpoint_age(81%)时,用户线程做一次异步checkpoint(后台异步线程执行CHECKPOINT信息写入操作),无需等待checkpoint完成。