几十万条记录同时(1秒内)插入同一个表,问如何处理 
需求是这样的:
服务器是SQLSERVER2000,(其实数据库是ORACLE也一样)
并行用户有可能一秒内同时插入记录到同一表中达到上十万条,你可以把该服务器作为网络游戏服务器。
现在出现瓶颈,出现等待现象,我开始考虑用锁的方式但事实和理论上都说明不可行(锁对小批量数据还有效但数据量到达十万的时候可能无用,我也不能说清楚什么原因)。
现在的方法是准备磁盘I/O分开处理 ,将磁盘的读取和写入分开,但我不知道具体是 如何做,是如何解决几十万条记录同时(1秒内)插入同一个表,请高手指点???
--

解决方案 »

  1.   

    oracle 增删该操作都是锁记录, 不是锁表. 所以不会碰到你的问题.SQLserver就不清楚锁表还是锁记录了.
      

  2.   

    把事务隔离级别降低试试,Oracle应该满足性能要求,如果要比插入速度,mysql应该是最快的。不过,如果死机,也是死得最惨的。
      

  3.   

    高并发写入使SQLServer的弱项,如果不能升级到2005,可以考虑多表和视图在逻辑上达到分区表的效果。可以按省份建结构相同的30个表,插入和更新时按省份做,查询全国时用一个视图把30个表union到一起,你甚至可以用视图分出地区,如东部地区、西部地区、东北地区、华北地区等。这样既分离了表和索引的IO,又为查询和统计提供了灵活性.单表索引数目过多对于插入和修改的性能有很大的负面影响,索引数目要少而精,大型表一般不超过四个索引。
      

  4.   

    oracle不会出现插入记录的时候锁表的情况的,只锁插入的记录
      

  5.   

    主要是IO,把control file够受的。
      

  6.   

    SQLSERVER2000和oracle的锁机制是不一样的,怎么能说“其实数据库是ORACLE也一样”呢?
    这么多连接对sql来言肯定是要锁表的(2000好像还没有行锁,应该先是块锁记不清了,不过应该可以调锁阀值)。oracle相对来说就没有这个问题。最后10w用户和10w纪录不是一个概念,如果一个用户插10W条数据就没有锁的问题,仅仅是生成索引,cpu,和io的问题了