本文目錄一覽:
Mysql 如何進行壓力測試啊??
一個是使用測試工具,比如mysqlslap等等等等。 追問: mysqlslap工具在網上看了,但不知道怎麼用啊,能否告知一二?要下載這個工具嗎? 回答: 你要是有MYSQL5系列的資料庫,這個工具是自帶的啊。如果沒有,建議下載。 追問: 我是MySql5.1的啊,但還是沒找到在哪兒啊?能否指點一下啊,謝謝! 回答: 暈,你當成可視化的了?無語。你打開控制台,然後就可以執行測試的命令了。你可以參考下MYSQL的官方說明:dev.mysql.com/doc/refman/5.1/en/mysqlslap.html這個網上有很多的測試教程,你可以看看,不過不是特別實用。 追問: 我是應用程序的怎麼用啊? 回答: 我看,你可能有點誤解了壓力測試了。第一,你的應用程序,是否是以數據為中心的,如果不是,那之前我和你說的那些全部就是廢話。第二,就算是以數據為中心的,你也沒說明白你要測試什麼,如果你要測試MYSQL,那沒什麼必要。因為已經是很成熟的產品了。第三,如果是你要測試你的程序,而且你的程序擁有後台資料庫,那你可以針對不同平台的解決方案,使用不同的測試方法,比如如果是.NET + MYSQL資料庫 ,就可以使用VS自帶的測試工具,連同代碼,和數據訪問都可以進行測試。
Mysql的最大連接數怎樣用java程序測試
java鏈接資料庫(mysql)—JDBC如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.junit.Test;
public class GetConnect {
private Connection conn; //Connection連接 導包(import java.sql.DriverManager;)在資料庫中一般來說JDBC是SQL包
// 獲得翻譯官: 載入驅動
//載入驅動
static{//靜態塊:在所有方法包括構造函數之前,執行.
try {
Class.forName(“com.mysql.jdbc.Driver”);
// (驅動實現了介面)mysql-connector-java-5.1.22-bin.jar (jar包)JDBC介面的實現 是外部的 需要引入
//使用映射的方式,引入驅動。
//(“com.mysql.jdbc.Driver”)是驅動的入口在
//Driver是驅動的意思在mysql-connector-java-5.1.22-bin.jar (jar包)中com.mysql.jdbc包中有個Driver類
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//獲得鏈接: 打通電話
@Test //junit的測試 測試方法,讓它運行起來
//報錯(Test下有紅線),錯誤信息如何提醒:Ctrl+1(快捷鍵) 游標放在錯誤(test)上 Ctrl+1 添加JUnit jar包
//JUnit jar包 既:Add JUnit 4 library to the build path
//添加進去後進行測試:如圖:(8–JUnit測試截圖);測試成功報 綠線 否則 紅線 如圖:(8–JUnit測試截圖)
public void getConnect() {
try {
/*url: 鏈接到哪一個資料庫實例
* jdbc:mysql://IP或者localhost:3306/資料庫名
* jdbc:(是個協議jdbc協議)mysql:(是個子協議) IP或者localhost(是個地址) 3306(埠號)
* user: 用戶名
* password:登陸密碼
*
*/
conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “root”, “123456”);
//java裡面一切皆對象,com.mysql.jdbc.Driver是個驅動,也有對象 DriverManager驅動管理對象
// com.mysql.jdbc.Driver是入口,DriverManager管理這個入口
//getConnection獲得鏈接,獲得實例 返回值:Connection類型 conn獲得的實例
//DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (conn!=null) {
System.out.println(“鏈接成功!”); //getConnection這個實例–》conn到底獲得了沒有–》conn!=null 表示 獲得了
} else {
System.out.println(“鏈接失敗!”);
}
}
//寫完代碼之後讓它運行的2種方式:1 使用傳統main() 2 Junit 單元測試
// junit: 將”@Test”放在要執行的方法前,要求被測試的方法沒有參數,沒有返回值. 通常要求方法時public.
}
mysql 性能測試報告怎麼寫
給你看個範例:
測試環境:
DELL 2.4G memory 512M
RH9.0 MySQL 3.23.54
測試使用的是mysql預設參數,用mysql提供的API用C編寫測試程序
測試程序共啟動40個線程進行資料庫操作,查找、插入、修改、刪除各10個,每個線程獨立與Sql Server連接。
資料庫結構,單表,表結構如下:
toheader 100byte 主鍵
contactheader 100byte
called 50byte
cseq 100byte
hashval int
timestamp int 次鍵
對主次鍵分別建了索引。分別在5萬、10萬、50萬用戶環境做測試,結果如下:
查找100次
插入100次
修改100次
刪除100次
5萬
100-300ms
100-300ms
100-300ms
100-300ms
10萬
500ms-1s
500ms-1s
500ms-1s
500ms-1s
50萬
3s-5s
3s-5s
3s-5s
3s-5s
從此數據看性能是很不錯的,因為mysql能保證每個操作是原子的,所以不用考慮線程間的同步。
但有一個問題:即mysql的每個操作是原子的,所以做每個操作時,其它線程是阻塞的,在大數據量查詢時,花的時間較長,會對其它線程有影響。我在保持其它線程工作不變的情況下,將每個查找線程改為做一次對所有記錄的查詢,在5萬和10萬記錄時表現不錯,分別為250ms和450ms,但在50萬記錄時,這個數值達到了22秒。而且在50萬用戶時,通過條件查找部分數據也很慢,如查詢結果為10萬記錄時用11秒。
懷疑是sql server的參數影響,按資料庫說明修改了幾個緩衝區的參數,但沒有效果。
由於首次同步發生的頻率很低,象250ms和450ms這樣的數據還是可以接受的,但22秒太離譜了。支持50萬用戶在線,需要考慮一個解決辦法,現在有一個辦法是建一個備份表,寫備份表的請求放到一個隊列里由一個單獨線程處理,這樣阻塞不會影響正常業務處理了。但這個線程的緩衝區要足夠容納30秒內發生的操作。
本來擔心數據量大了mysql的緩衝區不夠會出錯或丟數據,但測試發現,一次查詢最多讀了50M數據,沒有出現問題,經測算我們首次同步的數據不會超過10M。
在MySQL中啟動了innoDB引擎後,可以實現真正的行級鎖,select和update操作可以並發,這樣在全表查詢進行中間可以進行其它的select和update操作,但insert和delete不行。
性能也有很大提高,50萬記錄時100次操作300ms,全表查詢11秒多
常用參數 [options] 詳細說明:–auto-generate-sql,
-a 自動生成測試表和數據,表示用mysqlslap工具自己生成的SQL腳本來測試並發壓力。
–auto-generate-sql-load-type=type 測試語句的類型。代表要測試的環境是讀操作還是寫操作還是兩者混合的。取值包括:read,key,write,update和mixed(默認)。
–auto-generate-sql-add-auto-increment 代表對生成的表自動添加auto_increment列,從5.1.18版本開始支持。–number-char-cols=N,
-x N 自動生成的測試表中包含多少個字元類型的列,默認1–number-int-cols=N, -y N 自動生成的測試表中包含多少個數字類型的列,默認1–number-of-queries=N 總的測試查詢次數(並發客戶數×每客戶查詢次數)
–query=name,-q 使用自定義腳本執行測試,例如可以調用自定義的一個存儲過程或者sql語句來執行測試。–create-schema 代表自定義的測試庫名稱,測試的schema,MySQL中schema也就是database。–commint=N 多少條DML後提交一次。
–compress, -C 如果伺服器和客戶端支持都壓縮,則壓縮信息傳遞。–concurrency=N, -c N 表示並發量,也就是模擬多少個客戶端同時執行select。可指定多個值,以逗號或者–delimiter參數指定的值做為分隔符。例如:
–concurrency=100,200,500。
–engine=engine_name, -e engine_name 代表要測試的引擎,可以有多個,用分隔符隔開。例如:–engines=myisam,innodb。–iterations=N, -i N 測試執行的迭代次數,代表要在不同並發環境下,各自運行測試多少次。
–only-print 只列印測試語句而不實際執行。–detach=N 執行N條語句後斷開重連。–debug-info, -T 列印內存和CPU的相關信息。說明:測試的過程需要生成測試表,插入測試數據,這個mysqlslap可以自動生成,默認生成一個mysqlslap的schema,如果已經存在則先刪除。可以用–only-print來列印實際的測試過程,整個測試完成後不會在資料庫中留下痕迹。各種測試參數實例(-p後面跟的是mysql的root密碼):單線程測試。測試做了什麼。
# mysqlslap -a -uroot -p123456多線程測試。使用–concurrency來模擬並發連接。# mysqlslap -a -c 100 -uroot -p123456迭代測試。用於需要多次執行測試得到平均值。# mysqlslap -a -i 10 -uroot -p123456# mysqlslap —auto-generate-sql-add-autoincrement -a -uroot -p123456# mysqlslap -a –auto-generate-sql-load-type=read -uroot -p123456# mysqlslap -a –auto-generate-secondary-indexes=3 -uroot -p123456# mysqlslap -a –auto-generate-sql-write-number=1000 -uroot -p123456# mysqlslap –create-schema world -q “select count(*) from City” -uroot -p123456# mysqlslap -a -e innodb -uroot -p123456# mysqlslap -a –number-of-queries=10 -uroot -p123456測試同時不同的存儲引擎的性能進行對比:# mysqlslap -a –concurrency=50,100 –number-of-queries 1000 –iterations=5 –engine=myisam,innodb –debug-info -uroot -p123456執行一次測試,分別50和100個並發,執行1000次總查詢:# mysqlslap -a –concurrency=50,100 –number-of-queries 1000 –debug-info -uroot -p12345650和100個並發分別得到一次測試結果(Benchmark),並發數越多,執行完所有查詢的時間越長。為了準確起見,可以多迭代測試幾次:# mysqlslap -a –concurrency=50,100 –number-of-queries 1000 –iterations=5 –debug-info -uroot -p123456
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193946.html