楼主: qqvsmsn

如果不考虑事务的完整性,是不是在SQL中的COMMIT越多性能越好?

[复制链接]
论坛徽章:
66
皇马
日期:2009-02-13 09:38:532011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:柔道
日期:2011-04-08 23:11:212010广州亚运会纪念徽章:排球
日期:2011-04-18 22:00:58鲜花蛋
日期:2011-05-30 21:23:49ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15迷宫蛋
日期:2012-12-18 23:39:42问答徽章
日期:2013-09-25 16:14:23优秀写手
日期:2015-02-12 06:00:13
11#
发表于 2010-8-27 08:40 | 只看该作者
增量检查点

Oracle从8i开始引入了检查点队列这么一种概念,用于记录数据库里面当前所有的脏数据块的信息,DBWR根据这个队列而将脏数据块写入到数据文件中。检查点队列按时间先后记录着数据库里面脏数据块的信息,里面的条目包含RBA(Redo Block Address,重做日志里面用于标识检查点期间数据块在重做日志里面第一次发生更改的编号)和数据块的数据文件号和块号。在检查点期间不论数据块更改几次,它在检查点队列里面的位置始终保持不变,检查点队列也只会记录它最早的RBA,从而保证最早更改的数据块能够尽快写入。当DBWR将检查点队列里面的脏数据块写入到数据文件后,检查点的位置也要相应地往后移,CKPT每三秒会在控制文件中记录检查点的位置,以表示Instance Recovery时开始恢复的日志条目,这个概念称为检查点的“心跳”(heartbeat)。检查点位置发生变更后,Oracle里面通过4个参数用于控制检查点位置和最后的重做日志条目之间的距离。在这里面需要指出的是,多数人会将这4个参数看作控制增量检查点发生的时间。事实上这是错误的,这4个参数是用于控制检查点队列里面的条目数量,而不是控制检查点的发生。

(1、)fast_start_io_target

该参数用于表示数据库发生Instance Recovery的时候需要产生的IO总数,它通过v$filestat的AVGIOTIM来估算的。比如我们一个数据库在发生Instance Crash后需要在10分钟内恢复完毕,假定OS的IO每秒为500个,那么这个数据库发生Instance Recovery的时候大概将产生500*10*60=30,000次IO,也就是我们将可以把fast_start_io_target设置为 30000。

(2、)fast_start_mttr_target

我们从上面可以看到fast_start_io_target来估算检查点位置比较麻烦。Oracle为了简化这个概念,从9i开始引入了 fast_start_mttr_target这么一个参数,用于表示数据库发生Instance Recovery的时间,以秒为单位。这个参数我们从字面上也比较好理解,其中的mttr是mean time to recovery的简写,如上例中的情况我们可以将fast_start_mttr_target设置为600。当设置了 fast_start_mttr_target后,fast_start_io_target这个参数将不再生效,从9i后 fast_start_io_target这个参数被Oracle废除了。

(3、)log_checkpoint_timeout

该参数用于表示检查点位置和重做日志文件末尾之间的时间间隔,以秒为单位,默认情况下是1800秒。

(4、)log_checkpoint_interval

该参数是表示检查点位置和重做日志末尾的重做日志块的数量,以OS块表示。

(5、)90% OF SMALLEST REDO LOG

除了以上4个初始化参数外,Oracle内部事实上还将重做日志文件末尾前面90%的位置设为检查点位置。在每个重做日志中,这么几个参数指定的位置可能不尽相同,Oracle将离日志文件末尾最近的那个位置确认为检查点位置。

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
12#
发表于 2010-8-27 09:18 | 只看该作者

回复 #9 我上面有人 的帖子

commit不会强制checkpoint queue在此之前的都写回,其实checkpoint的速度是由oracle自行决定的。
能强制对全局或局部完全checkpoint的只有'alter system checkpoint;'或'alter tablespace read only'等。。

而commit必须保证的是在此之前,redo buffer必须写回redo log,这是oracle最基本的流程。
当然,你可以设置commit_write参数调整redo写回的性能。

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18
13#
发表于 2010-8-27 09:21 | 只看该作者

回复 #12 viadeazhu 的帖子

你没有理解我的意思!
我是说:大事务的commit跟redo几乎没有关系,是否hung只跟dbwr有关。

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
14#
发表于 2010-8-27 09:34 | 只看该作者

回复 #13 我上面有人 的帖子

设想一个场景,你的redo log是100MB一个,一共有三个,那就是300MB。

如果此时你做了一个大事务的update语句,其间会产生400MB的redo,那么当所有的redo log都用光的时候,请问你认为此时数据库没hung么?

使用道具 举报

回复
论坛徽章:
9
2010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:喀麦隆
日期:2010-07-07 11:50:42授权会员
日期:2010-08-07 15:29:242010年世界杯参赛球队:澳大利亚
日期:2010-08-08 19:32:202010广州亚运会纪念徽章:自行车
日期:2010-09-07 17:26:24ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010广州亚运会纪念徽章:举重
日期:2011-04-15 12:58:34铁扇公主
日期:2012-02-21 15:02:40ITPUB年度最佳BLOG写作奖
日期:2012-03-13 17:09:53
15#
发表于 2010-8-27 09:34 | 只看该作者
提交过于频繁
等待事件会出现
log file sync 和 log file parallel write等待事件。就是因为提交过于频繁,导致lgmr忙不过来而出现的等待。

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18
16#
发表于 2010-8-27 09:37 | 只看该作者
原帖由 viadeazhu 于 2010-8-27 09:34 发表
设想一个场景,你的redo log是100MB一个,一共有三个,那就是300MB。

如果此时你做了一个大事务的update语句,其间会产生400MB的redo,那么当所有的redo log都用光的时候,请问你认为此时数据库没hung么?


数据库hung是因为dbwr没有将脏数据写入datafile造成redo的状态为active,这跟你commit没有直接关系。你可以增加redo组,或增大redo,或者增加dbwr_writer,但绝不是靠commit能解决。

使用道具 举报

回复
论坛徽章:
14
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52沸羊羊
日期:2015-03-04 14:43:43马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11福特
日期:2013-10-14 21:18:25凯迪拉克
日期:2013-09-23 23:01:572013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412011新春纪念徽章
日期:2011-02-18 11:43:33
17#
发表于 2010-8-27 09:38 | 只看该作者
commit越多速度越慢,可以做一個Procedure,里面弄一個兩層loop做一下對比測試

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
18#
发表于 2010-8-27 09:41 | 只看该作者

回复 #16 我上面有人 的帖子

你的理解是对的,我的意思是很有可能,但不绝对。就像commit很频繁也不一定会有等待。

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18
19#
发表于 2010-8-27 09:42 | 只看该作者

回复 #18 viadeazhu 的帖子

你的意思是错误的!
应该是很不可能!

使用道具 举报

回复
论坛徽章:
13
数据库板块每日发贴之星
日期:2010-08-24 01:01:012012新春纪念徽章
日期:2012-01-04 11:57:13ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51数据库板块每日发贴之星
日期:2011-07-11 01:01:01ITPUB伯乐
日期:2011-06-16 10:11:39ITPUB季度 技术新星
日期:2011-01-17 11:30:46授权会员
日期:2010-12-28 19:29:32ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51数据库板块每日发贴之星
日期:2010-09-07 01:01:01数据库板块每日发贴之星
日期:2010-08-28 01:01:01
20#
发表于 2010-8-27 09:43 | 只看该作者
原帖由 sundog315 于 2010-8-26 22:44 发表
太多了redo受不了,太少了undo受不了


这句话言简意赅,直接命中要害!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表