MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

ORACLE I/O总结

2024-11-26 18:03 huorong 数据库 6 ℃ 0 评论

一、I/O总结

I/O、内存、CPU是ORACLE数据库优化的核心,之需要BUFFER 就能完成的I/O是逻辑I/O,针对磁盘的I/O是物理I/O。

二、逻辑读

首先逻辑读会消耗大量的CPU操作,其次逻辑读分两种类型:第一种是一致读(consistent gets);第二种时当前读(db block gets)。一致读是针对SELECT,而当前读是针对DML和DDL。

怎么区分是一致读和当前读?我们可以根据BUFFER HEADER 上的BUFFER PIN 锁模式确定。该锁由三种模式:共享模式、独占模式、修改模式。存SELCT只会是共享模式,DML和DDL会申请独占模式和修改模式的锁。

举例:

第一个会话:

CREATE TABLE liuxiaobin20210812     AS SELECT ROWNUM ID,object_name NAME FROM Dba_Objects;CREATE UNIQUE INDEX liuxiaobin20210812_id ON liuxiaobin20210812(ID);SELECT SID FROM v$mystat WHERE ROWNUM = 1;

第二个会话:有第二个会话测试第一个会话的逻辑读

SELECT NAME, VALUE  FROM V$SESSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC#   AND SID = 246   AND NAME IN('consistent gets','consistent gets - examination')

第一个会话执行以下代码:

 DECLARE  M_NAME VARCHAR2(100);  BEGIN    FOR I IN 1..100 LOOP      SELECT NAME INTO M_NAME FROM LIUXIAOBIN20210812 WHERE ID = I;    END LOOP; END;

第二个会话执行以下代码:

SELECT NAME, VALUE  FROM V$SESSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC#   AND SID = 246   AND NAME IN('consistent gets','consistent gets - examination')

读BUFFER的时候数据将BUFFER中的行读取到PGA中,每次读多少行由参数ARRAYSIZE控制,该参数设置合理可以调节逻辑读I/O次数。


Tags:oracle in数组

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言