Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

再次请教一道730的题关于Sequence的。。

Posted on 2010-05-15 22:58 Prayer 阅读(236) 评论(0)  编辑 收藏 引用 所属分类: DB2
http://www.db2china.net/club/viewthread.php?tid=6208

这道题 我觉得应该是 A 。20

1.JPG (32.04 KB)

 

1.JPG

 

user 1 使用的值 5,10,15,20,25

user2 使用的值 30,35,40,45,50

user3 nextval 55

由于使用cache(提高性能)的缘故, seq会产生gap(间隙)
>>弱水三千, 你就取我一瓢吧<<

http://www.db2china.net/?1167
http://blog.sina.com.cn/ObscureWings

TOP

我还是不大明白。,,
为什么
user 1 使用的值 5,10,15,20,25
我看不懂,
…………for myseq into conlhvar
是什么意思???
  Thanks in Advance!!!

TOP

主要是cache的问题。此处cache为5,所以对序列操作时会先取5个值存到缓存中,用完再取。所以user1会从5开始取5个数,即5,10,15,20,25。user2相同,user3也是。
真诚面对人这短暂的一生
活不出精彩,也要活出个精神来!

TOP

TOP

不对。。我测试的。
db2 => create table t1 (id int)
DB20000I  SQL 命令成功完成。
db2 => create sequence myseq start with 5 increment by 5 cache 5
DB20000I  SQL 命令成功完成。
db2 => insert into t1 values(next value for myseq)
DB20000I  SQL 命令成功完成。
db2 => insert into t1 values(next value for myseq)
DB20000I  SQL 命令成功完成。
db2 => select * from t1

ID
-----------
          5
         10

  2 条记录已选择。
第二个连接(再开一个db2cmd)
db2 => connect to mysec

   数据库连接信息

数据库服务器         = DB2/NT 9.7.0
SQL 授权标识         = ADMINIST...
本地数据库别名       = MYSEC

db2 => insert into t1 values(next value for myseq)
DB20000I  SQL 命令成功完成。
db2 => select * from t1

ID
-----------
          5
         10
         15

  3 条记录已选择。
第三个连接(同上)
db2 => insert into t1 values (next value for myseq)
DB20000I  SQL 命令成功完成。
db2 => select * from t1

ID
-----------
          5
         10
         15
         20

  4 条记录已选择。
最后查询结果
db2 => select next value for myseq from  sysibm.sysdummy1

1
-----------
         25

  1 条记录已选择。

db2 =>

TOP

原帖由 xutao1983.c 于 2009-12-4 17:06 发表
不对。。我测试的。
db2 => create table t1 (id int)
DB20000I  SQL 命令成功完成。
db2 => create sequence myseq start with 5 increment by 5 cache 5
DB20000I  SQL 命令成功完成。
db2 => insert into t1 valu ...


试验结果是正确的,再次读了一下在线文档 - Cache
Specifies the maximum number of sequence values that are preallocated and kept in memory. Preallocating and storing values in the cache reduces synchronous I/O to the log when values are generated for the sequence.
In the event of a system failure, all cached sequence values that have not been used in committed statements are lost (that is, they will never be used).
文档并没有说Sequence Cache是与connection/session有关的,所以应该是全局的,另外只提到system failure可能会产生GAP。
出题人好像是把DB2 z/OS里的概念套用到DB2 LUW里了,
http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.dshare/db2z_cacheoptcreatesequence.htm

TOP

楼上的。我建了多个用户。
         以不同用户的身份用不同连接,使用同一个sequence仍然得到了 20的结果

TOP

原帖由 xutao1983.c 于 2009-12-14 05:29 发表
楼上的。我建了多个用户。
         以不同用户的身份用不同连接,使用同一个sequence仍然得到了 20的结果


多谢!上次说了你的测试结果是正确的。你有空在V9.1下也测一下试试,我前面看到有人在8.2下测试也是20.

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理