天天看點

真實客戶資料庫優化及資料庫讀寫分離實施方案

随着監控系統的不間斷運作,資料庫中資料量也随之增加,資料庫出現查詢緩慢、鎖等待情況,是以需要對資料庫進行優化,提高資料庫性能,加快查詢速度。
版本 操作 描述 人員 時間
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步驟

  1. 7.211.2.12,7.211.2.13登入資料庫:
Mysql -uroot -pp@ssw0rd      
  1. 執行以下Sql指令:
set global innodb_adaptive_hash_index=off      

2. 讀寫分離步驟

  1. 登陸7.211.2.14,7.211.2.15

使用者:sysmon

  1. 進入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.   //備份      
  1. 替換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 版本回退

  1. 7.211.2.12,7.211.2.13登入資料庫:
mysql -uroot -pp@ssw0rd      
  1. 執行以下sql指令,開啟AHI:
set global innodb_adaptive_hash_index=no      
  1. 登陸web主機,恢複db.php檔案

使用者:sysmon

ip:7.211.2.14,7.211.2.15

  1. 恢複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檔案      
  • 由于客戶哪邊資料量大的表主要是監控系統,監控平台是客戶購買的第三方監控系統,監控服務商說可以通過配置實作,但這個方式在非不得已的情況下不建議使用,推薦使用通過中間件的方式,對業務層透明,業務實作不考慮底層的資料存儲。