譯者 | 李睿
審校 | 重樓
如今,數(shù)據(jù)庫領(lǐng)域正在迅速向人工智能(AI)和機(jī)器學(xué)習(xí)(ML)邁進(jìn),數(shù)據(jù)庫的工作量將會(huì)大幅增加。對于數(shù)據(jù)庫管理員來說,提前預(yù)測數(shù)據(jù)庫基礎(chǔ)設(shè)施的工作負(fù)載并滿足需求將是一項(xiàng)額外的責(zé)任。
隨著數(shù)據(jù)庫規(guī)模的擴(kuò)展和資源管理變得越來越重要,傳統(tǒng)的容量規(guī)劃方法往往難以滿足需求,從而導(dǎo)致性能問題和計(jì)劃外停機(jī)。作為使用最廣泛的開源關(guān)系數(shù)據(jù)庫之一,PostgreSQL也不例外。由于對CPU、內(nèi)存和磁盤空間的需求不斷增加,數(shù)據(jù)庫管理員必須采取主動(dòng)的方法來防止瓶頸并提高效率。
本文將探討如何將長短期記憶網(wǎng)絡(luò)(LSTM)機(jī)器學(xué)習(xí)模型應(yīng)用于預(yù)測PostgreSQL數(shù)據(jù)庫中的資源消耗。這種方法使數(shù)據(jù)庫管理員能夠從被動(dòng)容量規(guī)劃轉(zhuǎn)向預(yù)測性容量規(guī)劃,從而減少停機(jī)時(shí)間,改進(jìn)資源分配,并最大限度地降低過度配置的成本。
為什么預(yù)測性容量規(guī)劃至關(guān)重要
通過利用機(jī)器學(xué)習(xí),數(shù)據(jù)庫管理員可以預(yù)測未來的資源需求,并在問題變得嚴(yán)重之前加以解決,從而實(shí)現(xiàn):
- 減少停機(jī)時(shí)間:提前發(fā)現(xiàn)資源短缺,有助于避免中斷。
- 提高效率:根據(jù)實(shí)際需求分配資源,避免過度配置。
- 節(jié)約成本:在云計(jì)算環(huán)境中,準(zhǔn)確預(yù)測資源使用情況可以降低過度配置的成本。
機(jī)器學(xué)習(xí)如何優(yōu)化PostgreSQL資源規(guī)劃
為了準(zhǔn)確預(yù)測PostgreSQL的資源使用情況,采用了一種優(yōu)化的LSTM模型,這是一種遞歸神經(jīng)網(wǎng)絡(luò)(RNN),擅長捕捉時(shí)間序列數(shù)據(jù)中的時(shí)間模式。LSTM模型非常適合理解復(fù)雜的依賴關(guān)系和序列,使其成為預(yù)測PostgreSQL環(huán)境中CPU、內(nèi)存和磁盤使用情況的一個(gè)理想選擇。
方法
數(shù)據(jù)收集
(1)選項(xiàng)1
為了構(gòu)建LSTM模型,需要從各種PostgreSQL系統(tǒng)服務(wù)器操作系統(tǒng)命令和數(shù)據(jù)庫視圖中收集性能數(shù)據(jù),例如:
- pg_stat_activity (Postgres數(shù)據(jù)庫中活動(dòng)連接的詳細(xì)信息)
- vmstat
- free
- df
這些數(shù)據(jù)可以在六個(gè)月內(nèi)每隔幾分鐘捕獲一次,為訓(xùn)練模型提供一個(gè)全面的數(shù)據(jù)集。收集的指標(biāo)可以存儲在名為capacity_metrics的專用表中。
示例表架構(gòu):
SQL
CREATE TABLE capacity_metrics (
time TIMESTAMPTZ PRIMARY KEY,
cpu_usage DECIMAL,
memory_usage DECIMAL,
disk_usage BIGINT,
active_connections INTEGER
);有多種方法可以將這個(gè)系統(tǒng)數(shù)據(jù)捕獲到歷史表中。其中一種方法是編寫Python腳本,并通過crontab每隔幾分鐘調(diào)度一次。
(2)選項(xiàng)2
為了測試靈活性,可以使用代碼(合成數(shù)據(jù)生成)生成CPU、內(nèi)存和磁盤利用率指標(biāo),并在Google Colab Notebook中執(zhí)行。對于本文的測試分析,使用了這個(gè)選項(xiàng)。以下章節(jié)將解釋這些步驟。
機(jī)器學(xué)習(xí)模型:優(yōu)化LSTM
選擇LSTM模型是因?yàn)樗軌驅(qū)W習(xí)時(shí)間序列數(shù)據(jù)中的長期依賴關(guān)系。為了提高其性能,對其進(jìn)行了多項(xiàng)優(yōu)化:
- 堆疊LSTM層:將兩個(gè)LSTM層堆疊起來,以捕獲資源使用數(shù)據(jù)中的復(fù)雜模式。
- Dropout正則化:在每個(gè)LSTM層之后加入Dropout層,防止過擬合,提高泛化能力。
- 雙向LSTM:將模型設(shè)置為雙向,以捕獲數(shù)據(jù)中的前向和后向模式。
- 學(xué)習(xí)率優(yōu)化:選擇0.001的學(xué)習(xí)率來微調(diào)模型的學(xué)習(xí)過程。
該模型被訓(xùn)練了20個(gè)迭代周期,批量大小為64,并在CPU、內(nèi)存和存儲(磁盤)使用率的看不見的測試數(shù)據(jù)上測量了性能。
以下是數(shù)據(jù)設(shè)置和機(jī)器學(xué)習(xí)實(shí)驗(yàn)中使用的步驟摘要以及Google Colab Notebook的截圖:
步驟1:數(shù)據(jù)設(shè)置(模擬6個(gè)月的CPU、內(nèi)存、磁盤使用數(shù)據(jù))

