某年某月某日的一個下午,接收到監控服務器的一條告警短信:尊敬的運維工程師 XX,你好:「192.168.136.200」數據庫服務器 CPU 異常,CPU 使用率 98.7%,請儘快處理。看到這個消息渾身一緊,趕忙掐滅手中的煙,跑回辦公室。html
以上段子純屬捏造,若有雷同,我反正是不改。sql
言歸正傳,本文是記錄一次對達夢數據庫的優化過程。數據庫
處理問題的第一步,是須要了解當前服務器的情況,咱們經過如下兩種手段確認服務器瓶頸。服務器
sar 10 3
經過個人細緻觀察,發現服務器 CPU 被耗滿。接下來須要查看數據庫服務器的配置參數是否合理,是否有慢查詢腳本。微信
cd /dm7/dmdbms/devdb cat dm.ini | grep -E "MEMORY_POOL|MEMORY_TARGET|BUFFER"
cp dm.ini dm.ini.bak
參數 |
優化建議 |
優化後的值,單位 M |
---|---|---|
MEMORY_POOL |
建議爲內存的 90% | 1800 |
MEMORY_TARGET | 建議爲內存的 90% | 1800 |
BUFFER |
建議爲內存的 60% | 1200 |
MAX_BUFFER |
建議爲內存的 70% | 1400 |
MAX_SESSIONS |
1000 |
service DmServerdm restart
參數優化後咱們嘗試找出當前數據庫存在的慢查詢 SQL,看看是否能夠優化。運維
達夢數據庫不像 MySQL 能夠直接將慢查詢存放在指定位置,達夢須要經過 AWR 報告中找出慢查詢。(AWR 報告你們自行百度)
啓用 DM 快照須要調用 DBMSWORKLOADREPOSITORY 包。性能
disql SYSDBA/password
SP_INIT_AWR_SYS(1);
SELECT SF_CHECK_AWR_SYS;
CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(30);
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
SELECT * FROM SYS.WRM$_SNAPSHOT;
SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));
chmod 777 /awr
SYS.AWR_REPORT_HTML(1,2,'/awr','awr1.html');複製代碼
可是**數據表自己設計不合理**這個沒有優化,因爲設計不合理致使查詢沒辦法走索引;而有些查詢則須要從業務角度進行優化,好比是否有必要對大表進行全表查詢而後再排序?等等等等。。。(至於數據庫 SQL 優化的具體策略咱們下期再聊)複製代碼
在完成優化後重啓應用,再次經過sar 10 3
觀察 CPU 性能,較優化前仍是有很多的提高的,又能夠抽空去抽根菸了。優化
獲取更多內容請關注公衆號:JAVA日知錄ui