把剩飯溜溜——記一次簡單的性能測試中數據庫調優

其實這種工做幾年前也都有作過,真的是靠自學和經驗累積,說真的沒啥技術含量。mysql

現象:sql

數據庫服務器負載太高,按理說一個普通的壓測,數據庫服務器都是物理機,25核6G這樣的配置。很是厲害了,一個百W不到的壓力負載正常也該在1如下才合理。數據庫

但實際上一壓測負載就上升到6-7甚至更高,直到mysql服務假死掉。緩存

分析思路:服務器

一、慢語句app

真的是很奇怪,查看服務器上記錄慢語句日誌,沒有,設置的是超過0.5s會記錄,這裏居然沒有。測試

二、看mysql進程優化

show processlists;日誌

有語句堵住了,按理說,若是真的沒有慢語句,那麼這裏進程根原本不及捕獲到,不會停留,會刷刷刷走。blog

咱們先來分析一下這條語句:

 看一下一個單表查詢,居然沒有用到索引,查詢結果有20幾W條。不慢纔怪呢。只能說服務器強大,死的慢一點。

優化唄,加索引,很是簡單。

加索引過程當中遇到的問題:

這個字段加索引提示錯誤:      Specified key was too long;max key length is 767 bytes         

緣由是創建索引字段長度過長,那麼咱們建索引就不能常規執行了。得截取長度。

Alter table `database_a`.`table_a`    add  index `appToken` (`appToken`(191)) ;

加上後,負載立馬回落到2如下。但不行啊。仍是高了。

三、查看general.log看查詢語句是否太多,考慮加緩存

general.log統計我就不詳細講了。只講道理

作了一個測試,壓測一個http請求接口5分鐘,請求共3W條,general.log中共捕獲3W條sql.

若是業務使然,必須實時,那沒話可說,作爲一個測試人員,我只管提個建議和風險。

若是其它接口業務全是這樣,那可當心點啦!

相關文章
相關標籤/搜索