博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[20180316]异步IO和共享服务模式.txt
阅读量:6177 次
发布时间:2019-06-21

本文共 6298 字,大约阅读时间需要 20 分钟。

[20180316]异步IO和共享服务模式.txt

--//在共享服务器模式下,不会使用异步IO,通过例子证明.

1.环境:

SYS@book> @ &r/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

SYS@book> alter system set filesystemio_options=asynch scope=spfile;

System altered.

--//重启数据库.

SCOTT@book> show sga

Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes

SCOTT@book> show parameter disk_asynch_io

NAME                 TYPE    VALUE
-------------------- ------- ------
disk_asynch_io       boolean TRUE

SCOTT@book> show parameter filesystemio_options

NAME                 TYPE    VALUE
-------------------- ------- -------
filesystemio_options string  ASYNCH

SCOTT@book> create table t as select rownum id from dual connect by level<=2;

Table created.

SCOTT@book> ALTER TABLE t MINIMIZE RECORDS_PER_BLOCK ;

Table altered.
--//这样可以实现每块2条记录.

SCOTT@book> insert into t select rownum+2 from dual connect by level <=8e4-2;

79998 rows created.

SCOTT@book> commit ;

Commit complete.

--//分析表略.

SCOTT@book> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,HEADER_FILE,HEADER_BLOCK,BYTES,BLOCKS from dba_segments where owner=user and segment_name='T';

OWNER  SEGMENT_NAME         SEGMENT_TYPE       HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS
------ -------------------- ------------------ ----------- ------------ ---------- ----------
SCOTT  T                    TABLE                        4          546  333447168      40704

--//占用 333447168/1024/1024 = 318M

SCOTT@book> select object_id,data_object_id from dba_objects where owner=user and object_name='T';

OBJECT_ID DATA_OBJECT_ID
---------- --------------
     90467          90467

2.测试使用专用模式连接:

SCOTT@book> alter system flush buffer_cache;
System altered.

SCOTT@book> alter session set statistics_level=all;

Session altered.

SCOTT@book> @ &r/spid

       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50

---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
       274          5 49118                    DEDICATED 49119       21          3 alter system kill session '274,5' immediate;;

--//SERVER=DEDICATED,进程号=49119.启动$ strace -f -p 49119  -c,然后执行:

SCOTT@book> select count(*) from t;
  COUNT(*)
----------
     80000

$ strace -f -p 49119  -c

Process 49119 attached - interrupt to quit
^CProcess 49119 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
99.62    0.028456          87       326           io_submit
  0.16    0.000045           1        86           pread
  0.13    0.000036           0       164           io_getevents
  0.09    0.000027           7         4           mmap
  0.00    0.000000           0         2           read
  0.00    0.000000           0         2           write
  0.00    0.000000           0        82           getrusage
  0.00    0.000000           0        32           times
------ ----------- ----------- --------- --------- ----------------
100.00    0.028564                   698           total

--//可以发现调用io_submit,io_getevents.说明启动异步IO.

3.测试使用共享模式连接:

$ rlsql scott/book@127.0.0.1:1521/book
..
SCOTT@127.0.0.1:1521/book> alter system flush buffer_cache;
System altered.

SCOTT@127.0.0.1:1521/book> alter session set statistics_level=all;

Session altered.

SCOTT@127.0.0.1:1521/book> @ &r/spid

       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50

---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
       261          1 49156                    SHARED    49063       20          1 alter system kill session '261,1' immediate;

$ ps -ef | grep 4906[3]

oracle   49063     1  0 15:33 ?        00:00:00 ora_s000_book

--//SERVER=SHARED,进程号=49063.查询进程号49063对应ora_s000_book,说明使用共享服务模式.启动 strace -f -p 49063  -c,然后执行:

SCOTT@book> select count(*) from t;
  COUNT(*)
----------
     80000

$ strace -f -p 49063  -c

Process 49063 attached - interrupt to quit
^CProcess 49063 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
99.84    0.011918          35       336           pread
  0.16    0.000019           1        27           getrusage
  0.00    0.000000           0         2           read
  0.00    0.000000           0         2           poll
  0.00    0.000000           0         2           sendto
  0.00    0.000000           0        25           times
  0.00    0.000000           0         1           restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.011937                   395           total

