OracleのJOINも遅い
でMySQLのJOINでparse時間が極端に長くなる例を上げましたが、同様の症状がOracle 11g R2でも発生しました。
MySQLのところで挙げた例では比較的JOINが長かったですが(定説としてはJOINは6回くらいまでに抑えた方が良いらしいですが、それから比べると大したことは無いですが)、今回は単純な2表のINNER JOINで発生しました。特徴として挙げられることと言えば、やや結合条件が多いのと、group byに指定した項目が多いくらいでしょうか。
先日参加してきたQCon Tokyo 2012でAmazon Web Servicesがプッシュされていたこともあり、せっかくなのでAmazon EC2上にOTN開発者ライセンスのEnterprise Editionをインストールして検証しようとしたのですが、再現しませんでした…
後から調べたところによると、どうやらバージョン12.2.0.3.0でしか発生しないようで、12.2.0.2.0や、私がインストールしたPSRの無い無償版(12.2.0.1.0)ではちゃんと短時間で返ってきます。
今回はプロダクトを変更する訳にもいかず(普通そうだと思いますが)、色々と試した結果、NO_QUERY_TRANSFORMATIONヒント句を付けることで、そこそこの時間に短縮されました(200秒以上が3秒程度)。
[追記]本事象が発生した時間は、AWRレポートの項目”Parse CPU to Parse Elapsed”パーセンテージがかなり低い(20-30%台)ということが共通する事項としてありました。
しかし、Oracleのサポート受けられる状況であればもう少し詳しく分かったのかもしれませんが、今回のところはこのような形で逃げました。
« FreeMindの.mmファイル文字化けを直す | トップページ | facebook-android-sdkを使った認証がGalaxy Nexusではうまく動かない »
この記事へのコメントは終了しました。
« FreeMindの.mmファイル文字化けを直す | トップページ | facebook-android-sdkを使った認証がGalaxy Nexusではうまく動かない »
コメント