com.操操|h视频在线观看免费网站|亚洲国产成人在线|国精产品999免费|A片级片免费播放

當前位置: fuhua-pet->考試 > PostgreSQL技術大講堂 - 第23講:緩沖區管理器

PostgreSQL技術大講堂 - 第23講:緩沖區管理器

2023-07-21作者:firstyuding來源:www.lgjxsb.com

PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。

第23講:緩沖區管理器

內容1 : 緩沖區概述

內容2 : 緩沖區管理器結構

內容3 : 緩沖區管理器鎖

內容4 : 緩沖區管理器如何工作

內容5 : 環形緩沖區

內容6 : 臟塊寫


緩沖區概述

· 緩沖區結構(存放各種類型的數據塊)

    數據文件頁—表和索引塊

    可用空間地圖塊

    可見性地圖塊

    緩沖區數組索引--buffer_ids

· Buffer Tag結構

    RelFileNode (分別為表對象oid、數據庫oid、表空間oid)

    頁面的fork number (分別為0、1、2)

    頁面number 示例:

    緩沖區標記{(16821、16384、37721)、0、7}

    1、標識第七個塊中的頁

    2、其關系的OID和fork號分別為37721和0(0即為存放表數據的文件)

    3、該塊存放在OID為16384的數據庫中,表空間的OID為16821

· Backend進程讀數據塊到緩沖區

· 寫臟塊

    下面進程工作時會導致臟塊寫:

    · Checkpointer

    · background writer


緩沖區管理器結構

· 管理器結構

· 第一層(Buffer Table)

    在這一層內置的hash函數將buffer_tags映射到插槽,插槽中記錄了buffer_tags和描述層的buffer_id的映射關系。

· 第二層(Buffer Descriptor)

    描述層包含了很多重要的信息,包括buffer_tag與緩沖池插槽id的映射關系,訪問次數統計,鎖等信息。

    · Tag

     · buffer_id

     · refcount (被進程訪問過一次加一,被時鐘掃描過后減一,為零時可用)

     · usage_count

     · context_lock and io_in_progress_lock

     · Flags

     dirty bit

             valid bit

         io_in_progress bit

     · freeNext

· Buffer Descriptors Layer (Loading the first page)

    先請求一個緩沖區空間,buffer table層把描述層的buffer_id與buffer_tag進行映射;然后在描述層把buffer_tag與緩沖區id進行映射;最后把數據塊讀到相應的緩沖區槽中。

· 第三層(Buffer Pool)

    緩沖池是存儲數據文件頁(如表和索引)的簡單數組。緩沖池數組的索引稱為buffer_ids。

    緩沖池被分割成大小為8 KB的插槽,等于頁面大小。因此,每個槽可以存儲整個頁面。緩沖區管理器鎖

· Buffer Manager Locks

    緩沖區管理器為許多不同的目的使用許多鎖

    鎖是緩沖區管理器同步機制的一部分;它們與任何SQL語句和SQL選項都不相關

· Buffer Table 層的鎖

    BufMappingLock保護整個緩沖表的數據完整性。它是一個輕量鎖,可以在共享和獨占模式下使用。在緩沖區表中搜索條目時,后端進程保存共享的BufMappingLock。當插入或刪除條目時,后端進程持有獨占鎖。

· Buffer Descriptor 層鎖

    每個緩沖區描述符使用兩個輕量級鎖

        · content_lock

        · io_in_progress_lock

· content_lock

content_lock是一種典型的強制訪問限制的鎖。它可以用于共享和獨占模式。

當執行下列操作之一時,將獲取獨占內容鎖:

· dml操作

· 物理刪除元組或壓縮存儲頁上的可用空間(vacuum和HOT處理)

· 凍結存儲頁中的元組

· io_in_progress_lock

    io_in_progress鎖用于等待緩沖區上的I/O完成。當PostgreSQL進程從存儲器加載/寫入頁面數據時,該進程在訪問存儲器時持有相應描述符的獨占io_in_progress鎖。

· spinlock

    下面顯示如何固定緩沖區描述符:

    1、獲取緩沖區描述符的自旋鎖。

    2、將其refcount和usage_count的值增加1。

    3、松開旋轉鎖。

    下面顯示如何將臟位設置為“1”:

    1、獲取緩沖區描述符的自旋鎖。

    2、使用按位操作將臟位設置為“1”。

    3、松開旋轉鎖。


緩沖區管理器如何工作

· 訪問已存放在緩沖區中的數據塊

· 加載數據塊到空的緩沖池插槽

· 加載數據塊到一個需要釋放的緩沖池插槽

· 緩沖區塊替換機制

    替換頁面算法

        · 時鐘掃描(8.1開始及以后的版本)

        · LRU算法(8.1以前的版本)

· 時鐘掃描算法

    緩沖區描述符顯示為藍色或青色框,框中的數字顯示每個描述符的使用計數,每掃描一次則減一,緩沖區每被訪問過一次則加一。


Ring Buffer

· Ring Buffer

· Bulk-reading

    需要大塊的緩沖池時,如果掃描緩沖池時其大小超過(共享緩沖區/4)四分之一的空間時,還沒有找到足夠的緩沖池,則分配256KB環形緩沖區。

· Bulk-writing

    執行下面列出的SQL命令時。在這種情況下,環緩沖區大小為16MB。

        COPY FROM command.

        CREATE TABLE AS command.

        CREATE MATERIALIZED VIEW or REFRESH MATERIALIZED VIEW command.

        ALTER TABLE command.

