mysql - 如何模擬并發減庫存導致的慢sql
問題描述
DBA給了我如下一些慢sql的截圖 希望我能優化一下完整的截圖中有10個同樣的update sql,最長的有56秒
這條update sql對應的業務邏輯是這樣的
用戶中獎后對應獎品庫存減一
而我在本地想模擬出這種情況 確定原因是什么以及該如何優化。首先想到的原因就是高并發導致的鎖競爭, 于是基于此思路,我將最大連接數改成了10
show variables like ’max_connections’;+-----------------+-------+| Variable_name | Value |+-----------------+-------+| max_connections | 10 |+-----------------+-------+
然后啟動了100個線程并發執行減庫存sql 很快就全部執行完了 500個線程并發執行也不足一秒啊
100 threads concurrent update stock took time: 168(ms)500 threads concurrent update stock took time: 504(ms)
那么該如何能模擬出線上的這種情況呢?
問題解答
回答1:流量復制,類似于這種 HTTP 流量復制工具:Gor Go,比較高大上;
自己模擬,使用工具如 Locust 來自定義請求,以實現模擬實際場景。案例有基于Locust、Tsung的百萬并發秒殺壓測案例
相關文章:
1. Docker for Mac 創建的dnsmasq容器連不上/不工作的問題2. javascript - QWebEngineView 如何爬 angular 的動態數據?3. javascript - 使用angular 的ui-sref 中出現了中文參數,點擊跳轉后瀏覽器的地址欄里出現轉義后的%AE....%a%44. java - ConcurrentHashMap中的get()方法為什么可以不加鎖?5. java - 郵箱如何發送html內容6. html5 - 這個代碼顯示功能如何實現?7. javascript - 用JS 七牛上傳圖片出現文件已存在的錯誤(file exists)8. 工作近5年,3年Java Web ,近2年前端,未來何去何從?9. css3 - 圖片等比例縮放10. java - 字節流轉成字符串之后,在通過字符串轉成字節流后的文件為什么會不一樣?
