提高短連接監(jiān)聽性能方法測試
創(chuàng)建測試腳本
通過在三個會話中同時執(zhí)行test_login.sh腳本,模擬當(dāng)數(shù)據(jù)庫多個短連接情況性能
[oracle@xifenfei tmp]$ more test_login.sh #!/bin/bash echo "start login database `date`*********" >>/tmp/test_1.log e=2000 for((i=1;i<=$e;i=i+1)) do /tmp/login_oracle.sh done echo "end login database `date`*********" >>/tmp/test_1.log [oracle@xifenfei tmp]$ more login_oracle.sh #!/bin/bash sqlplus chf/xifenfei@ORA11G_P</dev/null select to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss\') from dual; exit XFF --ORA11G_P根據(jù)不同的測試情景指定不同名稱 
情況1:一個監(jiān)聽情況下
start login database Tue May 1 18:03:32 CST 2012********* start login database Tue May 1 18:03:35 CST 2012********* start login database Tue May 1 18:03:37 CST 2012********* end login database Tue May 1 18:08:20 CST 2012********* end login database Tue May 1 18:08:25 CST 2012********* end login database Tue May 1 18:08:26 CST 2012********* --計算2000個會話登錄/查詢/推出時間 4:48 4:40 4:49
情況2:三個監(jiān)聽,客戶端配置tns負(fù)載均衡
--監(jiān)聽配置
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = ora11g)
     (ORACLE_HOME = /u01/oracle/oracle/product/11.2.0/db_1)
     (SID_NAME = ora11g)
    )
  )
ADR_BASE_LISTENER = /u01/oracle
LISTENER1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1522))
    )
  )
SID_LIST_LISTENER1 =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = ora11g)
     (ORACLE_HOME = /u01/oracle/oracle/product/11.2.0/db_1)
     (SID_NAME = ora11g)
    )
  )
ADR_BASE_LISTENER1 = /u01/oracle
LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1523))
    )
  )
SID_LIST_LISTENER2 =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = ora11g)
     (ORACLE_HOME = /u01/oracle/oracle/product/11.2.0/db_1)
     (SID_NAME = ora11g)
    )
  )
ADR_BASE_LISTENER2 = /u01/oracle
--tns配置
ORA11G_M =
  (DESCRIPTION =
      (LOAD_BALANCE=ON)
      (FAILOVER=ON)
      (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1522))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1523))
       (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
     (SERVER=DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )
--測試結(jié)果
start login database Tue May  1 17:51:45 CST 2012*********
start login database Tue May  1 17:51:49 CST 2012*********
start login database Tue May  1 17:51:51 CST 2012*********
end login database Tue May  1 17:55:58 CST 2012*********
end login database Tue May  1 17:56:06 CST 2012*********
end login database Tue May  1 17:56:09 CST 2012*********
--計算2000個會話登錄/查詢/推出時間
4:13
4:17
4:18
情況2:使用常駐連接池DRCP(11g新特性)
--啟動默認(rèn)DRCP
SQL> exec dbms_connection_pool.start_pool();
PL/SQL procedure successfully completed.
--tns配置
ORA11G_P =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
    )
    (CONNECT_DATA =
     (SERVER=POOLED)  --注意
      (SERVICE_NAME = ora11g)
    )
  )
--執(zhí)行結(jié)果
start login database Tue May  1 18:19:58 CST 2012*********
start login database Tue May  1 18:20:01 CST 2012*********
start login database Tue May  1 18:20:03 CST 2012*********
end login database Tue May  1 18:23:16 CST 2012*********
end login database Tue May  1 18:23:19 CST 2012*********
end login database Tue May  1 18:23:21 CST 2012*********
--計算2000個會話登錄/查詢/推出時間
3:16
3:18
3:19
總結(jié)
如果在數(shù)據(jù)庫短連接過程中發(fā)現(xiàn)監(jiān)聽是瓶頸的時候,可以考慮使用多個監(jiān)聽+tns 負(fù)載均衡,從一定程度上緩解監(jiān)聽瓶頸.如果是11g數(shù)據(jù)庫可以考慮使用其心功能DRCP,從而很大程度上提高短連接過程中數(shù)據(jù)庫的效率.因為DRCP還屬于11g的新功能穩(wěn)定性不知道如何?使用該功能前,請一定要做好相關(guān)測試工作.如有可能還是建議從應(yīng)用層面盡可能的使用長連接,提高數(shù)據(jù)庫會話效率.
【編輯推薦】















 
 
 



 
 
 
 