当前位置: 代码迷 >> Sql Server >> sqlserver2012 实现每1000条commit一次解决思路
  详细解决方案

sqlserver2012 实现每1000条commit一次解决思路

热度:173   发布时间:2016-04-24 10:14:29.0
sqlserver2012 实现每1000条commit一次
sqlserver2012 有没有commit语句啊,要实现每insert1000条写一次磁盘操作,从而减少io次数,提搞运行速度。应该怎样做?我知道MySQL中有autocommit属性,先关闭autocommit,然后就可以控制每insert1000次commit一次了。
在SqlServer中怎样实现啊,请大神指点迷津。
------解决方案--------------------
begin tran
循环

commit
------解决方案--------------------
引用:
sqlserver2012 有没有commit语句啊,要实现每insert1000条写一次磁盘操作,从而减少io次数,提搞运行速度。应该怎样做?...

不列理由到还是个正常提问,列了理由——楼主你是来搞笑的吧?
无论是分段 Commit 还是一次性 Commit,其他条件不变的前提下,该如何进行磁盘 IO 由 SQL Server 自己调度,不是一个简单的 Commit 语句能干涉的了的。
唯一影响的只是你的事务会不会超时而已。

不要把数据库想得象结构文件那么简单,这都是上个世纪八十年代的“先进”概念了。
------解决方案--------------------
无论在磁盘还是内存中,不用你关心!
分工协作,不要管过界!除非你用的数据库是自己开发的。
------解决方案--------------------
在SQL Server中,尽量控制每个事务的insert量,5000以下提交一次会比较好。但是你的确管的太多了。SQL Server更清楚自己的自身
------解决方案--------------------
引用:
怎样才能实现功能:
insert不足1000条时,数据都存在内存中,当到了1000条时就一次性把这些数据保存磁盘。

先insert到表变量或临时表中,
当临时表记录数达到1000条时,
插入目标表,
然后清空表变量或临时表,
如此循环..
------解决方案--------------------
这个数是因为避免锁升级影响并发
------解决方案--------------------
引用:
能不能保存在内存中啊

用表变量或临时表都相当于先保存在内存中..
------解决方案--------------------
引用:
Quote: 引用:

在SQL Server中,尽量控制每个事务的insert量,5000以下提交一次会比较好。但是你的确管的太多了。SQL Server更清楚自己的自身


这样不是能突破io瓶颈,加快数据的存储速度吗?系统要求每秒能保存1000条以上的记录,但是现在每秒才几百条,还有其他什么方法吗?请指教,谢谢

如果你每记录的数据大小有100K,差一点的机械硬盘的写入速度大概就是 50M,再“优化”IO也没用,必须考虑升级硬件了。
如果数据大小远没到这个数量级,速度瓶颈再其他地方,考虑硬盘IO更加没用。
  相关解决方案