管理pyodbc内存使用
我正在使用pyodbc(3.0.7)从SQL Server数据库中获取数据。我的操作系统是Windows 7,Python版本是2.7.7 64位。我遇到了内存使用的问题,想知道有没有解决办法。
每次运行我的程序时,sqlservr.exe这个进程的内存使用量都会不断增加(我通过命令提示符运行Tasklist查看的)。以下是我的代码。
1. 连接到数据库
import pyodbc
cnxnstring ="DRIVER={SQL Server};Server=servername;Database=dbname; \
User Id=uid; Password=pwd;"
cnxn = pyodbc.connect(cnxnstring)
dbcursor = cnxn.cursor()
2. 从数据库中获取数据并存储到字典中
strsql = 'SELECT CELLID,MEAN FROM TABLE_1'
dbcursor.execute(strsql)
dict1= {}
for line in dbcursor: dict1.update({line.CELLID:line.MEAN})
3. 对字典进行操作 - 这里的代码不相关
4. 清理工作
dbcursor.close()
cnxn.close()
尽管我关闭了与SQL Server数据库的连接,但Windows并没有释放相关的内存。内存使用量随着时间的推移不断增加,我不得不重启电脑。有什么办法可以解决这个问题呢?
编辑:临时解决办法
我找到了一种临时的解决办法。我进入Windows服务,停止了SQLSERVER进程以释放内存,然后又重新启动了它。我想我也可以通过编程的方式来做到这一点,但这我留到以后再说。
1 个回答
1
默认情况下,SQL Server会尽可能多地分配内存给缓冲池。这对性能来说是个好事,因为这样可以从(快速的)内存中访问数据,而不是从(慢速的)硬盘中读取。不过,对于开发工作站来说,如果还有其他应用程序在争抢资源,这可能会成为一个问题。
为了解决这个问题,你可以设置SQL Server的最大内存。你设置的内存量取决于你安装的内存大小以及你正在使用的应用程序的类型和数量。对于一台安装了8GB内存的开发工作站,我的一个非常一般的建议是将SQL Server的最大内存设置为2048MB。