2016-03-24 17 views
0

Oracleを1年以上使用していて、テーブル・スペースTEMPの新しい問題が発生しました。 SELECTクエリが常に正常に実行されるように、TEMPテーブルセグメントのサイズを変更するにはどうすればよいですか。Oracle Tempテーブル・セグメント・サイズ - 不一致クエリの選択

私はある時点で動作するselect文を持っていますが、他の時点では失敗します。 OracleのTEMPテーブル・セグメント・サイズが何らかの形で変更される可能性があります。これは、特定のSELECT文が一度に機能するかどうかに影響しますが、別の時間には失敗しますか?理由はb/cです。私は一回正常に実行されるselect文を実行しましたが、次回は失敗します。失敗した場合は、次のエラーメッセージが表示されます。

ORA-01652: unable to extend temp segment by 64 in tablespace TEMP 

また、単一のユーザーまたはプロセスセッションに固有のTEMPテーブルセグメントサイズですか?それとも、すべてのプロセスのグローバルメモリに関連していますか?

私の目標は、問題を見つけようとしていて、そのメモリの問題か簡単に修正できるTEMPテーブルの問題かどうかを確認することです。

また、他の誰かが同時に大規模なクエリを実行している場合、この問題が発生したり、TEMPテーブルの機能を拡張して追加のセグメントを減らしたりすることによって問題が蔓延する可能性があります。

+1

これは実際にdba.stackexchange.comに属します。 –

答えて

1

TEMPスペースはインスタンスレベルで割り当てられ、すべてのユーザーが共有します。問合せでインスタンスに使用可能なスペースの大部分が使用されている場合は、他のユーザーがその瞬間にどれくらいのスペースを消費しているかにより、断続的に失敗する可能性があります。他のユーザーが利用可能なすべての空き領域を消費する暴走的なクエリを持っている場合は、クエリが比較的軽い消費者のTEMPのスペースであってもエラーが発生する可能性があります。あなたはその質問をします。

あなたのクエリが利用可能な領域の比較的大きな部分を占めていると仮定すると、おそらく深刻な最適化が必要であると私は賭けています。私は不注意にデカルト積を生成し、次に正しい結果セットになるためにDISTINCTを実行するようなことをするクエリの私の分け前を見てきました。当然のことながら、最初に正しい結合を書くよりはるかに多くのTEMPスペースが必要です。また、1つ以上のオブジェクトに関する統計によって、実際には多数の行が戻されるため、オプティマイザではるかに多くを使用するプランを選択する原因となるステップがあることをOracleに予測させる可能性があります。TEMP期待以上にあなたのクエリがより少ないTEMPスペースを使用するように最適化できる場合、それは一般的に最も簡単な修正です。

問合せが完全に最適化されているにもかかわらず、インスタンスに割り当てられた領域のうちの大部分を消費する場合は、DBAとの会話が必要です。 DBAがシステムのためにTEMPのスペースを割り当てられていない可能性があります。ちょうどTEMPに数GBを投げて問題を解決します(同じエラーが発生している他の人も同様です)。

+0

私はunion文を使用しています。余分なメモリを使用する可能性がある左結合をいくつか追加しました。 Toadにクエリを分析しているかどうかがわかります。 – RetroCoder

+1

@RetroCoder - 'UNION'が提供するソートと重複除去が不要な場合、重複を除去するためにデータをソートすることを強制しない' UNION ALL 'に切り替えることで大きな利益を得るかもしれません。特に、2つのクエリが同じ行を返すことができないことがわかっている場合。 –

+0

代わりにunionをすべて削除して使用し、大幅にスピードアップしたように見え、データは良好に見えます。どうも – RetroCoder

関連する問題