再送一波干貨,測試2000線程并發下同時查詢1000萬條數據庫表及索引優化

原文:再送一波干貨,測試2000線程并發下同時查詢1000萬條數據庫表及索引優化

繼上篇文章《絕對干貨,教你4分鐘插入1000萬條數據到mysql數據庫表,快快進來》發布后在博客園首頁展示得到了挺多的閱讀量,我這篇文章就是對上篇文章的千萬級數據庫表在高并發訪問下如何進行測試訪問

這篇文章的知識點如下:

1.如何自寫幾十行代碼就能模擬測試高并發下訪問千萬級數據庫表

2.比較高并發下(200次/秒,2000次/秒,10000次/秒)數據庫的性能

3.比較千萬級數據庫在查詢時加索引與不加索引的巨大差異(說實話,這個測試結果讓我自己本人也很驚訝)

針對上篇文章插入的1000萬條數據到數據庫后,我們進行了高并發下測試(模擬教師輸入姓名和密碼在1秒內登錄數據庫),線程類代碼如下

package insert;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class ThreadToMysql extends Thread {public String teacherName;public String password;public ThreadToMysql(String teacherName, String password) {//構造函數傳入要查詢登錄的老師姓名和密碼this.teacherName=teacherName;this.password=password;}public void run() {String url = "jdbc:mysql://127.0.0.1/teacher";  String name = "com.mysql.jdbc.Driver";  String user = "root";  String password = "123456";  Connection conn = null;  try {Class.forName(name);conn = DriverManager.getConnection(url, user, password);//獲取連接  conn.setAutoCommit(false);//關閉自動提交,不然conn.commit()運行到這句會報錯} catch (ClassNotFoundException e1) {e1.printStackTrace();} catch (SQLException e) {e.printStackTrace();}if (conn!=null) {Long startTime=System.currentTimeMillis();//開始時間String sql="select id from t_teacher where t_name='"+teacherName+"' and t_password='"+password+"'";//SQL語句String id=null;try {Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery(sql);//獲取結果集if (rs.next()) {id=rs.getString("id");}conn.commit();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}Long end=System.currentTimeMillis();System.out.println(currentThread().getName()+"  查詢結果:"+id+"   開始時間:"+startTime+"  結束時間:"+end+"  用時:"+(end-startTime)+"ms");} else {System.out.println(currentThread().getName()+"數據庫連接失敗:");}}}

?測試類代碼如下:

package insert;public class TestThreadToMysql {public static void main(String[] args) {for (int i = 1; i <=2000; i++) {String teacherName=String.valueOf(i);new ThreadToMysql(teacherName, "123456").start();}

?一.在沒有加索引的情況下測試:

把數據庫的最大連接數設置為250:

測試代碼:

package insert;public class TestThreadToMysql {public static void main(String[] args) {for (int i = 1; i <=200; i++) {String teacherName=String.valueOf(i);new ThreadToMysql(teacherName, "123456").start();}}}

?測試結果:

100多秒啊。。。我的天,這用戶體驗也沒準了O(∩_∩)O哈哈~

二.加索引后再次進行高并發下測試:

數據庫加索引SQL語句如下:這里我有一個疑問,上個星期我加索引等了半個小時我都沒加完索引我就停止了,今天下午居然只用了551秒就加完了索引。。。搞不懂

clean下項目代碼后再次運行(盡量經常clean下項目去掉緩存,不然結果會有出入):

看到這個結果有沒有被驚呆啊?哈哈加了索引由100多秒提升到1~2毫秒,查詢速度提示1萬多倍,查詢性能得到大幅度變態級提升~~~

沒加索引之前我查詢單個記錄都要2秒多

用explain查看語句可以知道要掃描全表,性能當然大幅度下降

?

?

?

?

?

下面我們來挑戰2000線程同時并發訪問查詢數據庫。看看結果:

把數據庫最大連接數設置為2500

測試代碼改為2000

package insert;public class TestThreadToMysql {public static void main(String[] args) {for (int i = 1; i <=2000; i++) {String teacherName=String.valueOf(i);new ThreadToMysql(teacherName, "123456").start();}}}

?結果截圖:

性能沒問題,平均幾十毫秒,很滿意

下面我們來挑戰一下1萬個線程同時高并發訪問,大家可以先想想結果會怎么樣,哈哈

設置數據庫最大連接數12000

測試代碼改為10000(再次提示。clean一下項目去掉緩存,這樣結果更準確)

package insert;public class TestThreadToMysql {public static void main(String[] args) {for (int i = 1; i <=10000; i++) {String teacherName=String.valueOf(i);new ThreadToMysql(teacherName, "123456").start();}}}

?結果如下(運行后發現電腦有點卡):

結果出現兩種報錯,1.連接請求被拒絕 2.連接失效 3.不過也有一部分成功連接上并且正確運行

然后我在數據庫查看最大連接響應數:

可以看出來就算你的數據庫設置為再高你的數據庫服務器也響應不過來。。。。頂多響應5758個

?小小總結,1.可以自己測試高并發下挑戰數據庫性能,2. 對索引在查詢性能上的強大有一個大概認識? 很適合初學者學習了解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453210.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

同步機制遵循的原則

進程在并發執行時為了保證結果的可再現性&#xff0c;各進程執行序列必須加以限制以保證互斥地使用臨界資源&#xff0c;相互合作完成任務。多個相關進程在執行次序上的協調稱為進程同步。用于保證多個進程在執行次序上的協調關系的相應機制稱為進程同步機制。 所有的進程同步機…

wps html編輯表格,WPS 2017個人版演示word使用技巧(wps2017表格使用技巧)

wps2017是一款非常深受用戶喜愛的辦公軟件。在2017這個新的版本中&#xff0c;依舊繼承了它之前兼容免費、體積小、多種界面切換、云辦公等眾多優秀的功能特點&#xff0c;下面小編就來教大家wps2017的使用方式使用技巧&#xff1a;一、wps2017個人版word使用技巧技巧一&#x…

ubuntu 解決“無法獲得鎖 /var/lib/dpkg/lock -open (11:資源暫時不可用)”的方法...

在ubuntu系統的termial下&#xff0c;用apt-get install 安裝軟件的時候&#xff0c;如果在未完成下載的情況下將terminal close。此時 apt-get進程可能沒有結束。結果&#xff0c;如果再次運行apt-get install 命令安裝如今&#xff0c;可能會發生下面的提示&#xff1a;無法獲…

es Update API

2019獨角獸企業重金招聘Python工程師標準>>> es Update API 博客分類&#xff1a; 搜索引擎&#xff0c;爬蟲 The update API allows to update a document based on a script provided. The operation gets the document (collocated with the shard) from the ind…

聰明人,容易不務實

聰明人擁有很多優勢。首先&#xff0c;聰明人的邏輯強、思路靈活&#xff0c;理解事物很快&#xff0c;因而經常很有創意。聰明人本身&#xff0c;也因為經常感覺到自己「快速理解、時有創意」的特質&#xff0c;認為沒有什么事情難得倒他。漸漸的&#xff0c;在看待任何事物時…

Linux 線程占用CPU過高定位分析

今天朋友問我一個Linux程序CPU占用漲停了&#xff0c;該如何分析&#xff0c; CPU占用過高&#xff0c;模擬CPU占用過高的情況 先上一段代碼&#xff1a; 1 #include <iostream>2 #include <thread>3 #include <vector>4 5 6 int main(int argc, char **argv…

計算機二級常備知識,2020年計算機二級Office考試必備題庫資料!

考試資料在手&#xff0c;考試不用愁&#xff01;領報名界面顯示計算機二級Office通過率僅21.07%&#xff0c;很多人認為是既費腦子又費時間的考試&#xff0c;可能是方法不對&#xff0c;導致花了很多時間還是考不過&#xff0c;剛剛收到3月考的二級證書啦&#xff0c;馬上還有…

MR作業的提交監控、輸入輸出控制及特性使用

2019獨角獸企業重金招聘Python工程師標準>>> MR作業的提交監控、輸入輸出控制及特性使用 博客分類&#xff1a; hadoop 提交作業并監控 JobClient是用戶作業與JobTracker交互的主要接口&#xff0c;它提供了提交作業&#xff0c;跟蹤作業進度、訪問任務報告及logs、…

ACK和NAK

ACK 英文縮寫: ACKnowledge Character在數據通信傳輸中&#xff0c;接收站發給發送站的一種傳輸控制字符。它表示確認發來的數據已經接受無誤。 NAK 英文縮寫: Negative Acknowledgment是否定應答或者非應答的縮寫。它是一個用于數字通信中確認數據受到但是有小錯誤的信號。

http協議與web本質

當你在瀏覽器地址欄敲入“http://www.csdn.net/”&#xff0c;然后猛按回車&#xff0c;呈現在你面前的&#xff0c;將是csdn的首頁了&#xff08;這真是廢話&#xff0c;你會認為這是理所當然的&#xff09;。作為一個開發者&#xff0c;尤其是web開發人員&#xff0c;我想你有…

計算機科學與技術考研課程安排,計算機科學與技術(0812)碩士研究生培養方案(一)...

一、培養目標本專業培養掌握馬克思主義基本原理、計算機科學與技術基礎理論和系統知識&#xff0c;深入了解國內外計算機科學與技術領域新技術和新動向&#xff0c;具備熟練的編程、測試能力&#xff0c;熟練掌握1門外語并具有較強創新和實踐能力&#xff0c;能夠在計算機科學與…

Docker storage driver 選擇

2019獨角獸企業重金招聘Python工程師標準>>> Docker storage driver 選擇 博客分類&#xff1a; docker 本文的目的是說明&#xff0c;如何在生產環境中選擇Docker 的storage driver。以及對應Linux發行版本下Docker storage driver的配置方法。主要參考&#xff0c…

臨界資源和臨界區

臨界資源&#xff1a; 臨界資源是一次僅允許一個進程使用的共享資源&#xff0c;各進程采取互斥的方式實現共享的資源。 屬于臨界資源的硬件有&#xff0c;打印機&#xff0c;磁帶機等&#xff1b;軟件有消息隊列&#xff0c;變量&#xff0c;數組&#xff0c;緩…

手機網站制作html5,【怎么樣制作手機網站】如何使用dreamweavercs6建立手機網站?織夢手機WAP瀏覽模塊如何制作手機網站?如何制作html5手機頁面?...

【怎么樣制作手機網站】如何使用dreamweavercs6建立手機網站?織夢手機WAP瀏覽模塊如何制作手機網站?如何制作html5手機頁面?下面就和小編一起來看看吧!如何使用dreamweavercs6建立手機網站?制作步驟如下:1。打開DreamweaverCS6軟件&#xff0c;可以在DreamweaverCS6軟件的開…

Docker查看關聯容器的卷宗在本機的存儲位置

docker inspect -f {{.Volumes}} volume1轉載于:https://www.cnblogs.com/toSeeMyDream/p/8623430.html

《那些年啊,那些事——一個程序員的奮斗史》轉載1到7

段伏櫪&#xff0c;一個瘦小&#xff0c;矮小&#xff0c;根本和“帥”這個字粘不上任何關系的普通人。名字的來源在于其多讀了幾年書的老爹&#xff0c;總抱著有一天要出書出名乃至于名流千古的美好理想&#xff0c;但可惜現實總是給予他無情的而又現實的打擊&#xff0c;于是…

如果在docker中部署tomcat,并且部署java應用程序

2019獨角獸企業重金招聘Python工程師標準>>> 如果在docker中部署tomcat,并且部署java應用程序 博客分類&#xff1a; docker 1、先說如何在docker中部署tomcat 第一步&#xff1a;root用戶登錄在系統根目錄下創建文件夾tomcat7,命令如&#xff1a;mkdir tomcat7&…

原語

一般地&#xff0c;把系統態下執行的某些具有特定功能的程序段成為原語。原語有兩種&#xff1a;1是機器指令級的&#xff0c;其特點是執行期間不允許中斷&#xff0c;正如在物理學中的原子一樣&#xff0c;在操作系統中是一個不可分割的基本單位。2是功能型的&#xff0c;其特…

Spring Boot結合thymeleaf

之前在Eclipse里寫了個Spring Boot響應jsp的小demo&#xff0c;后來發現打成jar包導出之后找不到jsp文件了。經過在網上查閱信息與資料&#xff0c;發現Spring Boot對于jsp的支持其實是不好的&#xff0c;而且在一些書中和官方都明確表示沒有辦法支持在jar包中打入jsp文件。雖然…