主要差异点:
backend推进日志走PG原生逻辑,不拆分mtr,在redo中对mtr涉及的多个页面统一处理(可能推多个页面)不会出现多backend因mtr读不一致的情况。startup推进日志处理mtr时统一加锁、放锁,避免backend因startup读到不一致页面
两个问题
解决:
异常场景:索引分裂on page0 page1
page0与page1不一致
解决方法
场景: startup完成了page0的挂链,但没完成page1的挂链; 这时backend0访问page0,backend1访问page1; backend0无法推进page0直到startup把两个日志都挂完(mini放锁); 拿到锁的时候,两条日志的挂链都已经完成了。
除了blockdata部分,其他就是log meta。
For scenarios in which LogIndex Tables are used, the startup processes of read-only nodes generate LogIndex records based on the received WAL metadata and mark the pages that correspond to the WAL metadata and exist in buffer pools as outdated pages. This way, WAL logs for the next LSN can be replayed. The startup processes do not replay WAL logs. The backend processes that access the page and the background replay processes replay the logs. The following figure shows how WAL logs are replayed.
startup不在回放日志,backend进程在访问页面的时候执行回放的动作。
The background replay process replays WAL logs in the sequence of WAL logs. The process retrieves modified pages from LogIndex Memtables and LogIndex Tables based on the LSN of a page that you want to replay. If a page exists in a buffer pool, the page is replayed. Otherwise, the page is skipped.
The background replay process replays WAL logs generated for the next LSN of a page in a buffer pool in the sequence of LSNs. This prevents a large number of LSNs for a single page that you want to replay from being accumulated.
replay进程按照 WAL 日志的顺序重放 WAL 日志。
The backend process replays only the pages it must access. If the backend process must access a page that does not exist in a buffer pool, the process reads this page from the shared storage, writes the page to a buffer pool, and replays this page. If the page exists in a buffer pool and is marked as an outdated page, the process replays the most recent WAL logs of this page. The backend process retrieves the LSNs of the page from LogIndex Memtables and LogIndex Tables based on the value of PageTag. After the process retrieves the LSNs, the process generates the LSNs for the page in sequence. Then, the process reads the complete WAL logs from the shared storage based on the generated LSNs to replay the page.