2014.10.14 システム
データベースリンクとは その2
システムの上松です。
~前回の続き~
データベースリンクは便利な反面、遅くなることがある、ということは前回書いた通りです。
では、なぜ遅くなるのかというと、そこはかなり複雑です。
データベースリンクでは、DBサーバ上で定義した接続情報を基準に対象となるDBのスキーマを特定して接続しています。
以下、oracleにおけるデータベースリンクを介したSQLの実行ロジック(と想定されるもの)を記述します。
※公開されている実行ルールより推測になる部分が大半なので、実際のプログラムでは別の動きをしていると思ってください。
例)
自DB内テーブルとリンク先テーブルを結合したSQLを実行する。
1.自サーバ上にて、SQLが解析される。
2.自DBにて「テーブル名@データベースリンク情報」の「@以下」より、対象DBを探す。
3.DBリンク定義にて対象となるリンク先DBに接続。
4.リンク先DB内の結合対象テーブルのデータを自DB側で保持する。(?)
5.4で保持したデータを「リンクされたテーブル」とみなしてSQLを実行する。
6.結果を返却する。
おおよそ、こんな感じのことをSQL発行時にしています。
では、どこが遅い原因なのかというと、
データベースリンクを介したSQLを実行する場合、毎回コネクション(?)を張りに行くためではないかとも思われます。
上記の場合は特に雑多なスキーマの多いテスト環境などでよく発生するケースと思われます。
(本番だと遅くない!という場合はコレが原因な気がします)
データベースリンクは便利な機能ですが、ある程度のリスクも伴うものなので、
使う場合は用途に合っているか十分考慮して使うようにしてくださいね。