python mysql数据库压力测试

pymysql 的执行时间对比

1,装饰器,计算插入1000条数据需要的时间

def timer(func):
def decor(*args):
start_time = time.time()
func(*args)
end_time = time.time()
d_time = end_time - start_time
print("the running time is : ", d_time)
return decor @timer
def add_test_users(n):
conn = pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
cursor = conn.cursor()
for i in range(0, n):
try:
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
param = (('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i)))
cursor.execute(sql, param) except Exception as e:
return conn.commit()
cursor.close()
conn.close()
print('OK') add_test_users(10)

2,装饰器,计算插入100条数据需要的时间

def timer(func):
def decor(*args):
start_time = time.time()
func(*args)
end_time = time.time()
d_time = end_time - start_time
print("the running time is : ", d_time)
return decor @timer
def add_test_users(n):
usersvalues = []
for i in range(1, n):
usersvalues.append(('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i)))
conn = pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
cursor = conn.cursor()
cursor.executemany('insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)', usersvalues) conn.commit()
cursor.close()
conn.close()
print('OK') add_test_users(10)

对比execute和executemany 的耗时对比:

conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
cur = conn.cursor()
values = []
for i in range(10):
value = ('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i))
values.append(value)
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
now_time = time.time()
try:
cur.executemany(sql, values)
conn.commit()
except Exception as err:
print(err)
finally:
cur.close()
conn.close()
end_time = time.time()
print("executemany花费时间为: "+ str(end_time-now_time)) conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
cur = conn.cursor()
values = []
for i in range(10):
value = ('Tom' + str(i), str(i), 'boy', str(10000 + i), str(1390000000+ i), 'shanghai', str(10 + i))
values.append(value)
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
now_time = time.time()
for val in values:
print(val)
try:
cur.execute(sql, val)
conn.commit()
except Exception as err:
print(err)
finally:
cur.close()
conn.close()
end_time = time.time()
print("execute花费时间为: "+ str(end_time-now_time))

executemany花费时间为: 0.003998994827270508
execute花费时间为: 0.025983810424804688

Executemany 速度比execute快很多!!!

pymysql中 execute 和 executemany 性能对比 (外部文件导入)

conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
cur = conn.cursor()
values = []
with open(r"C:\Users\Administrator\Desktop\students1.txt", "r+",encoding="utf-8") as fo:
while True:
line_txt = fo.readline().replace("\r","").replace("\n","")
if not line_txt:
break
line_txt_txts = line_txt.split(',')
values.append(line_txt_txts)
print(values) sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
now_time = time.time()
try:
cur.executemany(sql, values)
conn.commit()
except Exception as err:
print(err)
finally:
cur.close()
conn.close()
end_time = time.time()
print("executemany花费时间为: "+ str(end_time-now_time))
students2.txt 文件内容:
Tom1,20,boy,10001,13900000001,shanghai,91
Tom2,21,boy,10002,13900000002,shanghai,92
Tom3,22,boy,10003,13900000003,shanghai,93
Tom4,24,boy,10004,13900000004,shanghai,94
Tom5,25,girl,10005 ,13900000005,shanghai,95
Tom6,26,girl,10006 ,13900000006,shanghai,96
Tom7,27,girl,10007 ,13900000007,shanghai,97
Tom8,28,girl,10008 ,13900000008,shanghai,98
Tom9,29,boy,10009,13900000009,shanghai,99
Tom10,30,boy,10010,13900000010,shanghai,100
conn = pymysql.connect(host='localhost', port=3306, user='root', password='1234qwer', db='test', charset='utf8')
cur = conn.cursor()
values = []
with open(r"C:\Users\Administrator\Desktop\students1.txt", "r+",encoding="utf-8") as fo:
while True:
line_txt = fo.readline().replace("\r","").replace("\n","")
if not line_txt:
break
line_txt_txts = line_txt.split(',')
values.append(line_txt_txts)
print(values)
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
now_time = time.time()
for val in values:
print(val)
try:
cur.execute(sql, val)
conn.commit()
except Exception as err:
print(err)
cur.close()
conn.close() end_time = time.time()
print("execute花费时间为: "+ str(end_time-now_time))

外部导入txt文件流
executemany花费时间为: 0.004998683929443359
execute花费时间为: 0.030979633331298828

python多线程执行mysql

简单方式开启多线程
Def run(sql):
pass sql = 'select * from students1 where score = 90'
t1 = threading.Thread(target=run, args=(sql,))
t2 = threading.Thread(target=run, args=(sql,))
t3 = threading.Thread(target=run, args=(sql,))
t1.start()
t2.start()
t3.start()

多线程运行时间

def add_del_update_search():
coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
param = ('tom555', '', 'boy', '', '', 'shanghai', '')
cursor = coon.cursor()
try:
count = cursor.execute(sql, param)
coon.commit()
print(count)
except Exception as e:
print(e)
coon.rollback()
cursor.close()
coon.close() start_time = time.time()
t1 = threading.Thread(target=add_del_update_search)
t2 = threading.Thread(target=add_del_update_search)
t3 = threading.Thread(target=add_del_update_search)
t1.start()
t2.start()
t3.start()
end_time = time.time()
d_time = end_time - start_time
print("多线程运行时间是 : ", str(d_time))

单线程运行时间

def add_del_update_search():
coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
param = ('tom555', '', 'boy', '', '', 'shanghai', '')
cursor = coon.cursor()
try:
count1 = cursor.execute(sql, param)
count2 = cursor.execute(sql, param)
count3 = cursor.execute(sql, param)
coon.commit()
print(count1)
print(count2)
print(count3)
except Exception as e:
print(e)
coon.rollback()
cursor.close()
coon.close() start_time = time.time()
add_del_update_search()
end_time = time.time()
d_time = end_time - start_time
print(“单线程运行时间是 : ", str(d_time))

单线程 for 循环操作数据库

def add_del_update_search (n):
coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
param = ('tom555', '', 'boy', '', '', 'shanghai', '')
cursor = coon.cursor()
for i in range(0, n):
try:
cursor.execute(sql, param)
coon.commit()
except Exception as e:
return
cursor.close()
coon.close() start_time = time.time()
add_del_update_search(100)
end_time = time.time()
d_time = end_time - start_time
print("单个线程运行时间是 : ", str(d_time))

多线程 for 循环操作数据库

def add_del_update_search():
coon = pymysql.connect(host="localhost", port=3306, user="root", password="1234qwer", db="test", charset="utf8")
sql = "insert into students1(name, age, sex, id, cellphone,address,score)values(%s,%s,%s,%s,%s,%s,%s)"
param = ('tom555', '', 'boy', '', '', 'shanghai', '')
cursor = coon.cursor()
try:
count = cursor.execute(sql, param)
coon.commit()
except Exception as e:
print(e)
coon.rollback()
cursor.close()
coon.close() start_time = time.time()
for i in range (100):
t = threading.Thread(target=add_del_update_search)
t.start() end_time = time.time()
d_time = end_time - start_time
print("多线程运行时间是 : ", str(d_time))

python mysql数据库压力测试的更多相关文章

  1. mysqlslap 一个MySQL数据库压力测试工具

    在Xen/KVM虚拟化中,一般来说CPU.内存.网络I/O的虚拟化效率都非常高了,而磁盘I/O虚拟化效率较低,从而磁盘可能会是瓶颈.一般来说,数据库对磁盘I/O要求比较高的应用,可以衡量一下在客户机中 ...

  2. mysql之 mysql数据库压力测试工具(mysqlslap)

    mysqlslap是从MySQL的5.1.4版开始就开始官方提供的压力测试工具.通过模拟多个并发客户端并发访问MySQL来执行压力测试,同时提供了较详细的SQL执行数据性能报告,并且能很好的对比多个存 ...

  3. mysql+mycat压力测试一例【转】

    前言 有很多人担心生产系统上新东西的程序怕压力跟不上和稳定性不行,是的,大家都怕,所以领导要求做一次压力测试,我个人也觉得是有必要的. 如果按原理来说,mycat如果不做分片,纯粹只是代理的话,他所做 ...

  4. Jmeter--Mysql数据库压力测试

    前提环境要求:首先下载合适的数据库驱动 传送门:https://mvnrepository.com/artifact/mysql/mysql-connector-java 将下载好的驱动放到Jmete ...

  5. [数据库]000 - 🍳Sysbench 数据库压力测试工具

    000 - Sysbench 数据库压力测试工具 sysbench 是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有 ...

  6. 如何使用swingbench进行oracle数据库压力测试

    如何使用swingbench进行oracle数据库压力测试 2014-10-06 08:09:02 标签:oracle 数据库压力测试 swingbench 原创作品,允许转载,转载时请务必以超链接形 ...

  7. python locust 进行压力测试

    最近公司项目周期比较赶, 项目是软硬结合,在缺少硬件的情况下,通过接口模拟设备上下架和购买情况,并进行压力测试, 本次主要使用三个接口 分别是3个场景: 生成商品IP, 对商品进行上架, 消费者购买商 ...

  8. sysbench数据库压力测试

    sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试 wget https://github.com/akopytov/sysbench/archive/1.0. ...

  9. 关于oracle数据库压力测试

    今天接到需求,需要对oracle数据库进行压力测试,就这几个字的需求. 然后查看了以下软件: 1.Benchmark Factory是一款专业的服务器性能测试工具,专为数据库测试和可扩展性测量而设计, ...

随机推荐

  1. Java 之 线程的生命周期(线程状态)

    一.线程的生命周期 (1)新建状态 new 好了一个线程对象,此时和普通的 Java对象并没有区别. (2)就绪 就绪状态的线程是具备被CPU调用的能力和状态,也只有这个状态的线程才能被CPU调用.即 ...

  2. const关键字总结

    在C语言中 const是C语言中总结 1.修饰的变量,使其具有常属性,使变量的值不能直接被改变.但是可以通过指针来间接的修改变量的值. 2.便于进行类型检查(在编译时进行类型检查),使编译对处理内容有 ...

  3. Java深入学习(2):并发队列

    并发队列: 在并发队列中,JDK有两套实现: ConcurrentLinkedQueue:非阻塞式队列 BlockingQueue:阻塞式队列 阻塞式队列非阻塞式队列的区别: 阻塞式队列入列操作的时候 ...

  4. ORACLE数据库导出表,字段名,长度,类型,字段注释,表注释语句

    转自:https://www.cnblogs.com/superming/p/11040455.html --数据库导出表,字段名,长度,类型,字段注释,表注释语句 SELECT T1.TABLE_N ...

  5. 安卓样式Style和主题Theme

    1. 区别 不过style是针对view来说的,比如TextView和EditText这些:而Theme必须针对整个activity或者整个application 2. 样式 创建一个样式,根元素 & ...

  6. 《Spring Boot Cook Book》阅读笔记

    最近一个月一直在学习Spring Boot框架,在阅读<Spring Boot Cook Book>一书的过程中,记录了一些学习笔记,在这里整理出一篇目录供大家参考. 一.Spring B ...

  7. JVM 入门指南

    一.什么是JVM? JVM: JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机.JVM 可以看作一台抽象的计算机,如同真实的计算机一样,它有自己的指令集和各种运行时区域 ...

  8. zookeeper,及k8s基础概念

    1.描述zookeeper集群中leader,follower,observer几种角色 Zookeeper: 分布式系统:是一个硬件或软件组件分布在网络中的不同的计算机之上,彼此间仅通过消息传递进行 ...

  9. [2019.05.09]Linux 学习笔记(3)

    最近的心得: CLI真好用,GUI就是渣渣 1. Bash 里面的命令是可以起别名的,起一个别名的方法是 alias [Alias]=[command] command可以是任意长的别名,比如 ali ...

  10. 轻量级C#编辑器RoslynPad((基于Roslyn编译器))

    简介 RoslynPad是一个Apache 2.0协议开源的轻量级C#编辑器.支持自动完成,语法提示,修改建议等功能.很适合平时随手写个C#程序看看运行结果. 目前版本:0.10.1,无需保存也可以运 ...