· Vacuum-processing

    當自動真空機進行真空處理時。在這種情況下,環緩沖區大小為256 KB。


臟塊寫

· Flushing Dirty Pages

    檢查點進程和后臺寫入進程將臟頁刷新到存儲區,檢查點與后臺寫進程分離。

    檢查點進程將檢查點記錄寫入WAL段文件,并在檢查點啟動時刷新臟頁。

    后臺寫進程的作用是減少檢查點密集寫的影響。后臺寫進程持續一點一點地刷新臟頁,對數據庫活動的影響最小。

    默認情況下,后臺寫入程序每200毫秒喚醒一次(由bgwriter_delay定義),并最多刷新為100頁(由bgwriter_lru_maxpages 定義)


共享池緩沖區參數設置

· 共享緩沖區相關參數

    shared_buffers參數設置 show shared_buffers;

    Alter system set shared_buffers=256M;

    wal_buffers參數設置 show wal_buffers;

    Alter system set wal_buffers =4M;

    effective_cache_size 參數設置 show effective_cache_size;

    提供可用于磁盤高速緩存的內存量的估計值。它只是一個建議值,而不是確切分配的內存或緩存大小。它不會實際分配內存,而是會告知優化器內核中可用的緩存量。在一個索引的代價估計中,更高的數值會使得索引掃描更可能被使用,更低的數值會使得順序掃描更可能被使用。在設置這個參數時,還應該考慮PostgreSQL的共享緩沖區以及將被用于PostgreSQL數據文件的內核磁盤緩沖區。默認值是4GB。

以上就是【PostgreSQL從小白到專家】第23講 - 緩沖區管理  的內容,歡迎一起探討交流釘釘交流群:35,82,24,60,往期視頻及文檔內容聯系CUUG

  • 神舟通用數據庫
  • 實時數倉 Hologres
  • 天翼云數據庫TeleDB
  • 圖數據庫gStore
  • 星瑞格SinoDB數據庫管理系統
  • 虛谷xugudb數據庫
  • 云和恩墨MogDB數據庫
  • PostgreSQL 18 測試版Beta 1 發布,新功能新特性!
  • PostgreSQL技術大講堂 - 第89講:重講數據庫完全恢復
  • PostgreSQL技術大講堂 - 第90講:重講數據庫不完全恢復
  • PostgreSQL證書有效期是幾年
  • 學PostgreSQL技術,考工信部人才交流中心PG認證證書
  • OCP認證指南:學什么內容、考什么內容
  • 2025年5月30日證書,恭喜CUUG張同學通過OCM19c認證
  • CUUG入選2025年首批IITC工信人才崗位能力評價業務信息技術應用創新領域合作機構
  • PostgreSQL技術大講堂 - 第92講:重講流復制原理
  • 河北建筑工程學院與北京優技教育(CUUG)達成產教整合校企合作
  • 推薦哪一家PostgreSQL認證?來看看工信部直屬人才交流中心的PG認證
  • 信創PostgreSQL培訓考試認證中心 -- 工信部人才交流中心唯一指定
  • 6月6日證書 - 工信部人才交流中心PostgreSQL中級PGCP高級PGCM認證
  • PostgreSQL從入門到精通教程- 第93講:重講pg流復制安裝部署
  • PostgreSQL認證怎么選?PGCP中級認證PGCM高級認證
  • PostgreSQL數據庫培訓+認證+考試 - 工業和信息化部人才交流中心
  • 騰訊云TCCA認證考試報名 - TDSQL數據庫交付運維工程師(PostgreSQL版)
  • 騰訊云TCCP認證考試報名 - TDSQL數據庫交付運維高級工程師(MySQL版)
  • 騰訊云TCCP認證考試報名 - TDSQL數據庫交付運維高級工程師(PostgreSQL版)
  • OCM考試多少分及格?看看CUUG 張同學Oracle 19c OCM成績單
  • 2025年5月安同學PostgreSQL PGCP中級認證證書
  • 高校信創數據庫人才培養創新與變革暨天職師大數據庫教學平臺國產化替代院長峰會
  • 六六大順!2025年6月6日李同學OCP 19c認證證書
  • Apache HBase數據庫
  • IBM Informix數據庫
  • MySQL 8.0 OCP認證考試題庫持續更新
  • 海若向量數據庫HaiRuo VectorDB
  • 瀚高數據庫HIGHGO
  • 鴻蒙PC正式發布,有望加速數據庫國產化進程
  • 巨杉數據庫SequoiaDB
  • 萬里數據庫GreatDB
  • PostgreSQL 17.5、16.9、15.13、14.18 和 13.21 發布!
  • 2025年5月陳同學PostgreSQL PGCP中級認證證書
  • 2025年5月份工信部人才交流中心PostgreSQL認證證書
  • 2025年5月胡同學PostgreSQL PGCP中級認證證書
  • 2025年5月李同學PostgreSQL PGCM高級認證證書
  • 2025年5月李同學PostgreSQL PGCP中級認證證書
  • 2025年5月王同學PostgreSQL PGCP中級認證證書
  • 2025年5月趙同學PostgreSQL PGCM高級認證證書
  • PostgreSQL技術大講堂 - 第91講:重講表空間恢復
  • PostgreSQL認證培訓考試中心,及證書查詢網址
  • PostgreSQL相比Oracle有哪些優勢
  • 騰訊云TCCA認證考試報名 - TDSQL數據庫交付運維工程師(MySQL版)