自訂 SQL 負載測試工具

自訂 SQL 負載測試工具

我想運行一些測試來比較我們的 mysql 應用程式的幾種配置。但我不想使用 sysbench 或 oltp 測試之類的東西,因為我們有一些繁重的預存程序邏輯。所以...我想根據我們的程式進行測試。

是否有任何測試應用程式/框架可供我們用來運行自訂查詢(作為選項 - 並行)並查看統計資料?像是網路版《Siege》之類的東西?我已經發現的通常使用自己產生的資料庫模式和場景。

我可以要求我的開發人員創建一些自訂 java 介面並使用 Siege,機器人不想增加開銷或影響數字。

問候,伊戈爾。

答案1

Jmeter可以使用JDBC進行資料庫負載測試:http://jakarta.apache.org/jmeter/usermanual/build-db-test-plan.html

我之前沒有使用過 jdbc 功能,所以我不知道它是否可以處理您的複雜查詢。

答案2

您可以遵循大多數單元測試引擎的一般原則來建立一個簡單的 mySQL 單元測試引擎。

我們過去為 MS SQL 建構了類似的東西

想法如下

1)我們編寫單元測試程式並給它們相同的名稱前綴,例如“test_”。在MS SQL中,我們也使用擴充屬性作為元資訊來描述測試的一些特定參數(就像在NUnit中一樣,可以使用不同的測試屬性)

2) 我們寫一個流程/腳本,開啟一個遊標,從目錄中選擇所有以「test_」開頭的程序名稱,並在 EXEC (@procedure_name) 語句中執行每個程序。如果測試失敗,測試程序應該引發錯誤。

3) 測試執行結果儲存在表格中。

4)為了對相同的資料執行測試並獲得可預測的結果,我們有一個範例測試資料庫,我們備份了一次並在每次測試執行之前從備份中恢復

答案3

如果您想要一個現在與 MySQL 5.1 一起打包的工具,您可能會做比嘗試更糟糕的事情MySQL Slap(又稱 mysqlslap)。直接來自文件的範例:

提供您自己的建立和查詢 SQL 語句,每個客戶端有 50 個查詢和 200 個選擇:

mysqlslap --delimiter=";" \  
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" \  
--query="SELECT * FROM a" --concurrency=50 --iterations=200

這提供了並行運行測試的選項 - 儘管使用多個客戶端實現並行性可能不完全符合您的喜好。這是一個簡短的描述(再次逐字):

mysqlslap 運行分三個階段:

  1. 建立架構、表格以及您想要用於測試的任何儲存程式或資料(可選)。此階段使用單一客戶端連線。

  2. 運行負載測試。此階段可以使用許多客戶端連線。

  3. 清理(​​斷開連接,如果指定則刪除表)。此階段使用單一客戶端連線。

如果這不完全符合您的口味,您可以使用 cron 腳本在特定時間為許多用戶觸發 MySQL Slap,或者為許多配置/規格相同的機器(具有到伺服器等的相同網路路徑)觸發 MySQL Slap(後者是非常重要,因為基準測試應該消除任何可能的差異,以防止結論模糊)。

如果(很可能)您正在執行先前的 MySQL 版本,這個連結提供有關如何編譯 5.0 的 5.1 原始碼的有用資訊;進一步向後移植可能是不可能的。

這是一個基本演練。

答案4

我最終使用了SQLIO 給磁碟施加壓力,然後編寫一些自訂查詢來產生相當多的數據,然後對大型表進行各種計算並模擬負載很重但優化不佳的資料庫。然後我增加了並發連接的數量,直到它消失。

相關內容