Monday, September 14, 2009

SQLチューニングは易しいが、ORA-4031エラーの解決は難しい理由は何

周囲にSQLチューニングに上手な方たちが多いです。いくら複雑なクエリとしても数分または数時間内にチューニングできる場合が大部分です。


しかし「ORA-4031エラーの原因を探してくれて」と言われば大部分数日が経っても解決できない場合が多いです。僕ならORA-4031エラーの原因の分析を頼まれるとほかの仕事で忙しいからといって一応逃げるかも知れません。:)


どうしてこんな現状が起きるんでしょうか。僕がよく聞いている意見は次のようです。

SQLチューニングに必要な技術は身に着けやすいんですが、ORA-4031エラーの解決に必要な内部的な知識は身に着けにくいからです

こんな意見がもっと発展すれば「SQLチューニングはやりふれている技術なのに、内部的な技術は高級技術である」のような歪曲された見解まで行けます。でも真実はぜんぜんそうではありません。

  • SQLチューニングのために身に付けるべきの知識と技法がずっと多くて複雑で難しいです。
  • ORA-4031エラーを解決するに必要な知識は不慣れかもしれませんが絶対に難しくはないです。

それじゃなぜORA-4031エラーの解決がSQLチューニングよりずっと難しいのことだと認識されているものですか。それはエンジニアの実力の問題ではなくて「データ」の問題です。

  • SQLチューニングのために収集可能なデータは多様で正確です。特に10046トレースはほとんど万能だといえます。特定のクエリのParseからFetchまで全過程を追跡できます。こんなデータを持ってもチューニングができないといえばその時こそエンジニアの実力を疑わなければなりません。
  • 反面、ORA-4031エラーの解決に必要なデータの収集はとても制約的です。せいぜいSGA Heap Dumpを修行するのです。SGA Heap Dumpは1)その負荷で収集しにくいし、2)ダンプを実行する現在の時点のスナップショットに過ぎません。3)すなわち、段階別のトレース情報はないから推理しにくいです。4)コールスタック情報も役に立ちますがやっぱり現在時点の情報に過ぎません。

すなわちSQLチューニングのために必要なデータはあふれるほど十分ですけど、ORA-4031エラーをために必要なデータはあまりに足りないです。データが不足だから判断しにくいし従って解決も難しいこととなってしまいます。


分析のために必要な十分なデータがない状態でエンジニアとしての実力を論じるのは僥倖に頼るのに過ぎません。従って原因を探す前に解析に必要なデータを十分に収集するのを身に付ける必要があります。


僕もまた常に十分なデータを収集するに失敗して間違った解析をする場合が時々あります。自分の経験から出て来る自分だけの哲学だと思ってくださればいいです。


PS) 上のように言うといってORA-4031エラーが解決不可能な問題だという意味ではありません。適切なデータと多い経験、よい資料(例えばメタリンクのような)があったら多くの場合有意味な分析が可能です。

No comments:

Post a Comment