我正在使用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进程以释放内存并重新启动它。我想我也可以通过编程方式进行此操作,但我会将其留下另一天。
答案 0 :(得分:1)
默认情况下,SQL Server将为缓冲池分配尽可能多的内存。这非常适合性能,允许从(快速)内存而不是(慢)磁盘访问数据。对于开发工作站,当其他应用程序竞争资源时,这可能会成为一个问题。
解决SQL Server应分配的configure a maximum amount of memory。您设置的数量取决于安装的内存量以及您使用的应用程序的类型/数量。作为安装了8GB的开发人员工作站的非常一般建议,我将SQL Server最大值设置为2048MB。