openGauss資料庫分析問題

T1YSL發表於2022-05-11

方法一 檢視日誌
檢視資料庫日誌ERROR級別以上日誌
1.先查詢資料目錄的位置,可透過ps f -u om bm檢視資料目錄,或者gs_om -t status --detail檢視資料目錄
比如資料目錄為/var/lib/opengauss/data
2.再查詢資料庫日誌目錄
cat /var/lib/opengauss/data/postgresql.conf|grep log_directory
例如預設日誌目錄為
log_directory = 'pg_log'
3.從日誌目錄過濾ERROR級別以上日誌
如果日誌檔名是按yyyy-mm-dd,則可只檢視當天的日誌
cat /var/lib/opengauss/data/pg_log/postgresql-2021-04-08*.log |grep -E 'ERROR|PANIC' |more

方法二 綜合診斷
1.先排查常見問題
1.1 檢視叢集的狀態是否都為normal正常狀態(是否有異常節點,比如同步節點掛了等)
gs_om -t status --detail
1.2 檢視流複製延遲(是否有網路問題)
或者進入主庫檢視系統檢視pg_stat_replication的檢視sender_sent_location傳送端傳送日誌位置與receiver_*_location接收端日誌是否有延遲
select * from pg_stat_replication ;
1.3 WAL及歸檔狀態檔案及磁碟空間檢查
1.4 檢視連線狀態,是否有長事務,活躍連線數佔比
select state,count(1) from pg_stat_activity group by 1;
2.檢視系統資源使用情況
2.1 使用top命令檢視各節點cpu使用情況
按“1”鍵,可檢視每個CPU核的使用率,可分別在每個節點依次檢視,判斷是主節點讀寫還是從節點讀壓力大。
主要關注cpu使用率。
2.2 使用top -H -p pid查詢omm使用者程式內佔用cpu百分比比較高的執行緒
pid可透過ps f -u omm檢視程式獲取
2.3 系統級的時間消耗細分。判斷是否整個系統是否存在負載,網路,IO,CPU上的瓶頸
select stat_name,value/1000 as "val(ms)" from dbe_perf.instance_time order by 2 desc;
2.4 系統級記憶體
select memorytype as type,memorymbytes as "val(MB)" from dbe_perf.memory_node_detail where memorymbytes>0;
2.5 共享記憶體使用率
select contextname ,parent,totalsize,freesize,usedsize
from dbe_perf.shared_memory_detail
where level=1 and totalsize>0 order by usedsize/totalsize desc;
2.6 系統級session
postgres=# \dv dbe_perf.session*
                     List of relations
  Schema  |          Name          | Type | Owner | Storage
----------+------------------------+------+-------+---------
dbe_perf | session_cpu_runtime    | view | omm   |
dbe_perf | session_memory         | view | omm   |
dbe_perf | session_memory_detail  | view | omm   |
dbe_perf | session_memory_runtime | view | omm   |
dbe_perf | session_stat           | view | omm   |
dbe_perf | session_stat_activity  | view | omm   |
dbe_perf | session_time           | view | omm   |
(7 rows)
透過上面一些session級檢視可分析如下資訊
1. 會話級負載強度,邏輯/物理讀寫強度,排序活動等,用於甄別出負載強度高,使用資源多的會話
2. 會話級時間細分,用於甄別出不同時間維度上session的消耗
3. 會話級總記憶體和記憶體上下文分配/使用,可以定位單個session在特性級上的記憶體問題
4. 獲取實時系統活躍會話列表,包括會話基本資訊,會話事務,語句,等待事件,會話狀態(active,idle等),
用於分析當前系統活躍使用者的活動資訊,比如從語句的開始時間判斷當前會話是否一致阻塞在某一個語句,
從等待事件可以判斷某一個或者多數會話阻塞在哪個事件或者節點(分散式場景)

方式三 根據報錯資訊定位原始碼
1.進入opengauss-server原始碼目錄
cd /opt/openGauss-server/src
2.根據報錯資訊關鍵字進行搜尋
grep -r "Instance reset time is different" -w --include="*.cpp"
搜尋結果如下
gausskernel/cbb/instruments/wdr/generate_report.cpp:        ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("Instance reset time is different")));
3.再根據原始碼去分析問題

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2893477/,如需轉載,請註明出處,否則將追究法律責任。

相關文章