七、管理大的transactions
有些操作是大批量地修改数据,log增长速度十分快,如:
◆大量数据修改
◆删除一个表的所有记录
◆基于子查询的数据插入
◆批量数据拷贝
下面讲述怎样使用这些transaction 使log 不至溢满:
大量数据修改
例:
1>;update large_tab set col_1=0 2>;go |
若这个表很大,则此update动作在未完成之前就可能使log满,引起1105错误(log full)而且执行这种大的transaction所产生的exclusive table loc,阻止其他用户在update期间修改这个表,这可能引起死锁。为避免这些情况,我们可以把这个大的transaction分成几个小 的transactions,并执行dump transaction 动作。
上述例子可以分成两个或多个小transactions.
例如:
1>;update large_tab set col1=0 2>;where col2 3>;go 1>;dump transaction database_name with truncate_only 2>;go 1>;update large_tab set col1=0 2>;where col2>;=x 3>;go 1>;dump transaction database_name with truncate_only 2>;go |
若这个transaction 需要备份到介质上,则不用with truncate_only 选项。若执行dump transaction with truncate_only,应该先做dump database 命令。
删除一个表的所有记录
例:
1>;delete table large_tab 2>;go |
同样,把整个table的记录都删除,要记很多log,我们可以用truncate table命令代替上 述语句完成相同功能。
1>;truncate table large_tab 2>;go |
这样,表中记录都删除了,而使用truncate table 命令,log只记录空间回收情况,而不 是记录删除表中每一行的操作。
基于子查询的数据插入
例:
1>;insert new_tab select col1,col2 from large_tab 2>;go |
同样的方法,对这个大的transaction,我们应该处理为几个小的transactions。
1>;Insert new_tab 2>;select col1,col2 from large_tab where col1<=y 3>;go 1>;dump transaction database_name with truncate_only 2>;go 1>;insert new_tab 2>;select col1,col2 from large_tab where col1>;y 3>;go 1>;dump database database_name with truncate_only 2>;go |
同样,若想保存log到介质上,则dump transaction 后不加with truncate_only 选项。若 执行dump transaction with truncate_only,应该先做dump database 动作。
批量数据拷贝
在使用bcp把数据拷入数据库时,我们可以把这个大的transaction变成几个小的 transactions处理,避免log剧增。
开放trunc log on chkpt 选项
1>;use master 2>;go 1>;sp_dboption database_name,trunc,true 2>;go 1>;use database_name 2>;go 1>;checkpoint 2>;go bcp… -b 100 (on unix) bcp… /batch_size=100(on vms) |
关闭trunc log on chkpt选项,并dump database。
在这个例子中,一个批执行100行拷贝。也可以将bcp输入文件分成两或多个分开的文件, 在每个文件执行后做dump transaction 来避免log 满。
若bcp使用快速方式(无索引,无triggers),这样操作不记log,换句话说,log 只记载空间分配情况。在这种情况下,要先做dump database(为恢复数据库用)。若log太小,可置 trunc log on chkpt 选项,这样在每次checkpoint后清除log。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。
-
如何在Azure部署时选择合适的SQL Server?
想要在Azure上运行SQL Server,企业一般会面临两种选择:在Azure虚拟机上安装SQL Server或使用Azure SQL Database。
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。