楼主: rekcah0

alter table cache对于keep pool有意义吗?keep pool默认就是只往热端放数据的啊.

[复制链接]
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
1#
发表于 2010-6-4 15:48 | 显示全部楼层
alter table cache
和storage (buffer_pool keep) 放入的是不同的内存组件,是两个不同的概念

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
2#
发表于 2010-6-4 16:22 | 显示全部楼层
原帖由 carcase 于 2010-6-4 16:14 发表
晕 人家问的是这个

但对于keep pool来说, 默认策略并不相同, 所有数据总是放到热端的, 包括全表扫描数据, 那么在这种情况下, 一个表若指定了buffer_pool keep, 那么alter table cache对于该表不是就没有意义吗?

就是说 假设两种表 a,b  当两种表 都设置了 buffer_pool keep
                           而a 表 是 cache
                              b 表是 nocache
那么 在keep 池中 冷端和热端(这个应该是最简单的方式,实际上有好多lru的)
大家一起读入到keep池中,是不是a表会放在热端,而b表就不会 ??


使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
3#
发表于 2010-6-4 16:28 | 显示全部楼层
按照yang版的说法 KEEP POOL是没有LRU规则的,循环使用,所以我觉得对于已经在keep pool里面的冬冬,cache没有作用

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
4#
发表于 2010-6-4 16:40 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
5#
发表于 2010-6-4 16:40 | 显示全部楼层
再来一个 MOS上下载的文档,里面明明写着KEEP POOL有LRU 。。。 晕~
谁对谁错呢?

BUFFPOOL.PDF

57.09 KB, 下载次数: 102

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
6#
发表于 2010-6-4 16:45 | 显示全部楼层
... 自己动手测试把
select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
         4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
         7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
         bh.object_name,bh.blocks
from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
         o.name object_name,count(*) BLOCKS
         from obj$ o, x$bh x where o.dataobj# = x.obj
         and x.state !=0 and o.owner# !=0
         group by set_ds,o.name) bh
where ds.set_id >= pd.bp_lo_sid
and ds.set_id <= pd.bp_hi_sid
and pd.bp_size != 0
and ds.addr=bh.set_ds;
这个脚本可以看到 各个buffer pool里面的segment和block数~
大家来设计个试验测试一下,我要下班了~ 来不及了

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
7#
发表于 2010-6-4 20:45 | 显示全部楼层
原帖由 carcase 于 2010-6-4 16:50 发表
这个我测试了一下 感觉没有 就是先进先出,没有冷端热端的


我如果用全表扫描的方式来做实验,的确是你这样的结论,但是如果通过NL连接,使用access table by rowid的方式来把表读入keep pool的话,感觉还是有LRU在工作的

1.设置db_keep_cache_size=4M
2.建立3张表 每张表将近2M,并在这3张表上建立索引,把3张表的storge(buffer_pool keep); test_t1,test_t2,test_t3
3.依次通过NL使用access table by rwoid的方式把test_t1,test_t2读入keep pool
4.等5分钟,再次通过access table by rowid的方式,读取5次表test_t1;此时如果存在LRU,test_t1的块,应该在LRU的热端~
5.通过access table by rowid把test_t3读入keep pool,发现test_t2表的block被挤出keep pool~


SQL> startup force
ORACLE instance started.

Total System Global Area  126950956 bytes
Fixed Size                   454188 bytes
Variable Size              96468992 bytes
Database Buffers           29360128 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

Elapsed: 00:00:00.00
SQL> select /*+ use_nl(test_t1,txx) */ count(object_type) from mydb.test_t1,mydb.txx where test_t1.object_id=txx.object_id;

COUNT(OBJECT_TYPE)
------------------
             19059

Elapsed: 00:00:00.02
SQL> select /*+ use_nl(test_t2,txx) */ count(object_type) from mydb.test_t2,mydb.txx where test_t2.object_id=txx.object_id;

COUNT(OBJECT_TYPE)
------------------
             19059

Elapsed: 00:00:00.02
SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         233
KEEP         TEST_T2                                         233
DEFAULT      TXX                                              11
DEFAULT      T1_IND                                           41
DEFAULT      T2_IND                                           41
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

7 rows selected.

Elapsed: 00:00:00.00
SQL> exec dbms_lock.sleep(300);

PL/SQL procedure successfully completed.

Elapsed: 00:05:00.01
SQL> declare
  2  a number;
  3  i number;
  4  begin
  5  i:=0;
  6  for i in 1..5 loop
  7  select /*+ use_nl(test_t1,txx) */ count(object_type) into a from mydb.test_t1,mydb.txx where test_t1.object_id=txx.object_id;
  8  end loop;
  9  end;
10  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.03
SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         233
KEEP         TEST_T2                                         233
DEFAULT      TXX                                              11
DEFAULT      T1_IND                                           41
DEFAULT      T2_IND                                           41
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

7 rows selected.

Elapsed: 00:00:00.00
SQL> select /*+ use_nl(test_t1,txx) */ count(object_type) from mydb.test_t3,mydb.txx where test_t3.object_id=txx.object_id;

COUNT(OBJECT_TYPE)
------------------
             19059

Elapsed: 00:00:00.00
SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         233
KEEP         TEST_T2                                          33
KEEP         TEST_T3                                         234
DEFAULT      TXX                                              11
DEFAULT      T1_IND                                           41
DEFAULT      T2_IND                                           41
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

