以Redhat AS 3.0的async io做范例來討論異步IO對性能的影響以及Sybase ASE(單進程多線程)和Oracle(多線程)架構對異步IO不同的處理。以及OS參數對Sybase ASE的性能影響。
OS kernel: 2.4.21-4.EL
glibc: glibc-2.3.2-95.3
DB: Adaptive Server Enterprise/12.5.1/EBF 11666 ESD#2
Oracle9i Enterprise Edition Release 9.2.0.4.0
OS Parameter: /proc/sys/fs/aio-max-size 每一次異步IO的最大尺寸
/proc/slabinfo 內核slab 分配統計
一: async io能夠在以下方面提升性能
一: IO隊列不需要等待所以磁盤可以對零散的IO進行組織以相對次數較少的io以提升性能。(吞吐量的提升)
二:進程可在等待IO完成前執行另外的任務以提升性能。(響應時間的改善)
二: OS相關文件
/proc/slabinfo: kio開頭的字段顯示是否有應用在使用及使用狀況。
此時ASE & Oracle都沒有啟動,所以當前活動對象數目都是0
[root@VMRHAS proc]# grep kio slabinfo
kioctx 0 30 128 0 1 1 (kio請求次數)
kiocb 0 8220 128 0 274 1(kio的對象數目)
kiobuf 0 30 128 0 1 1(kio buffer)
各列的含義:
slab緩存名 當前活動對象數目 可活動對象的總數 每一個對象的字節數 最後一個活動對象的頁數 總共分配的頁數 每slab緩存的頁數
啟動Oracle 後的slabinfo信息
[root@VMRHAS root]# su - Oracle -c dbstart
[root@VMRHAS proc]# grep kio slabinfo
kioctx 6 30 128 1 1 1
kiocb 6144 8220 128 205 274 1
kiobuf 0 30 128 0 1 1
察看Oracle進程,在啟動後有6個Oracle的系統進程
[root@VMRHAS proc]# ps -ef |grep ora_
Oracle 2683 1 0 11:06 ? 00:00:00 ora_pmon_redhat
Oracle 2685 1 0 11:06 ? 00:00:00 ora_dbw0_redhat
Oracle 2687 1 0 11:06 ? 00:00:00 ora_lgwr_redhat
Oracle 2689 1 0 11:06 ? 00:00:00 ora_ckpt_redhat
Oracle 2691 1 0 11:06 ? 00:00:00 ora_smon_redhat
Oracle 2693 1 0 11:06 ? 00:00:00 ora_reco_redhat
從Windows連接一個oracle進程過去再看slabinfo和Linux上Oracle進程的改變情況
c:\>sqlplus "dbo/dbo@vmrhas"
SQL*Plus: Release 9.0.1.0.1 - Production on 星期三 11月 10 11:10:30 2004
(c) Copyright 2001 Oracle Corporation. All rights reserved.
連接到:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning,