# PoWA相關生態的安裝與介紹 PoWA是一個會向PostgreSQL系統表定期去取得資料的監控工具,如果搭配powa-web還可以在網頁產生視覺化的工具,讓你可以查看目前你資料庫的狀態,而且PoWA還可以當做中控主機,來監控其他PostgreSQL. ## 環境介紹 * 作業系統 : Centos 9 stream * 資料庫 : PostgreSQL 16 ## PoWA 相關安裝 ```shell= # dnf install $ su - root $ dnf install -y postgresql16-contrib powa_16 pg_qualstats_16 pg_stat_kcache_16 hypopg_16 pg_wait_sampling_16 pg_track_settings_16 # edit postgres.conf shared_preload_libraries='pg_stat_statements,powa,pg_stat_kcache,pg_qualstats.pg_wait_sampling' # restart postgresql $ systemctl restart postgresql-16 ``` # psql操作 ```sql= -- create database CREATE DATABASE powa ; -- connect powa \c powa -- create extension CREATE EXTENSION pg_stat_statements; CREATE EXTENSION btree_gist; CREATE EXTENSION powa; CREATE EXTENSION pg_qualstats; CREATE EXTENSION pg_stat_kcache; CREATE EXTENSION pg_wait_sampling; CREATE EXTENSION pg_track_settings; CREATE EXTENSION hypopg; -- Using with PoWA SELECT powa_qualstats_register(); SELECT powa_kcache_register(); SELECT powa_wait_sampling_register(); SELECT powa_track_settings_register(); -- create role CREATE ROLE powa SUPERUSER LOGIN PASSWORD 'powa_password'; ``` ## powa-web安裝與使用 因為目前powa_16-web還沒這個版本,所以採取使用powa_15-web,不過使用後登入時會跳出錯誤的版本問題,所以這邊我採取的方式改變powa_15-web的版本,來解決此問題. ```shell= # install web $ dnf install powa_15-web # vim # /etc/powa-web.conf # ~/.config/powa-web.conf # ~/.powa-web.conf # ./powa-web.conf servers={ 'main': { 'host': 'localhost', 'port': '5432', 'database': 'powa', 'username' : 'powa', 'password' : 'powa_password', } } cookie_secret="eagle" ``` >因為目前在linux powa-web 與 powa版本有差一版 登入時會遇到此情況, >當然還有個方式就是選擇使用pip來安裝4.2版本 ![Screenshot (8)](https://hackmd.io/_uploads/rJMOCgTtA.png) >不過在線上有人提供一種方式,就是調整powa-web的版本,修改方式如下 ```shell= # edit powa-web version # /usr/lib/python3.9/site-packages/powa/__init__.py __VERSION__ = '4.1.3' # change __VERSION__ = '4.2.3' ``` >使用方式 ```shell= # use powa-web $ powa-web ``` ## 使用畫面 圖片如果太小可以對著圖片按下右鍵另開分頁來看圖片 ### 登入畫面 > 不過登入帳號密碼是一個很詭異的方式,可以任意輸入就可以登入了,此問題可能還要翻閱資料. ![Screenshot (9)](https://hackmd.io/_uploads/BkKoeZTK0.png) ### all servers > 這邊就是顯示你目前擁有的伺服器 ![Screenshot](https://hackmd.io/_uploads/BJYPsa2FR.png) ### 總覽概述 > 這邊可以看到總體的大概資訊,當然你也可以點進你想看到database看單獨的資訊. ![Screenshot (1)](https://hackmd.io/_uploads/Bkb4sahFC.png) ### Write-Ahead Logging(WAL)activity ![Screenshot (2)](https://hackmd.io/_uploads/B1bEsanYA.png) #### WAL 介紹 PostgreSQL 的 Write-Ahead Logging (WAL) 是一種保證數據一致性和容災能力的重要機制。WAL 的核心思想是:在數據寫入磁盤之前,先將要進行的數據修改操作記錄到一個日誌文件中,這樣可以防止在系統崩潰時數據丟失。 具體來說,WAL 的工作方式如下: 1. **修改前記錄(Log Before Data):** 當數據庫中的數據被修改時,修改操作的細節首先會被記錄到 WAL 文件中。這包括數據的舊值和新值,或者是操作的類型(如插入、更新或刪除)。這些日誌條目會被寫入 WAL 緩存,並定期刷新到磁盤上。 2. **數據修改:** 一旦 WAL 條目被寫入磁盤,數據庫就可以在數據頁面上應用實際的修改。這樣,即使在數據還未被實際寫入磁盤時發生崩潰,由於 WAL 已經記錄了這些修改,可以通過重放日誌來恢復數據。 3. **重放日誌(Replay):** 如果系統發生崩潰,當系統重新啟動時,PostgreSQL 會自動檢查 WAL 文件,並將所有未完成的修改操作重新應用到數據庫中,以確保數據庫的一致性和完整性。 4. **備份和恢復:** WAL 還支持流式備份和恢復。PostgreSQL 可以將 WAL 條目流式傳輸到備份伺服器,這樣在主伺服器發生故障時,備份伺服器可以通過這些 WAL 條目來保持與主伺服器的同步。 ### WAL 的優勢 - **數據一致性:** 即使在系統崩潰的情況下,WAL 也能保證數據庫的一致性,防止數據丟失。 - **性能優化:** 因為 WAL 是順序寫入操作,相對於隨機寫入來說,磁盤操作更快,這提升了數據庫的性能。 - **支持高可用性:** 通過使用 WAL 日誌進行備份和恢復,PostgreSQL 支持高可用性和故障切換。 總之,WAL 是 PostgreSQL 中關鍵的數據保護和恢復機制,對於數據庫的穩定性和可用性具有至關重要的作用。 ### 背景作業相關 ![Screenshot (3)](https://hackmd.io/_uploads/rJbEoT3F0.png) ### 資料庫物件 ![Screenshot (4)](https://hackmd.io/_uploads/BJZVi63K0.png) ### 系統資源 ![Screenshot (5)](https://hackmd.io/_uploads/B1-4ipntA.png) ### 等待的事件 ![Screenshot (6)](https://hackmd.io/_uploads/Bkb4op2KA.png) ### 還可以看到執行的SQL ![Screenshot (7)](https://hackmd.io/_uploads/B1E3A6hKA.png) ## 提醒 如果進入畫面看到資料庫為什麼這麼少,是因為沒有顯示的資料庫目前還沒有被監控的資料,可以去資料庫測試一下,等一下就會看到了。 ## 總結 PoWA是一個很好的監控工具,不過需要瞭解很多PostgreSQL的知識,才能看懂裡面相關的數值.