2025 06,26 15:11 |
|
2008 12,09 02:18 |
|
PGAメモリ領域に一時領域を作成し明示的開放が必要なもの
(Oracle開発ガイド記載) 下記のようなものを使用したときに一時領域を確保してしまう。 ◆JDBC API ①oracle.sql.CLOB.createTemporary() ◆SQLファンクション ②getCLOB()、getCLOBVal() ③getBLOB()、getBLOBVal() ④getXML ⑤カラムがLOBタイプに対し操作した時 ※例:【SELECT substr(LOBカラム,0,4) from テーブル名】 現存するソースを片っ端から調べた結果、私が参加している プロジェクトでは①②を使用していることがわかった。 さらに・・・10.x系のJDBC Driverから非推奨となっているメソッド が色々なところで使用されている。当プロジェクトではOracle JDBC 10.2.0.3.0を使用。※非推奨メソッド:何れ削除されるAPI また型変換がおかしかったりする。 -例:(誤) String XXXX = Map.get("XXXX").toString(); (正) String XXXX = (String) Map.get("XXXX"); なんて偉そうな事を言っているが、私は細かい理由を知らないまま 初めてJAVAを教えてくれた人の言いつけを守っていただけ・・・ この辺の議論は色々されているみたい。 判りやすいかな?とおもい抜粋してきたものを ============================================================== toString()メソッドは全てのClassのスーパクラスである Objectクラスのメソッドです。 その他のクラスのtoString()メソッドは、これをオーバライド したに過ぎません。 toString()メソッドの用途はそのオブジェクトを視覚的に あらわすときに利用します。オブジェクトのダンプイメージです。 ============================================================== まともにJAVAを勉強したわけじゃないのでどうも細かいことに 疎く自分の「力」のなさに愕然とする。好きじゃないとやって いけない業界だな~と痛感 少し脱線したが、メモリーリークの話に戻るとOracleDBには PGAとSGAって領域があってCLOBの一時領域はPGAに作成される 前にも話したがこれはセッションが切れる事で開放される。 但し、当プロジェクトでは、WebLogicの機能でDBとの接続を 複数張っている状態のためその分は意図的に操作しなければ セッションはずっと確保されたままである。 そのため、PGAの領域がCLOBの一時領域で一杯になってしまい メモリーリークが発生する。 なんだかんだ言っても結局は開発者がOracleの開発ガイドの参照 「google」で検索して調べれば判った事であり、正しい方法を取 らなかった事で発生したくだらない障害だったという事だね とりあえず全アプリのソース解析して問題の使用有無を確認 改修方法を考えてお客様に説明し了解が得られたのであとは 各担当者へ周知してさっさと修正しやがれ!というだけCLOB やXMLTypeなんて使った事が無かったからいい経験になったな 『I-PHONE』 私の周りでは個人でアイフォンアプリを開発しているひとがいる。 最近契約が成立してアプリを無料ダウンロードできるようになった ようだが、驚くことにそのアプリのダウンロード数が上位に入って いる。 周りからアイフォンとMAC PCの購入を勧められている。 初期投入にお金が掛かりそうだが、これからの良い経験になりそう 少し考えて見るか・・・ PR |
|
コメント |
コメント投稿 |
|
忍者ブログ [PR] |