楼主: 晶晶小妹

[原创] 晶晶实验十八之buffer cache中的LRU链

[复制链接]
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期: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版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
21#
 楼主| 发表于 2008-3-12 10:38 | 只看该作者
每个块进入LRU链后,可能会多很多块有影响,但是这个影响不会被马上体现在lru_flag.
为了效率,块的lru_flag不会马上更改,直到下次搜索可重用块时,又搜索到此块,才会对其进行更改.

使用道具 举报

回复
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期: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版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
22#
 楼主| 发表于 2008-3-12 10:55 | 只看该作者
原帖由 foxmile 于 2008-3-12 09:21 发表
select /*+index(qsmed.zjj1) */ * from qsmed.zjj1 where id>=1750 and id



说到让本该全扫的走索引,我上面这个的确不对,但问题不再于是否省略了索引名,而是应该为表加个别名:
SQL> select /*+index(qsmed.zjj1) */ * from qsmed.zjj1 where id<=398080;

已选择398080行。(表一共这么多行了)


执行计划
----------------------------------------------------------
Plan hash value: 1406143771

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   402K|    36M|   495   (6)| 00:00:03 |
|*  1 |  TABLE ACCESS FULL| ZJJ1 |   402K|    36M|   495   (6)| 00:00:03 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ID"<=398080)

如果将qsmed.zjj1换为别名,就会走索引了:

SQL> select /*+index(ZJ) */ * from qsmed.zjj1 ZJ where id<=398080;

已选择398080行。


执行计划
----------------------------------------------------------
Plan hash value: 2538640105

---------------------------------------------------------------------------------------
| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |         |   402K|    36M|  6388   (1)| 00:00:38 |
|   1 |  TABLE ACCESS BY INDEX ROWID| ZJJ1    |   402K|    36M|  6388   (1)| 00:00:38 |
|*  2 |   INDEX RANGE SCAN          | ZJJ1_ID |   398K|       |   899   (2)| 00:00:06 |
---------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID"<=398080)

使用道具 举报

回复
论坛徽章:
0
23#
发表于 2008-3-12 11:06 | 只看该作者
呵呵,杰出的女DBA。
对于晶晶妹妹的探索精神深感佩服,但是“当块第一次被读进Buffer时,会被插入到冷端头位置处”这种说法我觉得不是很准确,只有在table(且在创建表没有cache自己的时候),table 上发生  FTS的时候才会放在LRU列表的LRU端,如果不是这种情形,应该放在MRU端才对吧。

使用道具 举报

回复
论坛徽章:
0
24#
发表于 2008-3-12 11:11 | 只看该作者
晶晶妹妹有没有MSN,我的mayitong@hotmail.com

使用道具 举报

回复
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:排球
日期:2011-03-03 12:19:332010广州亚运会纪念徽章:篮球
日期:2011-03-10 14:25:06ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15灰彻蛋
日期:2011-12-28 16:56:322012新春纪念徽章
日期:2012-01-04 11:50:44迷宫蛋
日期:2012-03-09 15:14:20蜘蛛蛋
日期:2012-03-26 09:46:32
25#
发表于 2008-3-12 11:29 | 只看该作者
lru_flag=4  代表什么??  晶晶你知道吗??

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
26#
发表于 2008-3-12 12:33 | 只看该作者
原帖由 晶晶小妹 于 2008-3-12 10:55 发表



说到让本该全扫的走索引,我上面这个的确不对,但问题不再于是否省略了索引名,而是应该为表加个别名:
SQL> select /*+index(qsmed.zjj1) */ * from qsmed.zjj1 where id

加不加别名不影响结果。我测试了一下,如果只有一个索引的话,使用你这种方法,是肯定走索引的,而且是你需要的那个索引,但是如果表里面有两个以上的索引,而且条件里面有两个索引都包含,按你的方法强制索引的话,oracle会选择一个,但是选择的机制我不太理解。你这种方法对于单索引没有任何问题。我也算学了一招。呵呵,有点钻牛角尖了。探讨一下。也对提示理解了一些。虽然和你的主题没啥关系。

[ 本帖最后由 foxmile 于 2008-3-12 12:34 编辑 ]

使用道具 举报

回复
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:排球
日期:2011-03-03 12:19:332010广州亚运会纪念徽章:篮球
日期:2011-03-10 14:25:06ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15灰彻蛋
日期:2011-12-28 16:56:322012新春纪念徽章
日期:2012-01-04 11:50:44迷宫蛋
日期:2012-03-09 15:14:20蜘蛛蛋
日期:2012-03-26 09:46:32
27#
发表于 2008-3-12 13:18 | 只看该作者
lru_flag   什么时候会改
QUOTE: 晶晶小妹
-----------------------------
具体是,服务器进程需要读块进Buffer,它会从LRU链的尾端开始搜索自由块,如果发现搜索到的块的TCH值小于2,就重用这个块,并把它移动到冷端头。如果发现TCH大于2的块,并不会重用它,而是把它移到热端头部,并把它的TCH设为0。下面,我们试验一下这个过程:
-----------------------------------------

个人实验的结果,服务器进程需要读块进Buffer,它会从LRU链的尾端开始搜索自由块,如果lru满了,
如果发现搜索到的块的TCH值小于2,就重用这个块,并把它移动到冷端头。如果发现TCH大于2的块,并不会重用它,而是把它移到热端头部,并把它的TCH设为0,lru_flag改成了8

如果如果lru还未满,那么哪怕tch>2,应该说哪怕 到达20  ,也不会被移到热端,或者 需要很长的时间吧,我没有观察到。

关于lru_flag=4
我观察了一下 发现当要重用这个块时,这个块就变成了4,而且马上就没清除掉了,不知道是不是正确

使用道具 举报

回复
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期: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版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
28#
 楼主| 发表于 2008-3-12 13:24 | 只看该作者
原帖由 carcase 于 2008-3-12 11:29 发表
lru_flag=4  代表什么??  晶晶你知道吗??


辅助LRU

使用道具 举报

回复
论坛徽章:
27
会员2007贡献徽章
日期:2007-09-26 18:42:102011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:排球
日期:2011-03-03 12:19:332010广州亚运会纪念徽章:篮球
日期:2011-03-10 14:25:06ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15灰彻蛋
日期:2011-12-28 16:56:322012新春纪念徽章
日期:2012-01-04 11:50:44迷宫蛋
日期:2012-03-09 15:14:20蜘蛛蛋
日期:2012-03-26 09:46:32
29#
发表于 2008-3-12 13:47 | 只看该作者
QUOTE:
--------------------------------------------------------------------------------
辅助LRU
--------------------------------------------------------------------------------


辅助LRU 是另外的概念
lru刚开始为空的时候

select id from jj_1 where rowid='AAAMt2AAHAAAAAMAAA';

缓存的块是放在
辅助LRU 上,这个时候
lru_flag是等于0 的

晶晶啊,这些东西 你官方的资料有吗??

使用道具 举报

回复
论坛徽章:
107
生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:兔
日期:2008-05-06 11:21:14生肖徽章2007版:兔
日期:2009-02-21 18:08:58生肖徽章2007版:兔
日期:2009-03-10 21:20:36迷宫蛋
日期:2011-09-13 10:38:48ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41紫蛋头
日期:2011-12-05 13:26:13
30#
发表于 2008-3-12 13:54 | 只看该作者
都到18了,支持

使用道具 举报

回复

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

本版积分规则 发表回复

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