文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» MySQL & PostgreSQL & Sybase » 管理大的transactions       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [原创] 管理大的transactions  ( 查看:429  回复:2 )   
 
crazy57002
新新人类  点击可查看详细



帖子 1
精华 0
无忧币 11
积分 5
阅读权限 20
注册日期 2007-12-18
最后登录 2007-12-18 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2007-12-18 10:42   标题:管理大的transactions
上一帖 |
管理大的transactions

  有些操作是大批量地修改数据,log增长速度十分快,如:
  大量数据修改
  删除一个表的所有记录
  基于子查询的数据插入
  批量数据拷贝

  下面讲述怎样使用这些transaction 使log 不至溢满:
  大量数据修改    例 :  
  1>update large_tab set col_1=0
  2>go  

  若这个表很大,则此update动作在未完成之前就可能使log满,引起1105错误(log full)而且执行这种大的transaction所产生的exclusive table lock,阻止其他用户在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 col1go
  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。



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2007-12-18 10:421楼
[ 顶部 ]
 
lllenxue
副版主  点击可查看详细


十二生肖之狗   双子座   行业勋章   技术勋章   诚信兄弟  
帖子 701
精华 3
无忧币 2958
积分 1089
阅读权限 140
注册日期 2007-3-23
最后登录 2008-10-10 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2007-12-18 10:51 
楼主辛苦
很实用的资料,继续努力,多发好帖



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2007-12-18 10:512楼
[ 顶部 ]
 
GGYYGTO
新新人类  点击可查看详细



帖子 114
精华 0
无忧币 22
积分 114
阅读权限 20
注册日期 2007-1-23
最后登录 2008-8-19 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-18 17:05   标题:看了就一定回~

1QQQQQQQQQQQQQQQQQQ



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2007-12-18 17:053楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号