mysql的測試程序,mysql 性能測試

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 09:41
下一篇 2024-12-02 09:41

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟體。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29
  • JDK Flux 背壓測試

    本文將從多個方面對 JDK Flux 的背壓測試進行詳細闡述。 一、Flux 背景 Flux 是 JDK 9 對響應式編程的支持。它為響應式編程提供了一種基於推拉模型的方式,以支持…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨著深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29

發表回復

登錄後才能評論