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

简介: [20180316]异步IO和共享服务模式.txt --//在共享服务器模式下,不会使用异步IO,通过例子证明. 1.环境: SYS@book> @ &r/ver1 PORT_STRING          VERSION    BANNER --...

[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以及直接路径读特性.

目录
相关文章
|
28天前
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
在Python的并发编程世界中,没有万能的解决方案,只有最适合特定场景的方法。希望本文能够为你拨开迷雾,找到那条通往高效并发编程的光明大道。
35 2
|
2月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
37 4
|
6月前
|
调度 数据库 Python
【专栏】异步IO在处理IO密集型任务中的高效性
【4月更文挑战第27天】本文介绍了Python并发编程和异步IO,包括并发的基本概念(多线程、多进程、协程),线程与进程的实现(threading和multiprocessing模块),协程的使用(asyncio模块),以及异步IO的原理和优势。强调了异步IO在处理IO密集型任务中的高效性,指出应根据任务类型选择合适的并发技术。
155 2
|
2月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
在数据驱动时代,高效处理大规模数据和高并发请求至关重要。Python凭借其优雅的语法和强大的库支持,成为开发者首选。本文将介绍Python中的并发与异步编程,涵盖并发与异步的基本概念、IO密集型任务的并发策略、CPU密集型任务的并发策略以及异步IO的应用。通过具体示例,展示如何使用`concurrent.futures`、`asyncio`和`multiprocessing`等库提升程序性能,帮助开发者构建高效、可扩展的应用程序。
60 0
|
4月前
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
【7月更文挑战第17天】Python并发编程中,异步编程(如`asyncio`)在IO密集型任务中提高效率,利用等待时间执行其他任务。但对CPU密集型任务,由于GIL限制,多线程效率不高,此时应选用`multiprocessing`进行多进程并行计算以突破限制。选择合适的并发策略是关键:异步适合IO,多进程适合CPU。理解这些能帮助构建高效并发程序。
104 6
|
4月前
|
开发框架 并行计算 .NET
从菜鸟到大神:Python并发编程深度剖析,IO与CPU的异步战争!
【7月更文挑战第18天】Python并发涉及多线程、多进程和异步IO(asyncio)。异步IO适合IO密集型任务,如并发HTTP请求,能避免等待提高效率。多进程在CPU密集型任务中更优,因可绕过GIL限制实现并行计算。通过正确选择并发策略,开发者能提升应用性能和响应速度。
103 3
|
4月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
【7月更文挑战第17天】在数据驱动时代,Python凭借其优雅语法和强大库支持成为并发处理大规模数据的首选。并发与异步编程是关键,包括多线程、多进程和异步IO。对于IO密集型任务,如网络请求,可使用`concurrent.futures`和`asyncio`;CPU密集型任务则推荐多进程,如`multiprocessing`;`asyncio`适用于混合任务,实现等待IO时执行CPU任务。通过这些工具,开发者能有效优化资源,提升系统性能。
87 4
|
4月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
【7月更文挑战第18天】Python并发编程中,异步IO适合IO密集型任务,如异步HTTP请求,利用`asyncio`和`aiohttp`实现并发抓取,避免等待延迟。而对于CPU密集型任务,如并行计算斐波那契数列,多进程通过`multiprocessing`库能绕过GIL限制实现并行计算。选择正确的并发模型能显著提升性能。
84 2
|
4月前
|
开发框架 数据挖掘 .NET
显微镜下的Python并发:细说IO与CPU密集型任务的异步差异,助你精准施策!
【7月更文挑战第16天】在Python并发编程中,理解和区分IO密集型与CPU密集型任务至关重要。IO密集型任务(如网络请求)适合使用异步编程(如`asyncio`),以利用等待时间执行其他任务,提高效率。CPU密集型任务(如计算)则推荐使用多进程(如`multiprocessing`),绕过GIL限制,利用多核CPU。正确选择并发策略能优化应用性能。
51 2
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在Flink算子内部使用异步IO可以通过什么办法实现
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。