[20260216]直接路径读与filesystemio_options=asynch(21c).txt --//昨天测试直接路径读遇到的情况,不知道为什么仅仅第1次使用直接路径读,再次执行无论是否刷新数据缓存,都无法实现。 --//另外无意中发现设置参数filesystemio_options=asynch时,并不是读取访问数据块是使用异步IO,而是直接路径读时才使用异步IO。 --//通过测试说明遇到的情况。 --//首先给出oracle官方的解析: https://docs.oracle.com/cd/E11882_01/server.112/e41573/os.htm#PFGRF94410 9.1.1.2 FILESYSTEMIO_OPTIONS Initialization Parameter You can use the FILESYSTEMIO_OPTIONS initialization parameter to enable or disable asynchronous I/O or direct I/O on file system files. This parameter is platform-specific and has a default value that is best for a particular platform. FILESYTEMIO_OPTIONS can be set to one of the following values: ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission. DIRECTIO: enable direct I/O on file system files, which bypasses the buffer cache. SETALL: enable both asynchronous and direct I/O on file system files. NONE: disable both asynchronous and direct I/O on file system files. --//文档提及设置ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission。 --//另外发现当前内核版本查看/proc/slabinfo是否存在kio*不可行。以前旧版本查询询需要调用linux的slabinfo工具(可在 --///proc/slabinfo目录下查看,这些是内核"slab"),通过查找"kiocb"(内核I/O回调)和"kioctx"(内核I/O上下文)的分配情况,来判断 --//是否有进程使用了这些slab——这表明异步I/O已初始化。 --//注:我的测试在虚拟机器上进行,不知道是否相关。我的测试通过是否调用io_submit()发起I/O请求来确定是否启用异步IO。 1.环境: SCOTT@book01p> @ ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. SYS@book> @ hidez _serial_direct_read|^_small_table_threshold$|filesystemio NUM N_HEX CON_ID NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD ---- ----- ------ ---------------------- ---------------------------------------------------- ------------- ------------- ------------ ----- --------- 431 1AF 0 filesystemio_options IO operations on filesystem files FALSE ASYNCH ASYNCH FALSE FALSE 1867 74B 0 _small_table_threshold lower threshold level of table size for direct reads TRUE 1018 1018 TRUE DEFERRED 4141 102D 0 _serial_direct_read enable direct read in serial TRUE auto auto TRUE IMMEDIATE --//我的测试环境只要大于1018数据块,就有可能采用直接路径读,也就是 1018*8/1024 = 7.953125 ,基本就是大于8M。 # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) # uname -a Linux centtest 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux --//查询/proc/slabinfo,没有输出。 # grep -i kio /proc/slabinfo $ ldd $(which oracle) | grep -i aio libaio.so.1 => /lib64/libaio.so.1 (0x00007f7b07138000) 2.建立测试环境: SCOTT@book01p> create table t1 as select * from all_objects; Table created. --//分析表略。 SCOTT@book01p> @ seg2 t1 SCOTT@book01p> @ pr ============================== SEG_MB : 12 SEG_OWNER : SCOTT SEG_SEGMENT_NAME : T1 SEG_PARTITION_NAME : SEG_SEGMENT_TYPE : TABLE SEG_TABLESPACE_NAME : USERS BLOCKS : 1536 HDRFIL : 12 HDRBLK : 170 PL/SQL procedure successfully completed. --//12M. $ cat bh_obj.sql /* Formatted on 2026-02-13 16:42:02 (QP5 v5.277) */ SELECT COUNT (*) FROM ( SELECT inst_id ,class# ,FILE# ,BLOCK# ,status ,lock_element_addr ,dirty ,temp ,ping ,stale ,direct ,new FROM gv$bh WHERE objd = (SELECT data_object_id FROM dba_objects WHERE object_name = UPPER ( CASE WHEN INSTR ('&1', '.') > 0 THEN SUBSTR ('&1', INSTR ('&1', '.') + 1) ELSE '&1' END) AND owner = UPPER ( CASE WHEN INSTR ('&1', '.') > 0 THEN UPPER (SUBSTR ('&1', 1, INSTR ('&1', '.') - 1)) ELSE USER END)) AND status != 'free' ORDER BY inst_id); 3.测试: --//测试前重启数据库,这样表t1不会加载到数据库缓存中。 --//session 1: SCOTT@book01p> @ spid ============================== SID : 2 SERIAL# : 34339 PROCESS : 9401 SERVER : DEDICATED SPID : 9403 PID : 8 P_SERIAL# : 6 KILL_COMMAND : alter system kill session '2,34339' immediate; PL/SQL procedure successfully completed. SCOTT@book01p> column value format 9999999 SCOTT@book01p> @ ses2z 2 "physical reads|physical reads direct|physical read IO requests" SID NAME VALUE ---------- ------------------------------ -------- 2 physical reads 242 2 physical reads cache 242 2 physical read IO requests 242 --//没有physical reads direct。 --//window 1: $ strace -fp 8778 -e pread,io_submit -y --//注:strace新版本支持-y参数,这样打开的文件句柄会同时显示文件名,便于观察。 --//session 1: SCOTT@book01p> @ bh_obj scott.t1 COUNT(*) ---------- 0 SCOTT@book01p> select count(*) from t1 ; COUNT(*) ---------- 69913 --//window 1: $ strace -fp 9403 -e pread,io_submit -y Process 9403 attached pread(256</u01/oradata/BOOK/book01p/system01.dbf>, "\6\242\0\0@]@\0\r\210\354\2\0\0\1\6F\321\0\0\2\0\0\0>\0\0\0\f\210\354\2"..., 8192, 195559424) = 8192 pread(256</u01/oradata/BOOK/book01p/system01.dbf>, "\6\242\0\0\210\214@\0\f\376'\4\0\0\1\6\275\265\0\0\1\0\0\0\35\0\0\0\v\376'\4"..., 8192, 294715392) = 8192 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "#\242\0\0\252\0\0\3\211\264%\4\0\0\1\4\367H\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192, 1392640) = 8192 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:106496, offset:1400832}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:122880, offset:1515520}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:122880, offset:1646592}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:122880, offset:1777664}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:122880, offset:1908736}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:57344, offset:2039808}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:65536, offset:3145728}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:122880, offset:3219456}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:122880, offset:3350528}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:2113536}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:2621440}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:4210688}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:4718592}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:5259264}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:5767168}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:6307840}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:6815744}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:7356416}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:7864320}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:8404992}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:8912896}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:9453568}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:9961472}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:10502144}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:11010048}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:11550720}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:12058624}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:12599296}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:524288, offset:13107200}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45dea540, pread, filedes:259, buf:0x7fee45497000, nbytes:507904, offset:13647872}}) = 1 io_submit(140661450588160, 1, {{data:0x7fee45de9e10, pread, filedes:259, buf:0x7fee45407000, nbytes:286720, offset:14155776}}) = 1 --//Sum = 12083200 --//前面2次system表空间的访问与递归执行的sql语句有关,采用pread函数。存在1次访问users表空间。 --//访问的是数据块1392640/8192 = 170。实际上表t1的段头。 SYS@book01p> @ seg2 scott.t1 '' SYS@book01p> @ pr ============================== SEG_MB : 12 SEG_OWNER : SCOTT SEG_SEGMENT_NAME : T1 SEG_PARTITION_NAME : SEG_SEGMENT_TYPE : TABLE SEG_TABLESPACE_NAME : USERS BLOCKS : 1536 HDRFIL : 12 HDRBLK : 170 PL/SQL procedure successfully completed. --//剩下的是函数io_submit,也就是采用异步IO。 --//将io_submit函数调用的nbytes后面的字节数值相加等于12083200。 106496+122880+122880+122880+122880+57344+65536+122880+122880+507904+524288+507904+524288+507904+524288+ 507904+524288+507904+524288+507904+524288+507904+524288+507904+524288+507904+524288+507904+524288+507904+286720 = 12083200 --//12083200/8192 = 1475 SCOTT@book01p> @ ses2z 2 "physical reads|physical reads direct|physical read IO requests" SID NAME VALUE ---------- ------------------------------ -------- 2 physical reads 1744 2 physical reads cache 269 2 physical reads direct 1475 2 physical read IO requests 300 --//physical reads direct=1475,与strace跟踪看到的一致。 SCOTT@book01p> @ bh_obj scott.t1 COUNT(*) ---------- 1 --//这也验证有1个数据块进入缓存,通过pread读取。 4.继续测试: --//session 1: SCOTT@book01p> select count(*) from t1 ; COUNT(*) ---------- 69913 SCOTT@book01p> @ bh_obj scott.t1 COUNT(*) ---------- 1474 SCOTT@book01p> @ ses2z 2 "physical reads|physical reads direct|physical read IO requests" SID NAME VALUE ---------- ------------------------------ -------- 2 physical reads 3219 2 physical reads cache 1744 2 physical reads direct 1475 2 physical read IO requests 337 --//第2次执行没有采用直接路径读,这也是我前面测试的遇到的问题。 --//window 1: $ strace -fp 9403 -e pread,io_submit -y Process 9403 attached pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\253\0\0\3N\264%\4\0\0\2\4\377\343\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 40960, 1400832) = 40960 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\260\0\0\3N\264%\4\0\0\2\4\325\246\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 1441792) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\271\0\0\3S\264%\4\0\0\2\0044\222\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 1515520) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\300\0\0\3S\264%\4\0\0\2\4\331\241\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 1572864) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\311\0\0\3W\264%\4\0\0\2\4$\211\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 1646592) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\320\0\0\3W\264%\4\0\0\2\4\200\227\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 1703936) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\331\0\0\3[\264%\4\0\0\2\4\363t\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 1777664) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\340\0\0\3[\264%\4\0\0\2\4\300\17\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 1835008) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\351\0\0\3_\264%\4\0\0\2\4\361\256\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 1908736) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\360\0\0\3_\264%\4\0\0\2\4< \0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 1966080) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\371\0\0\3a\264%\4\0\0\2\4\177\322\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 2039808) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\200\1\0\3c\264%\4\0\0\2\4b\366\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 3145728) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\211\1\0\3g\264%\4\0\0\2\4\211f\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 3219456) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\220\1\0\3g\264%\4\0\0\2\4U\16\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 3276800) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\231\1\0\3k\264%\4\0\0\2\4\376+\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 57344, 3350528) = 57344 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\240\1\0\3k\264%\4\0\0\2\4\310\306\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 65536, 3407872) = 65536 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\2\1\0\3m\264%\4\0\0\2\4\360\224\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 2113536) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0g\1\0\3m\264%\4\0\0\2\4\250\264\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 2940928) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\2\2\0\3o\264%\4\0\0\2\4'\315\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 4210688) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0g\2\0\3o\264%\4\0\0\2\4\210\274\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 5038080) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\202\2\0\3q\264%\4\0\0\2\4W8\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 5259264) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\347\2\0\3q\264%\4\0\0\2\4\234L\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 6086656) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\2\3\0\3s\264%\4\0\0\2\4\206\374\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 6307840) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0g\3\0\3s\264%\4\0\0\2\4K|\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 7135232) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\202\3\0\3u\264%\4\0\0\2\4rP\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 7356416) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\347\3\0\3u\264%\4\0\0\2\4\324o\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 8183808) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\2\4\0\3w\264%\4\0\0\2\4)\231\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 8404992) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0g\4\0\3w\264%\4\0\0\2\4\251e\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 9232384) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\202\4\0\3y\264%\4\0\0\2\4b>\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 9453568) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\347\4\0\3y\264%\4\0\0\2\4\305\346\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 10280960) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\2\5\0\3}\264%\4\0\0\2\4\37g\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 10502144) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0g\5\0\3}\264%\4\0\0\2\4\272^\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 11329536) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\202\5\0\3\177\264%\4\0\0\2\4\313=\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 11550720) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\347\5\0\3\177\264%\4\0\0\2\4\226Y\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 12378112) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\2\6\0\3\202\264%\4\0\0\2\4e\330\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 827392, 12599296) = 827392 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0g\6\0\3\202\264%\4\0\0\2\4\300\331\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 204800, 13426688) = 204800 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "\6\242\0\0\202\6\0\3\203\264%\4\0\0\2\4\303\251\0\0\1\0\0\0\331\346\2\0G\264%\4"..., 794624, 13647872) = 794624 --//可以发现第2次执行调用pread函数,数据块直接进入缓存,也就是在filesystemio_options=asynch的情况下,直接路径读采用异步 --//IO操作.还有点奇怪的是看等号的数值最大827392。 --//827392/8192 = 101,也就是当前数据库的db_file_multiblock_read_count设置101. SYS@book> show spparameter db_file_multiblock_read_count SID NAME TYPE VALUE -------- ----------------------------- ------------------------------ ---------------------------- * db_file_multiblock_read_count integer --//说明spfile文件里面没有设置db_file_multiblock_read_count。 SYS@book> @ hidez db_file_multiblock_read_count SYS@book> @ pr ============================== NUM : 2341 N_HEX : 925 CON_ID : 0 NAME : db_file_multiblock_read_count DESCRIPTION : db block to be read each IO DEFAULT_VALUE : TRUE SESSION_VALUE : 101 SYSTEM_VALUE : 101 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ISSES_MODIFIABLE : TRUE ISSYS_MODIFIABLE : IMMEDIATE PL/SQL procedure successfully completed. 5.补充strace跟踪pread,io_submit,io_getevents的情况: $ strace -fp 10476 -e pread,io_submit,io_getevents -y Process 10476 attached pread(256</u01/oradata/BOOK/book01p/system01.dbf>, "\6\242\0\0@]@\0\r\210\354\2\0\0\1\6F\321\0\0\2\0\0\0>\0\0\0\f\210\354\2"..., 8192, 195559424) = 8192 pread(256</u01/oradata/BOOK/book01p/system01.dbf>, "\6\242\0\0\210\214@\0\f\376'\4\0\0\1\6\275\265\0\0\1\0\0\0\35\0\0\0\v\376'\4"..., 8192, 294715392) = 8192 pread(259</u01/oradata/BOOK/book01p/users01.dbf>, "#\242\0\0\252\0\0\3\211\264%\4\0\0\1\4\367H\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192, 1392640) = 8192 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:106496, offset:1400832}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:122880, offset:1515520}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 106496, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 122880, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:122880, offset:1646592}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:122880, offset:1777664}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 122880, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 122880, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:122880, offset:1908736}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:57344, offset:2039808}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 122880, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 57344, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:65536, offset:3145728}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:122880, offset:3219456}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 65536, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 122880, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:122880, offset:3350528}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:2113536}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 122880, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:2621440}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:4210688}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:4718592}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:5259264}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:5767168}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:6307840}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:6815744}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:7356416}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:7864320}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:8404992}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:8912896}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:9453568}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:9961472}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:10502144}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:11010048}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:11550720}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:12058624}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:12599296}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:524288, offset:13107200}}) = 1 io_submit(140046100262912, 1, {{data:0x7f5f0008d540, pread, filedes:259, buf:0x7f5effefa000, nbytes:507904, offset:13647872}}) = 1 io_getevents(140046100262912, 2, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 524288, 0}, {0x7f5f0008d540, 0x7f5f0008d540, 507904, 0}}, {0, 0}) = 2 io_submit(140046100262912, 1, {{data:0x7f5f0008ce10, pread, filedes:259, buf:0x7f5effe6a000, nbytes:286720, offset:14155776}}) = 1 io_getevents(140046100262912, 1, 128, {{0x7f5f0008ce10, 0x7f5f0008ce10, 286720, 0}}, {0, 0}) = 1 6.看以前链接,如果表通过rowid+between定位,在对应数据块不再数据缓存时,会选择直接路径读,测试21c的情况。 SCOTT@book01p> @ spid ============================== SID : 390 SERIAL# : 22106 PROCESS : 5162 SERVER : DEDICATED SPID : 5164 PID : 43 P_SERIAL# : 5 KILL_COMMAND : alter system kill session '390,22106' immediate; PL/SQL procedure successfully completed. SCOTT@book01p> @ ses2z 390 "physical reads direct" no rows selected SCOTT@book01p> select rowid,dept.* from dept; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK AAASmfAAMAAAACDAAB 20 RESEARCH DALLAS AAASmfAAMAAAACDAAC 30 SALES CHICAGO AAASmfAAMAAAACDAAD 40 OPERATIONS BOSTON SCOTT@book01p> @ ses2z 390 "physical reads direct" no rows selected SCOTT@book01p> select rowid,dept.* from dept where rowid between 'AAASmfAAMAAAACDAAA' and 'AAASmfAAMAAAACDAAB'; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK AAASmfAAMAAAACDAAB 20 RESEARCH DALLAS --//对应数据块在数据库缓存。 SCOTT@book01p> @ ses2z 390 "physical reads direct" no rows selected --//当前会话没有physical reads direct操作。 SCOTT@book01p> alter system flush buffer_cache; System altered. SCOTT@book01p> select rowid,dept.* from dept where rowid between 'AAASmfAAMAAAACDAAA' and 'AAASmfAAMAAAACDAAB'; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK AAASmfAAMAAAACDAAB 20 RESEARCH DALLAS SCOTT@book01p> column value format 999999999 SCOTT@book01p> @ ses2z 390 "physical reads direct" SID NAME VALUE ---------- ------------------------------ ---------- 390 physical reads direct 1 SCOTT@book01p> select rowid,dept.* from dept where rowid between 'AAASmfAAMAAAACDAAA' and 'AAASmfAAMAAAACDAAB'; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK AAASmfAAMAAAACDAAB 20 RESEARCH DALLAS SCOTT@book01p> @ ses2z 390 "physical reads direct" SID NAME VALUE ---------- ------------------------------ ---------- 390 physical reads direct 2 --//相应数据块不再缓存,rowid+between出现physical reads direct。 --//使用strace跟踪: $ strace -fp 5164 -e pread,io_submit,io_getevents -y Process 5164 attached io_submit(140336933646336, 1, {{data:0x7fa2b6fb0e10, pread, filedes:257, buf:0x7fa2b71ee000, nbytes:8192, offset:1073152}}) = 1 io_getevents(140336933646336, 1, 128, {{0x7fa2b6fb0e10, 0x7fa2b6fb0e10, 8192, 0}}, {0, 0}) = 1 --//单独rowid访问第1次采用直接路径读。 SCOTT@book01p> select rowid,dept.* from dept where rowid = 'AAASmfAAMAAAACDAAA' ; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK SCOTT@book01p> @ ses2z 390 "physical reads direct" SID NAME VALUE ---------- ------------------------------ ---------- 390 physical reads direct 3 --//physical reads direct加1. SCOTT@book01p> select rowid,dept.* from dept where rowid = 'AAASmfAAMAAAACDAAA' ; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK SCOTT@book01p> @ ses2z 390 "physical reads direct" SID NAME VALUE ---------- ------------------------------ ---------- 390 physical reads direct 3 --//再次执行不再采用直接路径读。 SCOTT@book01p> select rowid,dept.* from dept where rowid between 'AAASmfAAMAAAACDAAA' and 'AAASmfAAMAAAACDAAB'; ROWID DEPTNO DNAME LOC ------------------ ---------- ------------------------------ ------------- AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK AAASmfAAMAAAACDAAB 20 RESEARCH DALLAS SCOTT@book01p> @ ses2z 390 "physical reads direct" SID NAME VALUE ---------- ------------------------------ ---------- 390 physical reads direct 3 --//数据块已经在数据缓存,不再采用直接路径读。
[20260216]直接路径读与filesystemio_options=asynch(21c).txt
来源:这里教程网
时间:2026-03-03 23:30:25
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 跃出屏幕,拥抱AI,爱奇艺的自洽与升维
跃出屏幕,拥抱AI,爱奇艺的自洽与升维
26-03-03 - 【MATLAB源码】OTFS/OCDM/AFDM:高机动 NTN 均衡对比仿真平台
- MySQL、Oracle数据库容器部署完整版指南(可直接复制)
MySQL、Oracle数据库容器部署完整版指南(可直接复制)
26-03-03 - 持续推进供需规模增长,瑞幸2025门店与用户基数实现双突破
持续推进供需规模增长,瑞幸2025门店与用户基数实现双突破
26-03-03 - 记一次 Oracle 备份任务自动终止案例分析
记一次 Oracle 备份任务自动终止案例分析
26-03-03 - 记几种手工推进 Oracle SCN 的操作方法案例分析
记几种手工推进 Oracle SCN 的操作方法案例分析
26-03-03 - Oracle Redo 误删数据库强制打开案例分析(上)
Oracle Redo 误删数据库强制打开案例分析(上)
26-03-03 - 数据库数据恢复—ASM问题下Oracle数据如何恢复?
数据库数据恢复—ASM问题下Oracle数据如何恢复?
26-03-03 - 记一次 ora.net1.network 掩码问题导致 RFS 传输失败案例分析
- 记一次 Windows 上安装 Oracle 19c 向导卡顿案例分析
记一次 Windows 上安装 Oracle 19c 向导卡顿案例分析
26-03-03