8 rows selected.

Elapsed: 00:00:00.00
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
PL/SQL Release 9.2.0.8.0 - Production
CORE    9.2.0.8.0       Production
TNS for 32-bit Windows: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production

Elapsed: 00:00:00.00


[ 本帖最后由 zergduan 于 2010-6-7 10:16 编辑 ]

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
8#
发表于 2010-6-7 11:09 | 显示全部楼层
顶一下~

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
9#
发表于 2010-6-7 11:25 | 显示全部楼层
测试在KEEP Pool中,cache的作用~ 发现无论nocache/cache test_t1都无法把全表扫描的test_t1留在keep中~

似乎对于全表扫描这样的方式读入到keep中的block,cache都没有作用,似乎是先入先出的方式使用keep pool~


SQL> -- nocache table test_t1
SQL> startup force
ORACLE instance started.

Total System Global Area  126950956 bytes
Fixed Size                   454188 bytes
Variable Size              96468992 bytes
Database Buffers           29360128 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select table_name, blocks, buffer_pool, cache
  2    from dba_tables
  3   where owner = 'MYDB'
  4     and table_name in ('TEST_T1', 'TEST_T2', 'TEST_T3');

TABLE_NAME                         BLOCKS BUFFER_ CACHE
------------------------------ ---------- ------- ----------
TEST_T1                               252 KEEP        N
TEST_T2                               245 KEEP        N
TEST_T3                               245 KEEP        N

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> select count(*) from mydb.test_t1;

  COUNT(*)
----------
     19068

SQL> select count(*) from mydb.test_t2;

  COUNT(*)
----------
     19068

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         245
KEEP         TEST_T2                                         234
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> declare
  2  a number;
  3  i number;
  4  begin
  5  i:=0;
  6  for i in 1..50 loop
  7  select count(*) into a from mydb.test_t1;
  8  end loop;
  9  end;
10  /

PL/SQL procedure successfully completed.

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         245
KEEP         TEST_T2                                         234
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> select count(*) from mydb.test_t3;

  COUNT(*)
----------
     19068

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                          32
KEEP         TEST_T2                                         234
KEEP         TEST_T3                                         234
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> -- cache table test_t1
SQL> alter table mydb.test_t1 cache;

Table altered.

SQL> startup force
ORACLE instance started.

Total System Global Area  126950956 bytes
Fixed Size                   454188 bytes
Variable Size              96468992 bytes
Database Buffers           29360128 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select table_name, blocks, buffer_pool, cache
  2    from dba_tables
  3   where owner = 'MYDB'
  4     and table_name in ('TEST_T1', 'TEST_T2', 'TEST_T3');

TABLE_NAME                         BLOCKS BUFFER_ CACHE
------------------------------ ---------- ------- ----------
TEST_T1                               252 KEEP        Y
TEST_T2                               245 KEEP        N
TEST_T3                               245 KEEP        N

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> select count(*) from mydb.test_t1;

  COUNT(*)
----------
     19068

SQL> select count(*) from mydb.test_t2;

  COUNT(*)
----------
     19068

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         245
KEEP         TEST_T2                                         234
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> declare
  2  a number;
  3  i number;
  4  begin
  5  i:=0;
  6  for i in 1..50 loop
  7  select count(*) into a from mydb.test_t1;
  8  end loop;
  9  end;
10  /

PL/SQL procedure successfully completed.

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                         245
KEEP         TEST_T2                                         234
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

SQL> select count(*) from mydb.test_t3;

  COUNT(*)
----------
     19068

SQL> select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',
  2           4,'2K SUBCACHE',5,'4K SUBCACHE',6,'8K SUBCACHE',
  3           7,'16K SUBCACHE',8,'32KSUBCACHE','UNKNOWN') subcache,
  4           bh.object_name,bh.blocks
  5  from x$kcbwds ds,x$kcbwbpd pd,(select /*+ use_hash(x) */ set_ds,
  6           o.name object_name,count(*) BLOCKS
  7           from obj$ o, x$bh x where o.dataobj# = x.obj
  8           and x.state !=0 and o.owner# !=0
  9           group by set_ds,o.name) bh
10  where ds.set_id >= pd.bp_lo_sid
11  and ds.set_id <= pd.bp_hi_sid
12  and pd.bp_size != 0
13  and ds.addr=bh.set_ds;

SUBCACHE     OBJECT_NAME                                  BLOCKS
------------ ---------------------------------------- ----------
KEEP         TEST_T1                                          32
KEEP         TEST_T2                                         234
KEEP         TEST_T3                                         234
DEFAULT      AQ$_QUEUES                                        2
DEFAULT      REPCAT$_REPPROP                                   1

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
10#
发表于 2010-6-7 17:01 | 显示全部楼层
原帖由 yangtingkun 于 2010-6-7 16:18 发表
最近事情较多,暂时没有时间深究,这是以前的一些测试,希望有所帮助:
KEEP池的CACHE特点(四)
KEEP池的CACHE特点(三)
KEEP池的CACHE特点(二)
KEEP池的CACHE特点(一)


非常感谢~ 我没某找到第四部分,现在看完整了,的确,我的测试和您的第四部分的结论相符

使用道具 举报

回复

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

本版积分规则 发表回复

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