作者:容易 2013-03-29 17:38:41
通过twisted的异步模型以及数据库连接池,模拟高并发对oracle数据库进行压力测试,有不足之处和疑问可以留言交流。
测试过程中可以根据实际情况,同时模拟不同SQL语句实现复杂的并发测试。
以下是简单测试的代码,假如应用需要新上线某个数据库操作,可以初步判断高并发情况下对数据库性能和负载造成的影响。
测试代码中的dbms_lock.sleep(1),在这里的目的是为了测试twisted数据库连接池,实际测试中可以取消。
#-*-coding:utf-8-*-
from twisted.internet import epollreactor
epollreactor.install()
from twisted.internet import reactor
from twisted.enterprise import adbapi
import time
reactor.suggestThreadPoolSize(100)
def m_sql(x,y):
k={}
k['id']=x
k['name']='haha'
dbpool=y
dbpool.runOperation("begin insert into test values(:id,:name) ; dbms_lock.sleep (1); end;",k)
def loop_factory(x):
dbpool = adbapi.ConnectionPool('cx_Oracle', user='test', password ='oracle', dsn='192.168.20.205:1521/test',cp_min=80,cp_max=100)
for i in xrange(1,x):
m_sql(i,dbpool)
stopreactor(10)
def stopreactor(i):
time.sleep(i)
reactor.stop()
def main():
reactor.callWhenRunning(loop_factory,10000)
reactor.run()
if __name__ == '__main__':
main()
One Response