ブログ - DRCP
聞き慣れない言葉?ですが,「DRCPを検証したいと思っている」という要件を聞きました.
はて? としらべると,
DRCP:Database Resident Connection Pooling
というもので,Oracle 11gから提供され様としているデータベース側の機能です.
まだあまり情報が無い様ですが,日本語のドキュメントがありました.
データベース常駐接続プーリング(DRCP)Oracle Database 11g
http://www.oracle.com/technology/global/jp/tech/oci/pdf/oracledrcp11g.pdf
クライアントがデータベースに接続を行う時に,データベース側に接続相手となるプロセスとかスレッドが起動します. 処理が終了してセッションが切れると,プロセスやスレッドは終了します.
OSにとって,プロセスやスレッドが起動させるのは大きな負荷が掛かるのですが,それを低減させる方法がセッションプーリングです.
処理が終了してもセッションを繋いだままの状態にしてプール(ためて)おいて,必要な人に素早くレスポンスして再割当をする仕組みなんですね.
クライアントアプリケーション側でプーリングを実装しているものが多いのですが,PHPのpconnect等は,プーリングの性能が悪いらしく,良い成果が得られないと評判です.
そこで,Oracleは,データベース側でプーリング機能を用意した様です.
セットアップは,
DBMS_CONNECTION_POOLパッケージを実行すれば設定は完了,
さらに,一度
execute dbms_connection_pool.start_pool;
を実行すれば,再起動してもDRCPは動作し続けてくれる様です.
ただし,
はて? としらべると,
DRCP:Database Resident Connection Pooling
というもので,Oracle 11gから提供され様としているデータベース側の機能です.
まだあまり情報が無い様ですが,日本語のドキュメントがありました.
データベース常駐接続プーリング(DRCP)Oracle Database 11g
http://www.oracle.com/technology/global/jp/tech/oci/pdf/oracledrcp11g.pdf
クライアントがデータベースに接続を行う時に,データベース側に接続相手となるプロセスとかスレッドが起動します. 処理が終了してセッションが切れると,プロセスやスレッドは終了します.
OSにとって,プロセスやスレッドが起動させるのは大きな負荷が掛かるのですが,それを低減させる方法がセッションプーリングです.
処理が終了してもセッションを繋いだままの状態にしてプール(ためて)おいて,必要な人に素早くレスポンスして再割当をする仕組みなんですね.
クライアントアプリケーション側でプーリングを実装しているものが多いのですが,PHPのpconnect等は,プーリングの性能が悪いらしく,良い成果が得られないと評判です.
そこで,Oracleは,データベース側でプーリング機能を用意した様です.
セットアップは,
DBMS_CONNECTION_POOLパッケージを実行すれば設定は完了,
さらに,一度
execute dbms_connection_pool.start_pool;
を実行すれば,再起動してもDRCPは動作し続けてくれる様です.
ただし,
リリースされてしばらく立つのに,情報が少ない様に思うので,あまり効果がないのかもしれません.
あまり突き詰めて調べたことはないのですが,コネクションプーリング事体のその原理はわかりやすくて説得力があるのですが,効果が上がったという話よりは,切った方が性能改善したという事例を何度も見てきました.
まぁ,その都度,PHPのプーリング機能が悪いとか,逆にわかっているプログラマがちゃんとチューニングして作れば速いとかいう事を言われるのですが,中くらいの技量のプログラマが普通に使うだけで性能が出ないようなものなら,普及しないよなーとおもいます.
そういえば,Oracleには同じ様にたくさんのコネクションをプーリングして処理する仕組みにマルチスレッドサーバ(MTS)というのがありました. これは,トランザクションが速いもの(ステップが少ない.例えば会員認証とか)では効果がありませんでした. 銀行ATMみたいに認証して〜金額入れて〜確認して〜みたいなターンアラウンドタイムの長いトランザクションには向いている様です.
あまり突き詰めて調べたことはないのですが,コネクションプーリング事体のその原理はわかりやすくて説得力があるのですが,効果が上がったという話よりは,切った方が性能改善したという事例を何度も見てきました.
まぁ,その都度,PHPのプーリング機能が悪いとか,逆にわかっているプログラマがちゃんとチューニングして作れば速いとかいう事を言われるのですが,中くらいの技量のプログラマが普通に使うだけで性能が出ないようなものなら,普及しないよなーとおもいます.
そういえば,Oracleには同じ様にたくさんのコネクションをプーリングして処理する仕組みにマルチスレッドサーバ(MTS)というのがありました. これは,トランザクションが速いもの(ステップが少ない.例えば会員認証とか)では効果がありませんでした. 銀行ATMみたいに認証して〜金額入れて〜確認して〜みたいなターンアラウンドタイムの長いトランザクションには向いている様です.