# 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版本

>不過在線上有人提供一種方式,就是調整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
```
## 使用畫面
圖片如果太小可以對著圖片按下右鍵另開分頁來看圖片
### 登入畫面
> 不過登入帳號密碼是一個很詭異的方式,可以任意輸入就可以登入了,此問題可能還要翻閱資料.

### all servers
> 這邊就是顯示你目前擁有的伺服器

### 總覽概述
> 這邊可以看到總體的大概資訊,當然你也可以點進你想看到database看單獨的資訊.

### Write-Ahead Logging(WAL)activity

#### 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 中關鍵的數據保護和恢復機制,對於數據庫的穩定性和可用性具有至關重要的作用。
### 背景作業相關

### 資料庫物件

### 系統資源

### 等待的事件

### 還可以看到執行的SQL

## 提醒
如果進入畫面看到資料庫為什麼這麼少,是因為沒有顯示的資料庫目前還沒有被監控的資料,可以去資料庫測試一下,等一下就會看到了。
## 總結
PoWA是一個很好的監控工具,不過需要瞭解很多PostgreSQL的知識,才能看懂裡面相關的數值.