--//使用pread,read函数.不存在调用io_submit,io_getevents函数.说明在共享模式下不会使用异步IO.

--//加上上午的测试,说明在共享模式下,不会使用异步IO以及直接路径读特性.
--//以后工作中遇到这类问题主要.
--//补充启用DRCP连接的情况,好像使用很少有人使用这个特性.

4.测试drcp:

SYS@book> exec dbms_connection_pool.start_pool()

PL/SQL procedure successfully completed.

$ rlsql scott/book@127.0.0.1:1521/book:POOLED

SCOTT@127.0.0.1:1521/book:POOLED> alter session set statistics_level=all;

Session altered.

SCOTT@127.0.0.1:1521/book:POOLED> alter system flush buffer_cache;

System altered.

SCOTT@127.0.0.1:1521/book:POOLED> @ &r/spid

       SID    SERIAL# PROCESS                  SERVER    SPID       PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
        94          1 49221                    POOLED    49204       31          1 alter system kill session '94,1' immediate;

--//SERVER=POOLED,进程号=49204.启动 strace -f -p 49204  -c,然后执行:

SCOTT@127.0.0.1:1521/book:POOLED> @ &r/viewsess "physical reads direct"
NAME                                                                   STATISTIC#      VALUE        SID
---------------------------------------------------------------------- ---------- ---------- ----------
physical reads direct                                                          97          0         94
physical reads direct temporary tablespace                                    110          0         94
physical reads direct (lob)                                                   176          0         94

$ strace -f -p 49204  -c

...//等
.
SCOTT@127.0.0.1:1521/book:POOLED> select count(*) from t;
  COUNT(*)
----------
     80000

SCOTT@127.0.0.1:1521/book:POOLED> @ &r/viewsess "physical reads direct"

NAME                                                                   STATISTIC#      VALUE        SID
---------------------------------------------------------------------- ---------- ---------- ----------
physical reads direct                                                          97      40217         94
physical reads direct temporary tablespace                                    110          0         94
physical reads direct (lob)                                                   176          0         94

$ strace -f -p 49204  -c

Process 49204 attached - interrupt to quit
^CProcess 49204 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
98.17    0.019632          60       326           io_submit
  1.11    0.000221          74         3           munmap
  0.57    0.000113          28         4           write
  0.16    0.000031           2        13           mmap
  0.00    0.000000           0         4           read
  0.00    0.000000           0         1           poll
  0.00    0.000000           0         4           pread
  0.00    0.000000           0        39           getrusage
  0.00    0.000000           0        30           times
  0.00    0.000000           0       164           io_getevents
------ ----------- ----------- --------- --------- ----------------
100.00    0.019997                   588           total

--//可以发现启动drcp连接调用io_submit,io_getevents,也就是会使用异步IO以及直接路径读特性.

转载地址:http://oqzda.baihongyu.com/

你可能感兴趣的文章
浅析Java NIO
查看>>
企业级 SpringBoot 教程 (一)构建第一个SpringBoot工程
查看>>
学习云计算技术前景在哪里?云计算技术发展趋势
查看>>
干货|比特币如何产生与交易
查看>>
前端处理后端接口传递过来的图片文件
查看>>
react中的可控组件与非可控组件
查看>>
回调函数
查看>>
Android基础—四大组件之Activity
查看>>
Nginx 学习笔记
查看>>
你为什么选择程序员这个职业?
查看>>
[译] 用于 iOS 的 ML Kit 教程:识别图像中的文字
查看>>
有关https的SSL加密方式
查看>>
ES6的开发环境搭建
查看>>
iOS JSON、XML解析技巧
查看>>
Android下InputStream发生网络中断时的解决办法的代码
查看>>
8 jQuery学习笔记第八节 Jq的效果之自定义动画
查看>>
8月不支持 64 位,App 将无法上架 Google Play!需要怎么做?
查看>>
Vs - 基于 d3.js 和 vue.js 的数据可视化
查看>>
优雅地使用loading
查看>>
Node8.0 之 Napi 探秘
查看>>