物理读之LRU(最近最少被使用)的深入解析

一组LRU链表包括LRU主链,LRU辅助链,LRUW主链,LRUW辅助链,称为一个WorkSet(工作组)如下图:sys@ZMDBselectCNUM_SET,CNUM_REPL,ANUM_REPL,CNUM_WRITE,ANUM_WRI

一组lru链表包括lru主链,lru辅助链,lruw主链,lruw辅助链,称为一个workset(工作组)如下图:

sys@ZMDB>@?/rdbms/admin/show_para

Enter value for p: _db_block_buffers

old  12:     AND upper(i.ksppinm) LIKEupper(‘%&p%’)

new  12:     AND upper(i.ksppinm) LIKEupper(‘%_db_block_buffers%’)

 

P_NAME                                  P_DESCRIPTION                                      P_VALUE                        ISDEFAULT ISMODIFIEDISADJ

———————————————————————————————————————— ——— ———- —–

_db_block_buffers                        Number of database blocks cached inmemory: hidden 30442                         TRUE      FALSE        FALSE

                                          Parameter

 

我们用以下语句查下数据库中buffer所在LRU的状态

sys@ZMDB>alter session set events’immediate trace name buffers level 1′;

 

/u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13511.trc

 

拿BA=7d1b2000,搜索第一次DUMP的trace文件

/u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13480.trc

 

BH (0x7d3e8098) file#: 3 rdba:0x00c0586b (3/22635) class: 34 ba: 0x7d1b2000

  set: 5 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc:0,25

  dbwrid:0 obj: -1 objn: 0 tsn: 2 afn: 3 hint: f

  hash: [0x9efa7570,0x9efa7570] lru:[0x7f7f5d30,0x7d3e8050]

  lru-flags: on_auxiliary_list

  ckptq: [NULL] fileq: [NULL] objq: [NULL]objaq: [NULL]

  st: FREE md: NULL fpin: ‘ktuwh03: ktugnb’tch: 0 lfb: 33

  flags:

 

拿BA=7d1b2000,搜索第二次DUMP的trace文件

/u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13511.trc

 

BH (0x7d3e8098) file#: 7 rdba:0x01c0008b (7/139) class: 1 ba: 0x7d1b2000

  set: 5 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc:0,25

  dbwrid: 0 obj: 22919 objn: 19567 tsn: 7 afn:7 hint: f

  hash: [0x787e4bd8,0x9e4cda50] lru:[0x7f7f5d30,0x7d3e8050]

  ckptq: [NULL] fileq: [NULL] objq:[0x9a88e518,0x7d3e8078] objaq: [0x9a88e508,0x7d3e8088]

  st: XCURRENT md: NULL fpin: ‘kdswh11:kdst_fetch’ tch: 1

  flags: only_sequential_access

  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN:[0xffff.ffffffff] HSUB: [65535]

 

从上面的两个trace可以得出结论ba: 0x7d1b2000

从lru-flags:on_auxiliary_list(LRU_FLAG=4)到LRU-主链冷端的头部,这个比较特殊在DUMP没有显示LRU_FLAG(LRU_FLAG=0)

 

观察LRUTCH>=2时冷端移到热端

 

1、BUFFER手动设为100M

 

 ALTER SYSTEM SETmemory_max_target=0 scope=spfile;

  ALTER SYSTEM SET memory_target=0;

 alter system set sga_target=0;

 

 

create table gyj1_t80 (idint,name char(2000));

 

create table gyj2_t80 (idint,name char(2000));

 

begin

  for i in 1 .. 30000

  loop

    insert into gyj1_t80 values(i,’gyj’||i);

 commit;

 end loop;

end;

/

 

SQL> SQL> selectbytes/1024/1024||’M’ from dba_segments where segment_name=’GYJ1_T80′ andowner=’GYJ’;

 

BYTES/1024/1024||’M’

—————————————–

80M

 

 

begin

  for i in 1 .. 30000

  loop

    insert into gyj2_t80 values(i,’gyj’||i);

 commit;

 end loop;

end;

/

 

 

create index idx_gyj1_t80m ongyj1_t80(id);

 

create index idx_gyj2_t80m ongyj2_t80(id);

 

SQL> show user;

USER is “GYJ”

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

 

第一次dump

