随着監控系統的不間斷運作,資料庫中資料量也随之增加,資料庫出現查詢緩慢、鎖等待情況,是以需要對資料庫進行優化,提高資料庫性能,加快查詢速度。
版本 | 操作 | 描述 | 人員 | 時間 |
V1.0 | 新增 | 文檔編寫 | 郭佳明 | 2021/12/15 |
V2.0 | 新增 | 文檔優化 | 陳壹 | 2021/12/20 |
V2.5 | 完善 | 文檔完善 | 劉志虎 | 2021/12/27 |
技術方案
1. 關閉AHI
通過對資料庫存儲引擎資訊的查詢,發現Innodb等待次數非常高
注:第一列是引擎名稱 第二類是索類型加代碼檔案行數 第三個是等待次數
通過翻看mysql 源碼(5.7.33):\storage\innobase\btr\btr0sea.cc,發現是跟自适應哈希索引(Adaptive Hash Index,AHI)相關的函數
随後翻閱官方文檔,官方文檔提到這在高負載工作的情況下,可能是一個争用點。
結合上金所這邊的實際情況,需要将AHI進行關閉。
主要分享低代碼、微服務、容器化、SAAS、系統架構方面的的内容,希望大家點贊,評論,關注。
2. 讀寫分離
- 從目前的資料量上,SQL本身已經很難進行優化,通過對慢Sql日志分析,發現慢Sql中針對曆史資料的查詢都是Range級别
- 索引情況如下:
- 字段如下:
- 注:其中ns字段是微秒時間,可以忽略。綜合來說:表已經物盡其用,其本身很難有改進的空間,是以需要進行資料庫讀寫分離,提高資料庫性能。
- 讀寫分離流程
實施步驟
1. 關閉AHI步驟
- 7.211.2.12,7.211.2.13登入資料庫:
Mysql -uroot -pp@ssw0rd
- 執行以下Sql指令:
set global innodb_adaptive_hash_index=off
2. 讀寫分離步驟
- 登陸7.211.2.14,7.211.2.15
使用者:sysmon
- 進入db.php所在目錄,這裡有兩個目錄分别存放了db.php檔案所有都要更改:
cd /cmp/nginx/html/lwjk_v3/config
mv db.php db.php.bf //備份
cd /cmp/nginx/html/lwjk_v3/local
mv db.php db.php.bf. //備份
- 替換db.php檔案更新内容,添加了讀寫分離的配置
cd /cmp/nginx/html/lwjk_v3/config
rz db.php //上傳新db.php檔案
ll //檢視權限,如果權限和老的db.php檔案不相同需更改權限與授權組和授權主
cd /cmp/nginx/html/lwjk_v3/local
rz db.php //上傳新db.php檔案
ll //檢視權限,如果權限和老的db.php檔案不相同需更改權限與授權組和授權主
注:上述的配置指定了主從的相關設定。 從庫将被用來執行讀操作,而主庫将被用來執行寫操作,這樣讀寫分離将通過上述配置自動地完成。
3 版本回退
- 7.211.2.12,7.211.2.13登入資料庫:
mysql -uroot -pp@ssw0rd
- 執行以下sql指令,開啟AHI:
set global innodb_adaptive_hash_index=no
- 登陸web主機,恢複db.php檔案
使用者:sysmon
ip:7.211.2.14,7.211.2.15
- 恢複config和local目錄下的db.php檔案:
cd /cmp/nginx/html/lwjk_3/config
rm -f db.php //删除更改的db.php檔案
mv db.php.bf db.php //恢複原有db.php檔案
cd /cmp/nginx/html/lwjk_v3/local
rm -f db.php //删除更改的db.php檔案
mv db.php.bf db.php //恢複原有db.php檔案
- 由于客戶哪邊資料量大的表主要是監控系統,監控平台是客戶購買的第三方監控系統,監控服務商說可以通過配置實作,但這個方式在非不得已的情況下不建議使用,推薦使用通過中間件的方式,對業務層透明,業務實作不考慮底層的資料存儲。