如图所示,其中命名为table3d的数据库表里有九百多万条数据。请问大能是什么原因导致的?是datatable虚拟表放不下那么多数据吗?怎么解决?
------解决思路----------------------
内存不够了吧。
别用select *,只把你需要的列选出来吧。
或者可能的话,处理完一个datatable,释放后,再处理下一个
------解决思路----------------------
你一次性取九百万条记录做什么?
程序不能这样处理数据。
------解决思路----------------------
900 多万, 分页吧、、、
------解决思路----------------------
这不是好不好操作的问题,而是你为什么要把所有的明细都取过来。
既然所有的明细都程序处理,不利用数据库处理大数据的特性,就别用数据库了!
------解决思路----------------------
select * from mytable3d limit 0, 100
这就是取数据库表从开始到第100条的数据.
第二页就是 select * from mytable3d limit 101, 200
MYSQL 的分页, 很友爱的.
------解决思路----------------------
你要做什么处理?你到你要做的操作数据库不能执行?
数据库就是处理数据的,你不能在数据库中处理么?
------解决思路----------------------
用 C# 写 SQL CLR 插值函数。
存储过程用游标来遍历数据,存储过程中调用插值函数来计算当前的c、d。
------解决思路----------------------
直接写存储过程,在DB端执行,
900W数据,拉出来你的程序都差不多了。
------解决思路----------------------
这个直接在数据库处理就行了,不用使用其他处理手段。
------解决思路----------------------
无意打击,太欢乐了,900W拉到程序里面处理~~
------解决思路----------------------
你要做什么处理?你到你要做的操作数据库不能执行?
数据库就是处理数据的,你不能在数据库中处理么?
表1 表2
时间 值a 值b 时间 值c 值d
1 * * 1 * *
2 * * 3 * *
3 * * 5 * *
4 * *
根据一定算法通过插值把表2中缺失的时间和值c,d算出来,最后合成表3
表3
时间 值a 值b 值c 值d
1 * * * *
2 * * * *
3 * * * *
4 * * * *
5 * * * *
过程是在c#中执行,调用数据库进行存放数据和使用数据库的数据操作,表的数据量非常大,大神请指教
这个直接在数据库处理就行了,不用使用其他处理手段。
我现在是需要在c#里处理,不打开sql2008数据库,不在sql2008里做任何操作和写代码,全都是在c#里调用数据库
首先具体我不知道你需要最后的数据形式是如何的。如果可以用join读出你需要的数据,那你现在所有做的东西都是和尚买梳子。。。
看你程序,你起码也有权限在数据库表格进行读取,那就是说,你完全可以更改你的数据库代码,以获得最简洁的数据。
算了,不多说了,祝你好运吧。顺便说一下,就目前普通家用计算机32G左右的内存,执行你这样的程序,基本也会奔溃。
------解决思路----------------------
不打开sql2008,不在sql2008里做任何操作,我的建库建表导入数据都是在c#里写的
这种黑科技听都没听说过,不操作数据库还能操作数据
太高深了,召唤仙宫星人吧!
------解决思路----------------------
1,adapter.fill(table3d)那行报OOM不代表那个语句就是OOM的Root Cause (按照你900万4列来说的话,估计500M左右),你要检查一下前面2个tables是不是也很大?
2,如果前面2个table也很大,那就应该过滤后再来fill,就像前面很多兄弟说的那个用分页。
3,如果前面2个表的不大,但是当运行adapter.fill(table3d)的时候还是报错,那一般分两种情况。
3.1, 其他的进程已经占用了比大的内存,所以当你程序申请500M的内存的时候就报错。
3.2,其他的进程占用的并不大,而是你的C#的程序占用了比较大的内存,比如说你的物理内存为4G,你的C#程序占用了3 G,那么就要查询3G的被哪些对象占用的。这个应该不难吧, 手工抓个DUMP ,WINDBG+SOS ,然后一个dumpheap -statistics
从OOM 的角度来说,adapter.fill(table3d)那行并非是造成OOM的主因。
从程序设计的角度来说,一次性加载900W行绝对是有问题的。
------解决思路----------------------
一次看900多万条,你看得完吗?不用选这么多,内存不够用。