2009-05-06 9 views
1

読み込み/書き込みの多いOracle 10gのテーブルでは、すべてのCPUを使用して「ラッチライブラリキャッシュ」を並行して引用することがあります。Oracleテーブルで重度の同時実行性がある場合のパフォーマンスチューニング方法

データベース内の負荷を軽減するために、どのようなアプローチが可能ですか。私たちは無料のリストとそれを増やすことについてのことを見てきました。その他の意見

答えて

4

"ラッチライブラリキャッシュ"は、I/Oが特定のテーブルでハイであるかどうかに関係しません。これは、解析されたSQL文のキャッシュをラッチで待っていることを意味します。あなたがこれらのスパイクを見るとき、ほとんどの場合、異常な数のハードパースが発生します。

この最も一般的な理由は、バインド変数を使用していないため、異なる値を持つ多くの類似した文をハード解析するためです。例えば。

SELECT name FROM emp WHERE empid = 3; 

のような文を実行しており、クエリが実行されるたびにリテラルID値が変更され、新しい文が解析されます。リテラルをバインド変数で置き換えて、実行ごとに新しい値をバインドする方がよいでしょう。正確にこれを達成する方法は、データベースに対してステートメントを実行するために使用する言語/ライブラリ/環境によって異なります。

+0

変数をバインドするのは、prepared statement(JDBC)で行われていますか?それとも何か他のものですか? – Sathya

+0

はい、PreparedStatementは方法です。 'SELECT name FROM emp WHERE empid =?'のような文のテキストを準備(つまり解析)し、各実行の前に?で表される文パラメータに目的の値をバインドします。 –

関連する問題