自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

來,看看MySQL插入速度能有50W每秒嗎

數(shù)據(jù)庫 MySQL
MySQL每秒可以插入50w條記錄嗎? 帶著疑問,我們一起看看mysql每秒可以插入多少條記錄? 要回答這個問題,首先要考慮影響mysql插入速度的因素有哪些?

[[331769]]

寫入速度

  • MySQL每秒可以插入50w條記錄嗎?
  • 帶著疑問,我們一起看看mysql每秒可以插入多少條記錄?
  • 要回答這個問題,首先要考慮影響mysql插入速度的因素有哪些?

硬盤的速度,網(wǎng)卡的速度,寫入行的數(shù)據(jù)量,數(shù)據(jù)在硬盤中的存放位置等等因素。

簡單的數(shù)據(jù),插入速度肯定快,復(fù)雜的插入肯定慢。

所以單純這個問題不好回答,最好的辦法是進行壓力測試,最后求一個平均值。

一 測試環(huán)境:

MySQL表結(jié)構(gòu)

  1. CREATE TABLE `user_10w` ( 
  2.   `id` int(10) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(20) DEFAULT NULL
  4.   `mobile` varchar(11) DEFAULT NULL
  5.   `add_time` int(11) DEFAULT NULL
  6.   `groupid` tinyint(1) DEFAULT NULL
  7.   `login_time` int(11) DEFAULT NULL
  8.   PRIMARY KEY (`id`) 
  9. ) ENGINE=MyISAM AUTO_INCREMENT=4730016 DEFAULT CHARSET=utf8mb4 

電腦配置

4核 Intel(R) Core(TM) i3-8100 CPU @ 3.60GHz

ssd 120G硬盤

二. 開始測試

說明:單機測試,不涉及網(wǎng)卡,網(wǎng)絡(luò)傳輸?shù)挠绊?/p>

測試程序php pdo

  1. include_once("tool.php"); 
  2. $dsn = 'mysql:dbname=demo;host=127.0.0.1'
  3. $user = 'root'
  4. $pass = 'root'
  5. try{ 
  6.         $hand = new PDO($dsn, $user, $pass); 
  7. }catch(PDOException $e){ 
  8.         echo 'Connection failed: ' . $e->getMessage(); 
  9. $query = $hand->prepare("insert into user_10w(name,mobile,add_time,groupid,last_login_time) values(?,?,?,?,?)"); 
  10. $n=0; 
  11. $count = 1000000; //每次插入100w 
  12. $t = time(); 
  13. echo 'start write,time is '. $t. "\n"
  14. while(true){ 
  15. $n++; 
  16. $name = Tool::getRandomStr(5); 
  17. $mobile = Tool::getRandNum(9); 
  18. $group = Tool::getRandNum(1); 
  19. $rs = $query->execute([$name,'13'.$mobile,time(),$group,time()]); 
  20. if($n>$count)break; 
  21. echo 'write end, time is '. (time()-$t) . "\n"

1.無任何索引,單進程

  1. start write,time is 1593338798 
  2. write endtime is 50 

耗時50s, 平均2w/秒

2. 給name添加普通索引

  1. write endtime is 60  
  2. root@test:/data/php# php7 pdo.php  
  3. start write,time is 1593393695  
  4. write endtime is 61 

大概慢了10s ,所以索引會導(dǎo)致插入變慢,因為要更新索引

 

來,看看mysql插入速度能有50w每秒嗎
負(fù)載

3. 多進程測試

用go寫了一個簡單的多進程執(zhí)行程序

  1. package main 
  2.  
  3. import( 
  4.         "os/exec" 
  5.         "sync" 
  6. var wg sync.WaitGroup 
  7. func testRun(wg *sync.WaitGroup){ 
  8.         c := exec.Command("php7""./pdo.php"
  9.         c.Run() 
  10.         wg.Done() 
  11. func main(){ 
  12.         var n int = 10 
  13.         wg.Add(n) 
  14.         for i:=0;i<n;i++{ 
  15.                 go testRun(&wg) 
  16.         } 
  17.         wg.Wait(); 

 

來,看看mysql插入速度能有50w每秒嗎
4進程負(fù)載

結(jié)果:

耗時115s ,插入速度平均3.4w/s

MySQL鎖表狀態(tài)

 

來,看看mysql插入速度能有50w每秒嗎
mysql status

10進程一起執(zhí)行

 

來,看看mysql插入速度能有50w每秒嗎
10進程

耗時5‘10“ ,插入速度大概3.2w/s

MySQL鎖表狀態(tài)

 

來,看看mysql插入速度能有50w每秒嗎
MySQL status

最后:

  • 可見,插入速度并沒有網(wǎng)上說的那么高,隨著進程數(shù)增多,鎖沖突逐漸增加,插入效率下降。
  • 通過存儲過程批量進行插入 ,插入速度應(yīng)該會更高,但在實際高并發(fā)應(yīng)用中使用并不多!
  • 拋開業(yè)務(wù),單純測這個好像沒什么意義,一定要結(jié)合業(yè)務(wù)復(fù)雜度,性能需求來做測試,做優(yōu)化。
  • 通過分布式、拆表提高并發(fā)量。

不足之處,請各位指正。

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2020-11-09 09:58:49

架構(gòu)雙十一開發(fā)

2019-07-22 10:33:40

程序員Java技術(shù)

2012-05-28 10:44:38

Sandy Bridg微服務(wù)器

2019-12-19 14:29:51

Python數(shù)據(jù)分析可視化

2018-04-12 13:24:24

程序員架構(gòu)師源碼

2020-04-13 17:17:28

MySQL8.0功能

2014-10-30 10:59:45

光纖

2020-02-24 17:53:06

5G速度有多快

2019-08-27 08:51:36

計數(shù)數(shù)據(jù)庫并發(fā)

2021-07-09 05:52:36

架構(gòu)開發(fā)緩存

2019-07-09 14:00:54

架構(gòu)高并發(fā)互聯(lián)網(wǎng)

2010-07-30 09:23:40

50GB英特爾硅光通訊

2010-07-28 10:08:19

硅光芯片每秒50GB

2021-07-05 13:10:17

技巧MySQL數(shù)據(jù)庫

2010-11-04 13:08:48

Apache加速模塊

2019-09-16 09:34:39

2021-08-31 15:42:43

技術(shù)研發(fā)充電

2012-02-21 15:41:13

愛普生投影機

2019-09-04 09:15:42

Wi-Fi 網(wǎng)絡(luò)標(biāo)準(zhǔn)

2012-04-25 09:24:17

Java
點贊
收藏

51CTO技術(shù)棧公眾號