mysql - 如何模擬并發(fā)減庫存導(dǎo)致的慢sql
問題描述
DBA給了我如下一些慢sql的截圖 希望我能優(yōu)化一下完整的截圖中有10個同樣的update sql,最長的有56秒
這條update sql對應(yīng)的業(yè)務(wù)邏輯是這樣的
用戶中獎后對應(yīng)獎品庫存減一
而我在本地想模擬出這種情況 確定原因是什么以及該如何優(yōu)化。首先想到的原因就是高并發(fā)導(dǎo)致的鎖競爭, 于是基于此思路,我將最大連接數(shù)改成了10
show variables like ’max_connections’;+-----------------+-------+| Variable_name | Value |+-----------------+-------+| max_connections | 10 |+-----------------+-------+
然后啟動了100個線程并發(fā)執(zhí)行減庫存sql 很快就全部執(zhí)行完了 500個線程并發(fā)執(zhí)行也不足一秒啊
100 threads concurrent update stock took time: 168(ms)500 threads concurrent update stock took time: 504(ms)
那么該如何能模擬出線上的這種情況呢?
問題解答
回答1:流量復(fù)制,類似于這種 HTTP 流量復(fù)制工具:Gor Go,比較高大上;
自己模擬,使用工具如 Locust 來自定義請求,以實現(xiàn)模擬實際場景。案例有基于Locust、Tsung的百萬并發(fā)秒殺壓測案例
相關(guān)文章:
1. javascript - arguments.callee2. node.js - 阿里云ECS,阿里云Docker,還有Leancloud的LeanEgine,哪個更適合NodeJs WebApp?3. javascript - 有適合開發(fā)手機(jī)端Html5網(wǎng)頁小游戲的前端框架嗎?4. java - 線上應(yīng)用,如果數(shù)據(jù)庫操作失敗的話應(yīng)該如何處理?5. atom開始輸入!然后按tab只有空格出現(xiàn)沒有html格式出現(xiàn)6. javascript - js setTimeout在雙重for循環(huán)中如何使用?7. java - 創(chuàng)建maven項目失敗了 求解決方法8. mac里的docker如何命令行開啟呢?9. mysql - 這種分級一對多,且分級不平衡的模型該怎么設(shè)計表?10. mysql - linux連接數(shù)據(jù)庫報錯
