<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # <span style="font-size:15px">**進程結構** </span> 從下面的體系結構圖可以看出來,PG使用經典的C/S架構,進程架構。在服務器端有主進程、服務進程、子進程、共享內存以及文件存儲幾大部分。 ![](https://img.kancloud.cn/c5/62/c562e0e827a4220e61cdb6bfda0d1598_1292x590.png) ``` SIS3.0.60.0 ~ # ps aux | grep postgres daemon 8384 0.0 0.1 384180 21920 ? Ss Nov10 0:10 /home/fantom/party/pgsql/bin/postmaster -D /data/pgsql/ --config-file=/etc/postgresql-13/postgresql.base.conf daemon 8489 0.0 0.0 226608 1716 ? Ss Nov10 0:00 postgres: logger daemon 8607 0.0 0.3 384348 36544 ? Ss Nov10 0:00 postgres: checkpointer daemon 8608 0.0 0.0 384316 3972 ? Ss Nov10 0:01 postgres: background writer daemon 8609 0.0 0.0 384180 5920 ? Ss Nov10 0:02 postgres: walwriter daemon 8610 0.0 0.0 384912 2828 ? Ss Nov10 0:02 postgres: autovacuum launcher daemon 8611 0.0 0.0 229788 2488 ? Ss Nov10 0:07 postgres: stats collector daemon 8612 0.0 0.0 384724 2392 ? Ss Nov10 0:00 postgres: logical replication launcher ``` **postmaster** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;當PG數據庫啟動時,首先會啟動Postmaster主進程。這個進程是PG數據庫的總控制進程,負責啟動和關閉數據庫實例。實際上Postmaster進程是一個指向postgres命令的鏈接。 ``` SIS3.0.60.0 ~ # ll /home/fantom/party/pgsql/bin/postmaster lrwxrwxrwx 1 daemon daemon 8 May 25 14:21 /home/fantom/party/pgsql/bin/postmaster -> postgres* ``` &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;當用戶和PG數據庫建立連接時,要先與Postmaster進程建立連接,此時客戶端進程會發送身份驗證消息給Postmaster主進程,Postmaster主進程根據消息進行身份驗證,驗證通過后,Postmaster主進程會fork出一個會話服務進程為這個用戶連接服務。可以通過`pg_stat_activity`表來查看服務進程的pid ``` sip=# select pid,usename,client_addr,client_port from pg_stat_activity; pid | usename | client_addr | client_port --------+----------+-------------+------------- 43796 | sipadmin | 127.0.0.1 | 45431 25859 | sipadmin | 127.0.0.1 | 32942 23895 | sipadmin | 127.0.0.1 | 56456 ... (26 rows) ``` **background writer** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BgWriter進程是把共享內存中的臟頁寫到磁盤上的進程。它的作用有兩個:一是定期把臟數據從內存緩沖區刷出到磁盤中,減少查詢時的阻塞;二是PG在定期作檢查點時需要把所有臟頁寫出到磁盤,通過BgWriter預先寫出一些臟頁,可以減少設置檢查點(CheckPoint,數據庫恢復技術的一種)時要進行的IO操作,使系統的IO負載趨向平穩。可以通過postgresql.conf文件中以"bgwriter\_"開頭配置參數來控制 ``` [root@izwz91quxhnlkan8kjak5hz ~]# cat /www/server/data/postgres/postgresql.conf | grep bgwriter_ #bgwriter_delay = 200ms # 10-10000ms between rounds #bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables #bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round #bgwriter_flush_after = 512kB # measured in pages, 0 disables ``` **logger** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Logger系統日志進程通過postmaster進程、服務進程和其余輔助進程收集所有的stderr輸出,并記錄到日志文件中 ``` #logging_collector = off # 是否開啟日志收集器,當設置為on時啟動日志功能;否則,系統將不產生系統日志輔助進程。 # These are only used if logging_collector is on: #log_directory = 'log' # 輸出日志目錄 #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 文件命名規則 #log_file_mode = 0600 # 日志文件的創建模式, #log_rotation_age = 1d # 自動輪轉日志文件 #log_rotation_size = 10MB # 配置日志文件大小,當前日志文件達到這個大小時會被關閉,然后創建一個新的文件來作為當前日志文件 ``` **checkpointer** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;檢查點是系統設置的事務序列點,設置檢查點保證檢查點前的日志信息刷到磁盤中。相關參數如下: ``` [root@izwz91quxhnlkan8kjak5hz ~]# cat /www/server/data/postgres/postgresql.conf | grep checkpoint #checkpoint_timeout = 5min # 生成檢查點的最大的間隔時間 #checkpoint_completion_target = 0.5 # 參數表示checkpoint的完成目標,系統默認值是0.5,也就是說每個checkpoint需要在checkpoints間隔時間的50%內完成 #checkpoint_flush_after = 256kB # measured in pages, 0 disables #checkpoint_warning = 30s # 0 disables #log_checkpoints = off ``` **WalWriter** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;預寫式日志WAL進程(Write Ahead Log,也稱為Xlog),預寫日志可以保證數據的完整性;在修改數據之前,數據庫會將修改操作記錄到磁盤中。這樣就不必擔心數據未持久化到磁盤導致數據丟失。如果數據庫宕機,重啟后數據庫會讀取WAL日志最后一部分重新執行,將數據庫恢復為宕機時的狀態。WAL日志保存在`$PGDATA/pg_wal`目錄下(在postgresql10之前,是存儲在pg_xlog目錄下) **autovacuum launcher** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;自動垃圾回收進程。在PostgreSQL中,對數據進行UPDATE或者DELETE操作后,數據庫不會立即刪除舊版本的數據,而是標記為刪除狀態。當事務提交后,舊版本的數據已經沒有價值了,數據庫需要清理垃圾數據騰出空間,而清理工作就是AutoVacuum進程進行的。相關參數如下: ``` [root@izwz91quxhnlkan8kjak5hz postgres]# cat /www/server/data/postgres/postgresql.conf | grep autovacuum #autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem #autovacuum = on # 是否啟動系統自動清理功能,默認值為on #log_autovacuum_min_duration = -1 # 在規定時長內未完成的vacuum予以記錄日志,-1表示禁用,0表示所有的,大于0僅記錄超過時間的 #autovacuum_max_workers = 3 # autovacuum最大線程數 #autovacuum_naptime = 1min # vacuum的間隔時間 #autovacuum_vacuum_threshold = 50 # 達到DML操作(增刪改)的最小行數則vacuum #autovacuum_vacuum_insert_threshold = 1000 # 達到最小新增行數則vacuum #autovacuum_analyze_threshold = 50 # 激活自動analyze操作的最小行數,analyze有利于對SQL語句進行更精準的plan(這是由于explain用到的pg_class列reltuples and relpages are not updated on-the-fly) #autovacuum_vacuum_scale_factor = 0.2 # 表示autovacuum的vacuum操作所需的變更量閾值,當這個表的update/delete的tuple總數大于(pg_class.reltuples*autovacuum_vacuum_scale_factor+autovacuum_vacuum_threshold)時, 觸發vacuum操作 #autovacuum_vacuum_insert_scale_factor = 0.2 # fraction of inserts over table #autovacuum_analyze_scale_factor = 0.1 # 表示autovacuum的analyze操作所需的變更量閾值,當這個表的INSERT/update/delete的tuple總數大于(pg_class.reltuples*autovacuum_analyze_scale_factor+autovacuum_analyze_threshold)時, 觸發analyze操作 #autovacuum_freeze_max_age = 200000000 # 指定表上事務的最大年齡,默認為2億,達到這個閥值將觸發 autovacuum進程,從而避免 wraparound。 表上的事務年齡可以通過 pg\_class.relfrozenxid 查詢 #autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age #autovacuum_vacuum_cost_delay = 2ms # 運行一次vacuum的時長,如果超過此值則休眠然后起來接著vacuum,當autovacuum進程即將執行時,對vacuum執行cost進行評估,如果超過autovacuum_vacuum_cost_limit的值時,則延遲,這個延遲的時間值即為改成的值. #autovacuum_vacuum_cost_limit = -1 # autovacuum進程的評估閥值,-1表示使用vacuum_cost_limit值,如果在執行 autovacuum進程期間評估的cost超過autovacuum_vacuum_cost_limit,則autovacuum進程則會休眠 ``` **stats collector** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;統計信息收集進程。 **logical replication launcher** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Logical Replication屬于邏輯復制,適用于數據庫實例的部分(單個數據庫或者某些表)的復制,目前只支持表復制. # <span style="font-size:15px">**內存結構** </span> ![](https://img.kancloud.cn/da/e1/dae1dc15eb42f9e0e5ea906fac6910c4_875x513.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看