深入理解缓冲区(十三)
2011-10-18 08:37
239 查看
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 |
相关文章推荐
- 深入理解php的输出缓冲区(output buffer)
- 深入理解缓冲区(二)
- 深入理解缓冲区(八)
- 深入理解缓冲区(十一)
- 深入理解缓冲区(十六)
- 深入理解缓冲区(五)
- 深入理解缓冲区(七)
- 深入理解缓冲区---目录
- 深入理解缓冲区(九)
- 深入理解缓冲区(十七)
- SQL Server 环形缓冲区(Ring Buffer) -- RING BUFFER CONNECTIVITY 的深入理解
- 深入理解缓冲区(四)
- 深入理解缓冲区(十二)
- 深入理解缓冲区(十四)
- 深入理解PHP内核(十三)类的结构和实现
- 对C语言输入输出流和缓冲区的深入理解
- 深入理解缓冲区(一)
- 深入理解缓冲区(六)
- 深入理解缓冲区(十)
- 深入理解缓冲区(十五)