• [20181130]control file sequential read.txt


    [20181130]control file sequential read.txt

    --//昨天上午探究了大量控制文件读的情况,链接:http://blog.itpub.net/267265/viewspace-2222146/
    --//今天做一些细节探究:

    1.环境:
    SYS@xxxxx1> @ ver1

    PORT_STRING                    VERSION        BANNER
    ------------------------------ -------------- --------------------------------------------------------------------------------
    x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

    --//建立执行脚本如下:
    $ cat c.txt
    select 'flashpct;'||trim(ceil(percent_space_used)) from V$FLASH_RECOVERY_AREA_USAGE where file_type='FLASHBACK LOG'
    union all
    select 'flashtime;'||to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') from V$FLASHBACK_DATABASE_LOG;

    --//session 1:
    SYS@xxxxx1> @ spid
           SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
    ---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
            60      26633 1442                     DEDICATED 1443       418        203 alter system kill session '60,26633' immediate;
    --//记下spid=1443.

    2.使用strace跟踪
    --//session 2:
    $ strace -p 1443 -t -e pread  -o /tmp/aa1

    --//切换到session 1:
    SYS@xxxxx1> @ c.txt
    'FLASHPCT;'||TRIM(CEIL(PERCENT_SPACE_USED))
    -------------------------------------------------
    flashpct;0

    --//session 2,按ctrl+c退出:
    # strace -p 1443 -t -e pread  -o /tmp/aa1
    Process 1443 attached - interrupt to quit
    ^CProcess 1443 detached

    # cat /tmp/aa1
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "25302J31255333837737714B27"..., 16384, 476741632) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "253021143553764 v+^3665"..., 16384, 480264192) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(258, "253020003B261333837737714[ 30f3407"..., 16384, 477626368) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(258, "253020003B261333837737714[ 30f3407"..., 16384, 477626368) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "25302r306333263837737714{Z32+D"..., 16384, 475168768) = 16384
    16:10:10 pread(256, "25302s377254333837737714u31"..., 16384, 475185152) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "25302i4P<333837737714(324=2301v301;"..., 16384, 480395264) = 16384
    16:10:10 pread(258, "25302|420021233383773771425qL20002Z(2;"..., 16384, 480444416) = 16384
    16:10:10 pread(257, "253022324<r333837737714345354`2`4301]3;"..., 16384, 478445568) = 16384
    16:10:10 pread(257, "253023014!{3338377377143247216230110r3015;"..., 16384, 477511680) = 16384
    16:10:10 pread(257, "2530235500525432183773771437627435021772136724;"..., 16384, 478756864) = 16384
    16:10:10 pread(258, "2530232310040333837737714261306R3650; 51342225"..., 16384, 473874432) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(257, "25302T2qD240737737714251au3322047"..., 16384, 475201536) = 16384
    16:10:10 pread(257, "25302U2262342263837737714U226bracontrolfi"..., 16384, 475217920) = 16384
    16:10:10 pread(258, "25302X2 201270837737714 :"..., 16384, 476184576) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "253021143553764 v+^3665"..., 16384, 480264192) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(258, "253020003B261333837737714[ 30f3407"..., 16384, 477626368) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(258, "253020003B261333837737714[ 30f3407"..., 16384, 477626368) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(256, "253021143553764 v+^3665"..., 16384, 472924160) = 16384
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(258, "25302)J261333837737714365343k2372047"..., 16384, 473972736) = 16384
    16:10:10 pread(258, "253020003B261333837737714[ 30f3407"..., 16384, 477626368) = 16384

    # rev /tmp/aa1 | cut -f1 -d'=' | rev | sed -e 's/$/+/g' -e '$s/+$//g'| xargs echo| bc -l
    950272

    --//可以读的文件句柄是256,257,258.
    # ls -l /proc/1443/fd | grep 25[678]
    lrwx------ 1 root root 64 2018-11-29 16:10:11 256 -> /dev/asm-diskf
    lrwx------ 1 root root 64 2018-11-29 16:10:11 257 -> /dev/asm-diskg
    lrwx------ 1 root root 64 2018-11-29 16:10:11 258 -> /dev/asm-diske
    --//可以发现对应以上裸设备.

    --//单独看两个:
    16:10:10 pread(257, "25302'J261333837737714}OP200"..., 16384, 473022464) = 16384
    16:10:10 pread(257, "253021143553764 v+^3665"..., 16384, 480264192) = 16384

    $ man pread
    PREAD(2)  Linux Programmer's Manual                                PREAD(2)

    NAME
           pread, pwrite - read from or write to a file descriptor at a given offset

    SYNOPSIS
           #define _XOPEN_SOURCE 500
           #include
           ssize_t pread(int fd, void *buf, size_t count, off_t offset);
           ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
    --//第1个是句柄,第2个参数缓存地址指针,第3个是读取长度,第4个是偏移量。

    473022464/1024/1024 = 451.10937500000000000000
    480264192/1024/1024 = 458.01562500000000000000

    --//以grid用户登录,访问asm实例:
    SQL> column path format a40
    SQL> select DISK_NUMBER,GROUP_NUMBER,PATH from v$asm_disk where GROUP_NUMBER=1 and DISK_NUMBER in(1,0,2) order by 1;
    DISK_NUMBER GROUP_NUMBER PATH
    ----------- ------------ ----------------------------------------
              0            1 /dev/asm-diske
              1            1 /dev/asm-diskf
              2            1 /dev/asm-diskg

    SQL> SELECT disk_kffxp, au_kffxp, xnum_kffxp,GROUP_KFFXP,NUMBER_KFFXP  FROM x$kffxp  WHERE (au_kffxp=451 or  au_kffxp=458) and disk_kffxp=2;
    DISK_KFFXP   AU_KFFXP XNUM_KFFXP GROUP_KFFXP NUMBER_KFFXP
    ---------- ---------- ---------- ----------- ------------
             2        458          0           1          260
             2        451          4           1          261

    --//NUMBER_KFFXP对应的是260,261.
    --//使用asmcmd查看:

    $ rlwrap asmcmd -p
    ASMCMD [+] > ls -l data/xxxxx/controlfile
    Type         Redund  Striped  Time                  Sys  Name
    CONTROLFILE  UNPROT  FINE     2018/08/20 01:00:00                Y    Current.260.931438443
    CONTROLFILE  UNPROT  FINE     2018/08/20 01:00:00                Y    Current.261.931438443

    --//如下查询:

    SQL> column type format a12
    SQL> select * from v$asm_file where TYPE='CONTROLFILE' order by type;
    GROUP_NUMBER FILE_NUMBER COMPOUND_INDEX INCARNATION BLOCK_SIZE     BLOCKS      BYTES      SPACE TYPE         REDUND STRIPE CREATION_ MODIFICAT R PERMISSIONS      USER_NUMBER USER_INCARNATION USERGROUP_NUMBER USERGROUP_INCARNATION PRIM MIRR  HOT_READS HOT_WRITES HOT_BYTES_READ HOT_BYTES_WRITTEN COLD_READS COLD_WRITES COLD_BYTES_READ COLD_BYTES_WRITTEN
    ------------ ----------- -------------- ----------- ---------- ---------- ---------- ---------- ------------ ------ ------ --------- --------- - ---------------- ----------- ---------------- ---------------- --------------------- ---- ---- ---------- ---------- -------------- ----------------- ---------- ----------- --------------- ------------------
               1         260       16777476   931438443      16384       1837   30097408   33554432 CONTROLFILE  UNPROT FINE   24-DEC-16 20-AUG-18 U rw-rw-rw-                  0                0                0                     0 COLD COLD          0          0            0                  0     3146179    13420526      5.1548E+10         2.1988E+11
               1         261       16777477   931438443      16384       1837   30097408   33554432 CONTROLFILE  UNPROT FINE   24-DEC-16 20-AUG-18 U rw-rw-rw-                  0                0                0                     0 COLD COLD          0          0            0                  0   283440487    13420559      1.9953E+13         2.1988E+11

    --//再次证明读取的是控制文件.

    3.疑问:
    # rev /tmp/aa1 | cut -f1 -d'=' | rev | sed -e 's/$/+/g' -e '$s/+$//g'| xargs echo| bc -l
    950272

    --//我跟踪看到的读950272.950272/1024 = 928K.

    SYS@xxxxx1> @ viewsess 'physical read total'
    NAME                                                                   STATISTIC#      VALUE        SID
    ---------------------------------------------------------------------- ---------- ---------- ----------
    physical read total IO requests                                                50          0        714
    physical read total multi block requests                                       51          0        714
    physical read total bytes optimized                                            53          0        714
    physical read total bytes                                                      55          0        714

    SYS@xxxxx1> @ c.txt
    'FLASHPCT;'||TRIM(CEIL(PERCENT_SPACE_USED))
    -------------------------------------------------
    flashpct;0

    SYS@xxxxx1> @ viewsess 'physical read total'
    NAME                                                                   STATISTIC#      VALUE        SID
    ---------------------------------------------------------------------- ---------- ---------- ----------
    physical read total IO requests                                                50         73        714
    physical read total multi block requests                                       51         15        714
    physical read total bytes optimized                                            53          0        714
    physical read total bytes                                                      55   13828096        714

    --//13828096/1024/1024 = 13.1875M,为什么呢?
    # wc /tmp/aa1
      58  422 7310 /tmp/aa1

    --//我重复使用strace做了跟踪:
    # strace -p 24584 -t  -o /tmp/aa2
    # strace -p 24584 -t  -c
    Process 24584 attached - interrupt to quit
    ^CProcess 24584 detached
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
      -nan    0.000000           0         4           read
      -nan    0.000000           0         2           write
      -nan    0.000000           0         2           open
      -nan    0.000000           0         2           close
      -nan    0.000000           0         2           mmap
      -nan    0.000000           0        58           pread
      -nan    0.000000           0         4           semctl
      -nan    0.000000           0        20           getrusage
      -nan    0.000000           0        16           times
      -nan    0.000000           0        16           io_getevents
      -nan    0.000000           0        15           io_submit
      -nan    0.000000           0         2           semtimedop
    ------ ----------- ----------- --------- --------- ----------------
    100.00    0.000000                   143           total

    --//可以看到io_submit异步IO操作.等于15,正好和physical read total multi block requests的数值一致.
    --//pread=58(与wc /tmp/aa1看到一致),io_submit=15,相加正好与physical read total IO requests=73一致.不知道是否是巧合.我对异步io操作的函数不熟悉.

    16:45:26 io_submit(140402112221184, 8, {{0x7fb1e81f8210, 0, 0, 0, 256}, {0x7fb1e81f8480, 0, 0, 0, 258},
                                            {0x7fb1e81f86f0, 0, 0, 0, 257}, {0x7fb1e81f8960, 0, 0, 0, 258},
                                            {0x7fb1e81f8bd0, 0, 0, 0, 257}, {0x7fb1e81f8e40, 0, 0, 0, 256},
                                            {0x7fb1e81f90b0, 0, 0, 0, 258}, {0x7fb1e81f9320, 0, 0, 0, 257}}) = 8

    --//猜测里面的256,257,258对应文件句柄.

    # man io_submit
    IO_SUBMIT(2)               Linux Programmer's Manual              IO_SUBMIT(2)

    NAME
           io_submit - submit asynchronous I/O blocks for processing

    SYNOPSIS
           #include <libaio.h>

           int io_submit(aio_context_t ctx_id, long nr, struct iocb **iocbpp);

           Link with -laio.

    DESCRIPTION
           io_submit() queues nr I/O request blocks for processing in the AIO context ctx_id.  iocbpp should be an array of
           nr AIO control blocks, which will be submitted to context ctx_id.

    # man io_getevents
    IO_GETEVENTS(2)            Linux Programmer's Manual           IO_GETEVENTS(2)

    NAME
           io_getevents - read asynchronous I/O events from the completion queue

    SYNOPSIS
           #include <linux/time.h>
           #include <libaio.h>

           int io_getevents(aio_context_t ctx_id, long min_nr, long nr,
                            struct io_event *events, struct timespec *timeout);

           Link with -laio.

    DESCRIPTION
           io_getevents()  attempts  to read at least min_nr events and up to nr events from the completion queue of the AIO
           context specified by ctx_id.  timeout specifies the amount of time to wait for events, where a NULL timeout waits
           until at least min_nr events have been seen.  Note that timeout is relative and will be updated if not NULL and
           the operation blocks.
           

    # egrep 'io_submit|io_getevents' /tmp/aa2
    16:45:26 io_submit(140402112221184, 8, {{0x7fb1e81f8210, 0, 0, 0, 256}, {0x7fb1e81f8480, 0, 0, 0, 258}, {0x7fb1e81f86f0, 0, 0, 0, 257}, {0x7fb1e81f8960, 0, 0, 0, 258}, {0x7fb1e81f8bd0, 0, 0, 0, 257}, {0x7fb1e81f8e40, 0, 0, 0, 256}, {0x7fb1e81f90b0, 0, 0, 0, 258}, {0x7fb1e81f9320, 0, 0, 0, 257}}) = 8
    16:45:26 io_getevents(140402112221184, 8, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 81920, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}}, {600, 0}) = 8
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 257}, {0x7fb1e81f8480, 0, 0, 0, 256}, {0x7fb1e81f86f0, 0, 0, 0, 258}, {0x7fb1e81f8960, 0, 0, 0, 257}, {0x7fb1e81f8bd0, 0, 0, 0, 258}, {0x7fb1e81f8e40, 0, 0, 0, 257}, {0x7fb1e81f90b0, 0, 0, 0, 256}, {0x7fb1e81f9320, 0, 0, 0, 258}, {0x7fb1e81f9590, 0, 0, 0, 257}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 81920, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 49152, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}}, {600, 0}) = 9
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 257}, {0x7fb1e81f8480, 0, 0, 0, 256}, {0x7fb1e81f86f0, 0, 0, 0, 258}, {0x7fb1e81f8960, 0, 0, 0, 257}, {0x7fb1e81f8bd0, 0, 0, 0, 258}, {0x7fb1e81f8e40, 0, 0, 0, 257}, {0x7fb1e81f90b0, 0, 0, 0, 256}, {0x7fb1e81f9320, 0, 0, 0, 258}, {0x7fb1e81f9590, 0, 0, 0, 257}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 81920, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 49152, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}}, {600, 0}) = 9
    16:45:26 io_submit(140402112221184, 5, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 258}, {0x7fb1e81f8bd0, 0, 0, 0, 257}}) = 5
    16:45:26 io_getevents(140402112221184, 5, 128, {{0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 81920, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 49152, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}}, {600, 0}) = 5
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 258}, {0x7fb1e81f8bd0, 0, 0, 0, 257}, {0x7fb1e81f8e40, 0, 0, 0, 256}, {0x7fb1e81f90b0, 0, 0, 0, 258}, {0x7fb1e81f9320, 0, 0, 0, 257}, {0x7fb1e81f9590, 0, 0, 0, 256}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}}, {0, 0}) = 1
    16:45:26 io_getevents(140402112221184, 8, 128, {{0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 114688, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}}, {600, 0}) = 8
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 257}, {0x7fb1e81f8bd0, 0, 0, 0, 256}, {0x7fb1e81f8e40, 0, 0, 0, 258}, {0x7fb1e81f90b0, 0, 0, 0, 257}, {0x7fb1e81f9320, 0, 0, 0, 256}, {0x7fb1e81f9590, 0, 0, 0, 258}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 114688, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}}, {600, 0}) = 9
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 257}, {0x7fb1e81f8bd0, 0, 0, 0, 256}, {0x7fb1e81f8e40, 0, 0, 0, 258}, {0x7fb1e81f90b0, 0, 0, 0, 257}, {0x7fb1e81f9320, 0, 0, 0, 256}, {0x7fb1e81f9590, 0, 0, 0, 258}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 114688, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}}, {600, 0}) = 9
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 257}, {0x7fb1e81f8bd0, 0, 0, 0, 256}, {0x7fb1e81f8e40, 0, 0, 0, 258}, {0x7fb1e81f90b0, 0, 0, 0, 257}, {0x7fb1e81f9320, 0, 0, 0, 256}, {0x7fb1e81f9590, 0, 0, 0, 258}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 114688, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}}, {600, 0}) = 9
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 257}, {0x7fb1e81f8bd0, 0, 0, 0, 256}, {0x7fb1e81f8e40, 0, 0, 0, 258}, {0x7fb1e81f90b0, 0, 0, 0, 257}, {0x7fb1e81f9320, 0, 0, 0, 256}, {0x7fb1e81f9590, 0, 0, 0, 258}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}}, {0, 0}) = 1
    16:45:26 io_getevents(140402112221184, 8, 128, {{0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 114688, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}}, {600, 0}) = 8
    16:45:26 io_submit(140402112221184, 3, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}}) = 3
    16:45:26 io_getevents(140402112221184, 3, 128, {{0x7fb1e81f86f0, 0x7fb1e81f86f0, 114688, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 49152, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}}, {600, 0}) = 3
    16:45:26 io_submit(140402112221184, 3, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 258}}) = 3
    16:45:26 io_getevents(140402112221184, 3, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 114688, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 81920, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}}, {600, 0}) = 3
    16:45:26 io_submit(140402112221184, 6, {{0x7fb1e81f8210, 0, 0, 0, 257}, {0x7fb1e81f8480, 0, 0, 0, 258}, {0x7fb1e81f86f0, 0, 0, 0, 257}, {0x7fb1e81f8960, 0, 0, 0, 256}, {0x7fb1e81f8bd0, 0, 0, 0, 258}, {0x7fb1e81f8e40, 0, 0, 0, 257}}) = 6
    16:45:26 io_getevents(140402112221184, 6, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 114688, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}}, {600, 0}) = 6
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 257}, {0x7fb1e81f8480, 0, 0, 0, 258}, {0x7fb1e81f86f0, 0, 0, 0, 257}, {0x7fb1e81f8960, 0, 0, 0, 256}, {0x7fb1e81f8bd0, 0, 0, 0, 258}, {0x7fb1e81f8e40, 0, 0, 0, 257}, {0x7fb1e81f90b0, 0, 0, 0, 256}, {0x7fb1e81f9320, 0, 0, 0, 258}, {0x7fb1e81f9590, 0, 0, 0, 257}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 114688, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}}, {600, 0}) = 9
    16:45:26 io_submit(140402112221184, 7, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 258}, {0x7fb1e81f8bd0, 0, 0, 0, 257}, {0x7fb1e81f8e40, 0, 0, 0, 256}, {0x7fb1e81f90b0, 0, 0, 0, 258}}) = 7
    16:45:26 io_getevents(140402112221184, 7, 128, {{0x7fb1e81f8210, 0x7fb1e81f8210, 81920, 0}, {0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 16384, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}}, {600, 0}) = 7
    16:45:26 io_submit(140402112221184, 9, {{0x7fb1e81f8210, 0, 0, 0, 258}, {0x7fb1e81f8480, 0, 0, 0, 257}, {0x7fb1e81f86f0, 0, 0, 0, 256}, {0x7fb1e81f8960, 0, 0, 0, 258}, {0x7fb1e81f8bd0, 0, 0, 0, 257}, {0x7fb1e81f8e40, 0, 0, 0, 256}, {0x7fb1e81f90b0, 0, 0, 0, 258}, {0x7fb1e81f9320, 0, 0, 0, 257}, {0x7fb1e81f9590, 0, 0, 0, 256}}) = 9
    16:45:26 io_getevents(140402112221184, 9, 128, {{0x7fb1e81f86f0, 0x7fb1e81f86f0, 131072, 0}, {0x7fb1e81f8210, 0x7fb1e81f8210, 49152, 0}, {0x7fb1e81f8480, 0x7fb1e81f8480, 131072, 0}, {0x7fb1e81f8e40, 0x7fb1e81f8e40, 131072, 0}, {0x7fb1e81f9590, 0x7fb1e81f9590, 81920, 0}, {0x7fb1e81f8bd0, 0x7fb1e81f8bd0, 131072, 0}, {0x7fb1e81f9320, 0x7fb1e81f9320, 131072, 0}, {0x7fb1e81f90b0, 0x7fb1e81f90b0, 131072, 0}, {0x7fb1e81f8960, 0x7fb1e81f8960, 131072, 0}}, {600, 0}) = 9

    --//我的感觉把io_getevents 函数里面的16384,131072加起来就是读取的字节总数.

    # grep 'io_getevents' /tmp/aa2 | sed '1,$s/{/^J/g' | grep "^0x" | cut -f3 -d, | sed -e 's/$/+/g' -e '$s/+$//g'| xargs echo| bc -l
    12877824

    --//12877824+950272 = 13828096
    --//^_^.正好和如下看到的一致.佩服一下自己..^_^.

    SYS@xxxxx1> @ viewsess 'physical read total'
    NAME                                                                   STATISTIC#      VALUE        SID
    ---------------------------------------------------------------------- ---------- ---------- ----------
    physical read total IO requests                                                50         73        714
    physical read total multi block requests                                       51         15        714
    physical read total bytes optimized                                            53          0        714
    physical read total bytes                                                      55   13828096        714

    ---//简单说明一下以上命令.# grep 'io_getevents' /tmp/aa2 | sed '1,$s/{/^J/g' | grep "^0x" | cut -f3 -d, | sed -e 's/$/+/g' -e '$s/+$//g'| xargs echo| bc -l
    1. grep 'io_getevents' /tmp/aa2 --//过滤出来io_getevents函数.
    2. sed '1,$s/{/^J/g'           --//将{替换为回车,^J在linux下先输入ctrl+v在按ctrl+enter就可以了,前面的避免转义.
    3. grep "^0x"                   --//过滤0x开头的行.
    # grep 'io_getevents' /tmp/aa2 | sed '1,$s/{/^J/g' | grep "^0x" | head -1
    0x7fb1e81f8210, 0x7fb1e81f8210, 16384, 0},

    4.cut -f3 -d,                   --//以,为分隔符,取第3个字段.也就是里面16384.输出.
    5.sed -e 's/$/+/g' -e '$s/+$//g'--//在每行结尾加入+,最后一行删除+号.

    # grep 'io_getevents' /tmp/aa2 | sed '1,$s/{/^J/g' | grep "^0x" | cut -f3 -d, | sed -e 's/$/+/g' -e '$s/+$//g' | tail -5
     81920+
     131072+
     131072+
     131072+
     131072

    6.xargs echo                   --//也就是把多行变成一行,这里注意命令行缓存大小,一般情况下不会溢出的.
    7.bc -l                        --//也就是计算.

    --//顺便说一下bash shell编程一般不考虑执行效率,仅仅考虑快速编程,完成对应的工作.估计awk也许更好.

    4.总结:
    --//写这篇blog我参考以前遇到的问题,链接:http://blog.itpub.net/267265/viewspace-751787/,当时我应该看到读取调用函数是pread.
    --//这个函数应该不支持异步IO.仅仅io_submit,io_getevents才表明系统执行异步IO.

    --//也就是讲实际上就算是asm系统,实际上有1部分读取使用pread函数.而不是全部使用异步IO.


  • 相关阅读:
    索引
    convert 时间转换
    SQL中的case when then else end用法
    SVN安装图解
    dos 命令
    阿里云服务器相关知识
    mvc知识应用
    MVC分页
    mvc系统过滤器
    .net 接口
  • 原文地址:https://www.cnblogs.com/lfree/p/10043013.html
Copyright © 2020-2023  润新知