Skip to content

HezhouW/SQL-whz

Repository files navigation

Qt环境下,测试MySQL数据库单数据库单表写入数据的速率。
case 1: 单线程,单数据库连接。
		for循环 分别采用10 100 1000 为单位块儿做处理。
case 2:  多线程,每个线程独自维护一个单数据库连接。
		for循环 采用100 为单位块儿做处理。
		
实验结果:(在个人计算机下测试)
	以10为单位,单线程输入10000行:Insert SQL need time : 59286(ms)
	以100为单位单线程			   Insert 10000 Lines to SQL need time : 5611(ms)
	以1000为单位单线程			   Insert 10000 Lines to SQL need time : 1027(ms)
	
	
	以100为单位单线程Insert 102400 Lines to SQL need time : 67377(ms)
	以1000为单位单线程Insert 102400 Lines to SQL need time : 10201(ms)

	以100为单位10个多线程Insert 102400 Lines to SQL need time : 16200(ms)

结果分析:
	方便实验观察,我所构造的待写入数据其单行数据量并不大,可认为是琐碎数据集。 (150字节以内)
	
	可以看出,以10为单位与以100为单位时,耗时呈线性关系。 说明IO瓶颈并未达到,这时,for循环体内sql语句写入的行数越多,效率越高。
	以100为单位与以1000为单位时,耗时不再线性的减小。说明在1000行一次的循环下,IO瓶颈已经限制数据的写入。htop工具查看下,66.6%的wa!
	
	重复1024*100行的数据测试,同样有这样的结果。
	
	当采用了10个线程,每个线程独立维护它的数据库连接,独立写入数据。可以看出,总时间明显减少!但耗时高于1000为单位的单线程。另查看数据库,发现其每一个threadnum相同的行数为100,然后threadnum会切换成其他线程。
	综上,可以确认,MySQL 的Innodb型数据库是“行安全”的,线程中单条SQL语句视为原子执行块儿。同样是1024*100,多线程的处理没有1000为单位的单线程处理方式快,是由于多个线程的等待与切换浪费了部分时间。
	

Qt环境下,测试MySQL数据库在真实数据表项读写下,写入单表中数据的速率。

数据内容:
	| id | taskseq | protocoltype | threadnumintask | idinthread | framesize | DestMac           | SourMac           | TypeorLength | Data  | Upperlayer |
	+----+---------+--------------+-----------------+------------+-----------+-------------------+-------------------+--------------+-------+------------+

	|  1 |       1 | Ethernet     |               2 |          1 |       544 | F8:0F:41:F3:61:00 | 00:E0:4C:40:01:32 | 08 00        | 45 00 00 22 00 00 40 00 3E 11 B1 C9 C0 A8 06 A6 C0 A8 03 0B DE 03 30 12 00 0E FF 47 34 31 33 39 00 08 00 00 00 00 00 00 00 00 00 00 00 00 | IP         |

	估计每行的数据量约300字节左右。
实验:在生产者消费者模型下,写入的速率。(在8核CPU下),for循环为10
case 1: 单线程单链接:					写入102400行,耗时97630ms。	速率约 18M/min
case 2: 10个线程,每个线程维护一个链接:写入102400行,耗时18830ms。 速率约为97.6M/min 或 1.5M/s

		
		

About

用于测试mysql写入的的速度。分两种情况予以测试。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published