其實這種工做幾年前也都有作過,真的是靠自學和經驗累積,說真的沒啥技術含量。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.
若是業務使然,必須實時,那沒話可說,作爲一個測試人員,我只管提個建議和風險。
若是其它接口業務全是這樣,那可當心點啦!