步驟2:為數(shù)據(jù)添加更多變化

步驟3:為可視化或進(jìn)一步使用創(chuàng)建數(shù)據(jù)框架

步驟4:準(zhǔn)備LSTM數(shù)據(jù)、訓(xùn)練、預(yù)測和繪圖的功能


步驟5:運(yùn)行CPU、內(nèi)存和存儲的模型

結(jié)果
優(yōu)化后的LSTM模型在預(yù)測CPU、內(nèi)存和磁盤使用率優(yōu)于ARIMA和線性回歸等傳統(tǒng)方法。該模型的預(yù)測密切跟蹤實(shí)際的資源使用情況,有效地捕獲短期和長期的使用模式。
以下是LSTM預(yù)測的可視化結(jié)果:
圖1:優(yōu)化后的LSTM CPU使用率預(yù)測
圖2:優(yōu)化的LSTM內(nèi)存使用率預(yù)測
圖3:優(yōu)化的LSTM磁盤使用率預(yù)測
與PostgreSQL監(jiān)控工具的實(shí)際集成
為了最大限度地利用LSTM模型,可以探索PostgreSQL監(jiān)控生態(tài)系統(tǒng)中的各種實(shí)際實(shí)現(xiàn):
- pgAdmin集成:可以將pgAdmin功能擴(kuò)展為可視化實(shí)時(shí)資源預(yù)測和實(shí)際指標(biāo),從而使數(shù)據(jù)庫管理員能夠主動(dòng)應(yīng)對潛在的資源短缺問題。
- Grafana儀表板:PostgreSQL指標(biāo)可以與Grafana集成,在性能圖表上疊加LSTM預(yù)測結(jié)果。還可以配置警報(bào),以便在預(yù)計(jì)使用量超過預(yù)定義閾值時(shí)通知數(shù)據(jù)庫管理員。
- Prometheus監(jiān)控:Prometheus可以抓取PostgreSQL指標(biāo),并使用LSTM預(yù)測來發(fā)出警報(bào),生成預(yù)測,并根據(jù)預(yù)測的資源消耗設(shè)置通知。
- 云計(jì)算環(huán)境中的自動(dòng)擴(kuò)展:在云托管的PostgreSQL實(shí)例中(例如,AWS RDS、Google Cloud SQL),LSTM模型可以根據(jù)預(yù)測的資源需求增長觸發(fā)自動(dòng)擴(kuò)展服務(wù)。
- CI/CD管道:機(jī)器學(xué)習(xí)模型可以通過CI/CD管道不斷更新新數(shù)據(jù),重新訓(xùn)練并實(shí)時(shí)部署,確保預(yù)測在工作負(fù)載變化時(shí)保持準(zhǔn)確。
結(jié)論
通過應(yīng)用LSTM機(jī)器學(xué)習(xí)模型來預(yù)測CPU、內(nèi)存和磁盤的使用情況,PostgreSQL的容量規(guī)劃可以從被動(dòng)的方式轉(zhuǎn)變?yōu)橹鲃?dòng)的方式。研究結(jié)果表明,優(yōu)化后的LSTM模型提供了準(zhǔn)確的預(yù)測,實(shí)現(xiàn)了更有效的資源管理和成本節(jié)約,特別是在云計(jì)算托管環(huán)境中。
隨著數(shù)據(jù)庫生態(tài)系統(tǒng)變得越來越復(fù)雜,這些預(yù)測工具對于希望優(yōu)化資源利用率、防止停機(jī)和確??蓴U(kuò)展性的數(shù)據(jù)庫管理員來說變得至關(guān)重要。如果數(shù)據(jù)庫管理員正在大規(guī)模管理PostgreSQL數(shù)據(jù)庫,那么現(xiàn)在是利用機(jī)器學(xué)習(xí)進(jìn)行預(yù)測容量規(guī)劃,并在性能問題出現(xiàn)之前優(yōu)化資源管理的時(shí)候了。
未來的工作
未來的改進(jìn)可能包括:
- 嘗試使用額外的神經(jīng)網(wǎng)絡(luò)架構(gòu)(例如GRU或Transformer模型)來處理更不穩(wěn)定的工作負(fù)載。
- 將該方法擴(kuò)展到多節(jié)點(diǎn)和分布式PostgreSQL部署,其中網(wǎng)絡(luò)流量和存儲優(yōu)化也起著重要作用。
- 實(shí)現(xiàn)實(shí)時(shí)警報(bào),并進(jìn)一步將預(yù)測集成到PostgreSQL的操作堆棧中,以實(shí)現(xiàn)更加自動(dòng)化的管理。
- 使用Oracle自動(dòng)工作負(fù)載存儲庫(AWR)數(shù)據(jù)進(jìn)行Oracle數(shù)據(jù)庫工作負(fù)載預(yù)測試驗(yàn)。
原文標(biāo)題:Applying Machine Learning for Predictive Capacity Planning in PostgreSQL Databases,作者:Elango Muthusamy

























