我SQLServer建了一个库,让后在程序中向其不停的插入数据,我发现随着数据
量增加的话,SQLServer占用的内存会增加,当我的向数据库中插入几百万条记录后,发现它既然占用了一百多兆的内存!!
  请问这是什么原因,如果是这样的话,当数据达到一定量的时候,系统的内存都会 被它用尽了。可以有办法解决这个问题吗??

解决方案 »

  1.   

    转:
    三、根据程序调用频次要求特别是数据统计报表等的要求,建立索引(这里建得好不好,就是速度好不好的主要原因了)。  
    四、不要将全部工作交给sql语句来做。特别是多表联合访问时更是这样,sql语句运行时第一步就是生成调用表的笛卡尔积,举个例子:比如你有两张表,各有记录10000条,表一是员工姓名,表二是员工工资。  当用联合查询时,笛卡尔积就是10000×10000=1亿。程序相当于是要在1亿条记录的集合里查找。    (注:有些朋友认为他已经通过where子句对数据进行了选择,所以问题没那么大,其实这是不对的,sql标准里是先生成笛卡尔积,然后才进行筛选的)。
    不知道你是不是这个原因五、程序中要重复利用可用的内存数据集。比如你有五个模块要调用表一,  如果你用五个数据集控件,那程序里就要初始化五次,当你数据集比较大时,  结果就知道了吧。所以写程序时,对一些常用的数据表或是查询,最好放在连接池中来管理  (cb中可以用datamodel)来代替。  
    六、优化sql。  这个就比较难了,三言两语也说不清楚,只能在平时慢慢积累,多看多学了。而且这个不同的数据库系统也不完全一样。  
      

  2.   

    to  laiyiling(最熟悉的陌生人): 我里面没有涉及多表查询啊,只是向一个表中插入数据,每次插入的数据量不是很多,单是插入数据的次数比较频繁,大概一秒中一次。还有一个现象就是,当我的程序退出后,SQLServer它占用的内存并不减少,还是有一百多兆啊!可不可以对SQLServer进行某些设置之后,就能改善这种现象呢???to powerlee(老李飞刀): 不好意思啊,小弟以前没有用过事务处理,能否简单介绍一下,最好能贴几行简单实现的代码:)
      

  3.   

    事务就是一连串的数据库操作,采用一次性的提交更新的方法
    BeginTrans()//开始一个事务操作
    CommitTrans()//提交事务操作
    RollBack()//撤消事务操作
      

  4.   

    这样吗?
    _ConnectionPtr m_pConnection;
    m_pConnection.BeginTrans();
    for (int i = 0; i < 1000; i++)
    {
         myrecordset.addnew();
         ....
         myrecordset.update(); //这条语句可以放到循环外面吗???
    }
    m_pConnection.CommitTrans();//这里是用EndTrans()还是 committrans