我有个检索表,由于是在单表中做复杂条件查询,所以使用SQLtable。之前数据量小都没问题,但是随着表越来越大,偶尔会出现内存不足的警告,然后崩溃。退出狐表后再进入就不会了。
目前主表的记录数大约15万条,每次检索出来符合条件的记录大约在5000条左右。由于该功能是高频率操作,在多次、快速操作检索之后就偶尔会出内存不足,然后系统崩溃。
1、se/ect没有使用*号,而是根据需要加载字段,20个字段。主表的字段有70个左右。
2、服务器的内存8G,子机的内存也是8G。都是7代以上的CPU,网络是千兆的。用户不多,访问这个主表的用户大致10人。
此主题相关图片如下:微信图片_20241201142118.png
检索了一下论坛,看到蓝老师对于内存不足的一些解释,但是不是很明白,想请老师再解答一下更完整的解决方案,谢谢。
内存不足 - 专家坐堂 - Foxtable(狐表) - 新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!其中蓝老师说到“报表本身一般会释放内存,但是如果频繁的操作,可能还来不及释放。”似乎非常符合我碰到的情况,但是要怎么处理没有理解?
不知道您的处理逻辑,也不知道到底使用了什么代码,没有办法给解决方案。请提供实例测试。
蓝老师好,我的SQLtable的加载代码也不复杂,就一个检索的集合。Se/ect [_Identify],工作单号,客户简称,品名,订单号,长,宽,高,数量,状态,材质,下单日期,库存数,已入库数量,已出库数量,交期,备注 From {产品汇总表} where 状态<> '已完成发货' and 状态<> '已作废' and 状态<> '未审核'
但是这个检索是在产品汇总表(15万条记录)里面做全表检索,因为有些库存是几年前的,状态也不是固定的,所以每次加载这个SQLtable都必须要全表检索。
然后在系统使用的过程中一直都没有问题,直到超过10万条记录之后,客户报告了一次这个错误,我当时没在意,以为是极小概率偶发的,到了12万条,又报错,然后不到半个月14万条的时候,又报错,我才开始重视这个问题。
按道理,10多万条记录对SQL来说也不是什么大问题啊?过滤的结果也就5000条左右,我再服务器用查询的方法测试结果和狐表客户端结果是一致的。这么点数据会内存溢出真是没想到
[此贴子已经被作者于2024/12/1 21:56:50编辑过]
如果只是这种不可能有问题的。再说了内存只和已加载的数据有关,不管数据库里有多少。我一个表几亿行,加载几千行,重复执行,内存的使用可以稳定在500M左右。
关键是加载前,加载后都做了什么处理,导致重新加载后之前加载使用的内存无法释放。