问题:
接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数
分析:
仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控速度时,将oracle监控的脚本代码,拆分成了多个子进程。导致每次循环服务器都会产生子进程次数的数据库连接,产生了过多的不必要连接
解决方案:
讨论分析过后,决定更改代码的架构,用DBUtils的连接池功能+多线程(http://www.cnblogs.com/fnng/p/3670789.html)的组合,替代现有的 多进程+子进程对数据库的单次连接
DBUtils:
DBUtils 是一套允许线程化 Python 程序可以安全和有效的访问数据库的模块。
下载并安装:
$ wget https://pypi.python.org/packages/65/65/89afee016aca7fbb5c1642e6ef3864d80af808dc5efa7367b328093eece9/DBUtils-1.1.tar.gz
tar -zxf DBUtils-1.1.tar.gz
cd DBUtils-1.1
python setup.py install
使用:
参考:http://blog.163.com/power_mr/blog/static/138744007201391823253744/
导入:import DBUtils.PersistentDB
dbapi :数据库接口
mincached :启动时开启的空连接数量
maxcached :连接池最大可用连接数量
maxshared :连接池最大可共享连接数量
maxconnections :最大允许连接数量
blocking :达到最大数量时是否阻塞
maxusage :单个连接最大复用次数
#不用连接池的MySQL连接方法
import MySQLdb
conn= MySQLdb.connect(host='localhost',user='root',passwd='pwd',db='myDB',port=3306)
cur=conn.cursor()
SQL="select * from table1"
r=cur.execute(SQL)
r=cur.fetchall()
cur.close()
conn.close()
#用连接池后的连接方法
import MySQLdb
from DBUtils.PooledDB import PooledDB
p