SQL> alter session set events’immediate trace name buffers level1′;

 

Session altered.

 

 

SQL> select * fromv$diag_info where;

 

   INST_ID NAME

———- ——————–

VALUE

——————————————————————————–

         1 Default Trace File

/u01/app/oracle/diag/rdbms/jfdb/jfdb/trace/jfdb_ora_7210.trc

 

 

发生一个物理读走索引

set autot on

selectid,name,dbms_rowid.rowid_relative_fno(rowid)file#,dbms_rowid.rowid_block_number(rowid) block# from gyj1_t80 where id=1;

 

 

SQL> selectid,name,dbms_rowid.rowid_relative_fno(rowid)file#,dbms_rowid.rowid_block_number(rowid) block# from gyj1_t80 where id=1;

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1962796.html

(0)
上一篇 2025年2月23日 05:55:55
下一篇 2025年2月23日 05:56:09

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • oracle截取字符串前几位的方法

    oracle截取字符串前几位的方法 Oracle提前某数据的前几位用substr函数。 如test表中数据如下: 现要提取dept字段中的前两位,可用如下语句: select id,name,substr(dept,1,2) from te…

    2025年2月23日
    100
  • oracle中exists有什么用法

    exists后面接的是一个子查询 以下图两个表为示例,来演示 a表中的id与b表中的aid相关联 exists的作用是检查子查询的结果是否为真,如果子查询为true则执行外面的SQL语句。 exists不返回数据只返回true 或false…

    2025年2月23日 数据库
    100
  • 查看表结构的sql语句是什么

    查看表结构的sql语句的方法是: Oracle查看表结构1.命令窗口:desc 表名2.sql窗口:select * from user_tab_columns where table_name=‘大写表名’; MySQL查看表结构 1.查…

    2025年2月23日
    100
  • sqlplus命令找不到怎么解决

    为了解决 SQL*Plus 命令找不到的问题,可采取以下步骤:1. 检查路径,确保已安装在系统路径中;2. 设置环境变量 ORACLE_HOME,指向安装目录父目录;3. 刷新环境,使更改生效;4. 验证安装是否成功;5. 检查执行文件权限…

    2025年2月23日
    100
  • sql中log on什么意思

    SQL 中的 LOG ON 用于建立数据库连接,允许用户使用指定的凭据(如用户名和密码)访问特定数据库。语法:LOG ON [AS] {用户名 | 连接名称} [WITH 密码 | WITHOUT PASSWORD] 可使用不同的参数指定用…

    2025年2月23日
    100
  • sql中varchar默认长度是多少

    SQL 中 VARCHAR 数据类型的默认长度因 DBMS 而异,通常为:MySQL:255 个字符PostgreSQL:255 个字符Microsoft SQL Server:1 个字符(必须显式指定)Oracle:2000 个字符(如果…

    2025年2月23日
    100
  • sqlplus未找到命令怎么解决

    在 SQLPlus 中遇到“未找到命令”错误时,解决方案包括:1. 检查拼写和大小写;2. 验证命令语法;3. 检查环境变量 PATH;4. 查找别名;5. 安装最新版本;6. 检查权限;7. 其他问题排查。 SQLPlus 未找到命令:解…

    2025年2月23日
    100
  • sqlplus命令的用法

    摘要:SQLPlus 是一种 Oracle 数据库交互式工具,用于连接数据库并执行 SQL 语句。可通过命令行启动,命令结构包括 SQL 语句、分号和换行符。基本命令:CONNECT:连接数据库。DISCONNECT:断开连接。SELECT…

    2025年2月23日
    100
  • sqlplus怎么删除命令

    在 SQLplus 中,可以通过以下方法删除已输入的命令:使用退格键逐个删除字符。使用 Ctrl+C 组合键清除当前命令行。使用 Esc 键取消正在进行的命令。使用向上和向下箭头键浏览命令历史记录,再配合 Home 和 End 键进行删除。…

    2025年2月23日
    100
  • sql中如何进行拼接

    SQL 中可使用多种方法进行字符串拼接,包括使用连接运算符 (+)、CONCAT 函数、|| 运算符(Oracle 和 MySQL)、FORMAT 函数(SQL Server)和 STUFF 函数(SQL Server)。具体选择取决于拼接…

    2025年2月23日
    100

发表回复

登录后才能评论