ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

Autonomous Database で DRCP(データベース常駐接続プーリング)が使えるようになったので、お試ししてみる。

表題の通り Autonomous Database で DRCP(データベース常駐接続プーリング)が使えるようになりますた。
使うのも非常に簡単なんで、お試ししてみるやで!彡(゚)(゚)

1. DRCP (データベース常駐接続プーリング)とは?

Oracle Database はマルチプロセス型のアーキテクチャなんですが、接続時の一連の処理(プロセス生成など)が高負荷です。
これを補うのがコネクション・プーリングですが、一般的にはAP層で用意するコネクション・プーリングをDB層で実装したものが DRCP です。

5.2 データベース常駐接続プーリングの理解
https://docs.oracle.com/cd/F19136_01/admin/managing-processes.html#GUID-BB76E57C-3F16-4C85-AEF6-BA14FC1B4777

2. Autonomous Database の DRCP

Autonomous Database の DRCP は下記マニュアルに記載があります。

Use Database Resident Connection Pooling with Autonomous Database
https://docs.oracle.com/en/cloud/paas/atp-cloud/atpug/connect-drcp.html#GUID-E1337EC6-4A78-4199-84F0-A2739055F3FA

使い方は簡単で、ウォレットの接続文字列に「(SERVER=POOLED)」を書き足すだけです。用意した環境に、以下のような接続文字列をコピペで tnsnames.ora に書き足してみました。

aysatp_tp_drcp = (description= (retry_count=20)(retry_delay=3)
(address=(protocol=tcps)(port=1522)(host=adb.xx-xxxxx-x.oraclecloud.com))
(connect_data=(service_name=xxxxxxxxxxxxxxxx_aysatp_tp.atp.oraclecloud.com)
(SERVER=POOLED))
^^^^^^^^^^^^^^^ここを書き足した
(security=(ssl_server_cert_dn="CN=adb.xx-xxxxx-x.oraclecloud.com,OU=Oracle ADB XXXXX,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

3. DB接続を300回ループして計測するシェル

DB接続を300回ループするシェルを書いてみて、掛かった時間を計測してみます。

#!/bin/bash

#log file
LOG_FILE="/home/opc/work/loopcon_$$.log"
: > ${LOG_FILE}

#start time
TIME1=`date +%s.%N`
echo ${TIME1} >> ${LOG_FILE}

#connection test
for i in `seq 1 300`
do
sqlplus /nolog << EOF >> /dev/null 2>&1
SET TIMING ON
CONNECT ADMIN/xxxxxxxxxxxxxx@aysatp_tp_drcp
SET TIMING OFF
EXIT
EOF
done;

#end time
TIME2=`date +%s.%N`
echo ${TIME2} >> ${LOG_FILE}

#duration
DURATION=`echo "${TIME2} - ${TIME1}" | bc`
echo "Duration is ${DURATION} sec." >> ${LOG_FILE}

時刻計算の部分は、下記の記事を参考にさせて貰いました。

dateコマンドを使って1秒未満のプログラム実行時間を計測する
https://qiita.com/kaw/items/6d71d0b57aaf57fc9059

4. DRCP無し/有りでの接続時間(300回)の割合を比較

実際に掛かった時間を直接出すと色々とアレなので、接続時間(300回)の合計を割合で比較してみます。下記の環境で実行しました。

Public Compute(踏み台) → Private Compute(※) → SGW → ATP(18c)
※18.5 Instant Client, ココでshellを実行

DRCP無しの時の接続時間(300回)を 100 とした時に、DRCP有りの接続時間(300回)の割合を出しています。
※下記は個人が独自計測した数値で、この数値をその他環境で保証するものではありません。
adb_drcp.jpg

うーん、25%改善ってところでしょうか。もう一声!彡(゚)(゚)

5. まとめ

もう少し改善するかと思ったら、DRCPで良くなるプロセス生成以外の処理が重いんですかね。暗号化部分とか……(゚ε゚ )
とまれ、どんどん良くなる Autonomous Database! 出た当初比で、接続廻りは色々と改善されている感じです。体感なんですが、詰まりにくくなった。

皆さん、Autonomous Database をどんどん使って下さいやで彡(^)(^)