使用 MySQL 中的正常日誌擷取的查詢對 MySQL 進行壓力測試
是否有任何工具可以使用 MySQL 通用日誌創建的日誌文件進行壓力測試?在Google上大量搜尋後,我發現很少有壓力測試工具只使用一些基准進行壓力測試。一種解決方案是使用 Apache JMeter,但它不會從 MySQL 日誌文件創建測試計劃,並且為我擁有的所有查詢創建自定義測試計劃太耗時了。
或者是否有至少可以從 MySQL 日誌創建 .sql 文件的工具?
這只是一個跟踪而不是一個完整的解決方案,“你的”解決方案是基於你的幻想(和一些工作);)
我已經完成了這種由通用查詢日誌生成的測試擷取和清理查詢,並在編寫自己的文件後使用sysbench 0.5
lua
,您可以在官方原始碼中找到一些範例,在我的數據庫(硬體和模式/數據的鏡像)上-快照,以便我可以立即恢復數據的原始狀態-)。然後你可以執行這樣的命令:
./sysbench --mysql-table-engine=myisam --mysql-db=<yourdb> --mysql-user=<user> --mysql-host=<host> --mysql-password=<pass> --test=tests/db/<yourlua>.lua --num-threads=8 --max-requests=8 run
收集並繪製結果、更改並發和請求,並監控您的數據庫和硬體狀態。
我的
lua
文件包含大約 80.000 個查詢,它由插入、更新和刪除組成更新#1
您可以嘗試的一個很好的起點是開始(簡單地)編寫您的
lua
文件,如下所示:pathtest = string.match(test, "(.*/)") or "" dofile(pathtest .. "common.lua") function thread_init(thread_id) set_vars() if (db_driver == "mysql" and mysql_table_engine == "myisam") then -- begin_query = "LOCK TABLES ".. table_name .." WRITE" -- commit_query = "UNLOCK TABLES" begin_query = "SELECT 1>0" commit_query = "SELECT 1>0" else begin_query = "BEGIN" commit_query = "COMMIT" end end function event(thread_id) local table_name db_query(begin_query) rs = db_query("INSERT INTO .....") rs = db_query("INSERT INTO .....") rs = db_query("SELECT ... FROM ...") rs = db_query("DELETE ...") db_query(commit_query) end
將您的查詢放入
db_query("")
函式中,為此類過程清理您的一般查詢日誌需要一些工作這裡是一個“個人”
lua
文件的簡單輸出,就像上面一樣,有 9 個查詢,7 個插入和 2 個選擇,+2 BEGIN/COMMIT:sysbench 0.5: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 8 Random number generator seed is 0 and will be ignored Threads started! OLTP test statistics: queries performed: read: 32 write: 56 other: 0 total: 88 transactions: 0 (0.00 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 88 (7728.11 per sec.) other operations: 0 (0.00 per sec.) General statistics: total time: 0.0114s total number of events: 8 total time taken by event execution: 0.0252s response time: min: 2.87ms avg: 3.15ms max: 3.65ms approx. 95 percentile: 3.65ms Threads fairness: events (avg/stddev): 1.0000/0.00 execution time (avg/stddev): 0.0032/0.00
希望這可以幫助