深入理解缓冲区(十三)
来源:互联网 发布:java 线程池面试 编辑:程序博客网 时间:2024/05/29 03:26
4.2 PostgreSQL日志缓冲区管理
前述介绍的buf,是一种双向的缓存,即“向外存发出读请求à读入数据到缓冲区”和“缓冲区中的数据被更新à写出到外存”。
在PostgreSQL系统中,还存在一种单向缓存,是REDO日志的缓存,此种缓存,是系统启动时读日志文件建立的,在运行过程中,缓存数据库引擎操作产生的RODO日志数据,然后按照一种规则,不断从内存刷出数据到外存,方向是从内到外,所以是单向缓存。
4.2.1 日志缓存相关代码
日志缓存的初始化
调用XLOGShmemInit函数完成日志缓存区的初始化工作(主要是在共享内存中分配一块区域-- XLogCtl,以当作日志缓存使用)。
主要代码
主要函数
作用
调用关系
XLogInsert
把内存中生成的日志信息插入到日志缓存中
XLogInsert[1]
WriteZeroPageXlogRec
WriteTruncateXlogRec
createdb
movedb
movedb
remove_dbtablespaces
ginInsertValue
writeListPage
ginHeapTupleFastInsert
shiftList
createPostingTree
ginbuild
ginUpdateStats
xlogVacuumPage
ginDeletePage
gistbuild
gistplacetopage
gistplacetopage
gistnewroot
gistbulkdelete
gistContinueInsert
gistxlogInsertCompletion
heap_insert
heap_delete
heap_lock_tuple
heap_inplace_update
log_heap_cleanup_info
log_heap_clean
log_heap_freeze
log_heap_update
log_newpage
CreateMultiXactId
WriteMZeroPageXlogRec
_bt_insertonpg
_bt_split
_bt_newroot
_bt_getroot
_bt_log_reuse_page
_bt_delitems_vacuum
_bt_delitems_delete
_bt_pagedel
write_relmap_file
DefineSequence
AlterSequenceInternal
nextval_internal
do_setval
LogCurrentRunningXacts
LogAccessExclusiveLocks
RelationCreateStorage
RelationTruncate
CreateTableSpace
DropTableSpace
EndPrepare
RecordTransactionCommitPrepared
RecordTransactionAbortPrepared
AssignTransactionId
RecordTransactionCommit
RecordTransactionAbort
CreateCheckPoint
XLogPutNextOid
RequestXLogSwitch
XLogReportParameters
pg_stop_backup
XLogWrite
调用write函数()把日志缓存的内容刷出到外存。调用XLogFileClose和XLogFileOpen进行文件切换(日志文件写满了,关掉当前日志文件,打开下一个日志文件写入日志信息)
XLogWrite
XLogInsert
AdvanceXLInsertBuffer
XLogFlush
XLogBackgroundFlush
XLogFlush
把日志缓存的内容刷出到外存(调用XLogWrite)
XLogFlush
FlushBuffer
WriteTruncateXlogRec
write_relmap_file
SlruPhysicalWritePage
RelationTruncate
EndPrepare
RecordTransactionCommitPrepared
RecordTransactionAbortPrepared
RecordTransactionCommit
xact_redo_commit
CreateCheckPoint
AdvanceXLInsertBuffer
写如日志时,空余空间不够,则预先分配一块buf(方式是:先调用XLogWrite刷出一部分日志,然后把日志信息放入日志缓存)
AdvanceXLInsertBuffer
XLogInsert(3次调用)
CreateCheckPoint
[1] 通过调用关系,可以看到,数据库中有什么样的操作需要写日志。几乎所有操作,只要是需要被恢复的(和ACID特性紧密相关),都需要构造好要恢复的数据,然后调用XLogInsert把信息保存在日志中
- 深入理解缓冲区(十三)
- 深入理解缓冲区(一)
- 深入理解缓冲区(二)
- 深入理解缓冲区(三)
- 深入理解缓冲区(四)
- 深入理解缓冲区(五)
- 深入理解缓冲区(六)
- 深入理解缓冲区(七)
- 深入理解缓冲区(八)
- 深入理解缓冲区(九)
- 深入理解缓冲区(十)
- 深入理解缓冲区(十一)
- 深入理解缓冲区(十二)
- 深入理解缓冲区(十四)
- 深入理解缓冲区(十五)
- 深入理解缓冲区(十六)
- 深入理解缓冲区(十七)
- 深入理解缓冲区(十八)
- mongodb的jdbc学习之添删改查速度测试--mongodb.2.6.5.jar
- 64位下IIS配置调用Microsoft.Jet.OLEDB.4.0的asp.net网络应用
- 结构模式之适配器模式注解
- WPF使用 ObjectDataProvider 为方法作为绑定数据源
- TechED2011
- 深入理解缓冲区(十三)
- 罗素说工作
- SQL一些特色
- 《Google Android开发入门与实战》5 ---- 创建、运行和调试Android程序
- ABI/EABI/OABI
- 在windows中安装protocol buffer for python
- .Net代码生成器
- 10个有趣强大的 jQuery导航教程/插件分享
- SQLServer中将时间戳转换为时间格式