web-dev-qa-db-ja.com

書き込み用にOracleデータベースを最適化する方法は?

読み取りに影響を与えずに書き込みパフォーマンスを最大化するにはどうすればよいですか?

2
Joshua

良いスタートは、Oracleの同じ方法論であるStripe and MirrorEverythingに従うことです。これにより、さらに具体的な改善を追加できる優れた基盤が得られます。

同じ方法論は次のPDFにあります。

http://www.Oracle.com/technology/deploy/availability/pdf/oow2000_sane.pdf

AskTomには良い議論があります。

http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4433784236146

SAMEの主な推進要因の1つは、管理のしやすさです。パフォーマンスに関する多くの考慮事項をOSと基盤となるストレージレイヤーに渡します。表領域ファイルはすでにストレージアレイ内の無数のディスクに分散しているため、これをいじくり回してもあまり役に立ちません。しかし、相変わらず、悪魔は細部にまでこだわっています。ストレージレイヤーをブラックボックスとして扱いたくなりますが、実際には何が起こっているのかを理解し、各テーブルスペースファイルの下に何があるのか​​を知る必要があります。

3
Nick Pierpoint

構成に触れたくないPOVから-インデックスを確認します。インデックスが多用されているテーブルに書き込む場合は、行を書き込むたびにインデックスが変更されることに注意してください。インデックスが少なくなり、物理IOが少なくなります。

これは、明らかに、読み取りに影響を与えます。

時間と容量がある場合は、一般的に書き込まれるテーブルを特定のテーブルスペースに分割し、それらのテーブルスペースが別のRAIDチャネルに格納されていることを確認することも役立ちますが、これは使用しているハードウェアによって異なり、他の多くのテーブルを追加します考慮事項。

これについて熟考する時間が本当にある場合は、CaryMillsapsの「OptimizingOraclePerformance」を購入して読んでください。日付は付けられていますが(使用しているOracleのバージョンによって異なります)、古典的です。

3
Mark Regensberg

それをクラスターにセットアップし、アプリケーションが書き込みのために特定のノードを指すようにします。次に、クラスター自体から読み取ります。

1
tsilb

SAMEの実装(前の回答で提案されたすべてのストライピングとミラーリング)は、適切なデフォルト戦略です。特に、書き込みパフォーマンスが心配な場合は、RAID5を絶対に回避します。パリティ情報を維持しながら、4倍の書き込みオーバーヘッドが発生します。大容量のメモリキャッシュを備えたRAID5アレイは、しばらくの間そのオーバーヘッドを隠す可能性がありますが、書き込みが長引くと、最終的にRAID5のペナルティが感じられます。

書き込みIOを最適化する際に考慮すべき点はたくさんありますが、考慮すべき点がさらにいくつかあります。

  • IOレートをサポートするのに十分なディスクデバイスがストライプにあることを確認してください。GBの数だけでなく、必要な1秒あたりの合計IOをサポートするのに十分なディスクをストライプに配置する必要があります。ディスクは、データが部分的にしか満たされていない場合に応答時間を改善します。ディスクの外側の部分は、内側の部分よりも速くデータを配信できます。したがって、一般に、ストライプにまばらに配置されたディスクが必要です。

  • IOを最適化するよりもIO)を避ける方が良いです。回避可能な書き込みの最大のソースIOは一時的なセグメントIO PGA Aggregate Targetのサイズを正しく設定することが、これを回避するための最良の方法です。

  • すべてのインデックスが有効な目的を果たしていることを確認してください-クエリを高速化するため、または主キーまたは外部キーを適用するためです。多くの場合、インデックスのメンテナンスは書き込みIOの最大のソースであるため、余分なインデックスはありません。

  • 大規模で多数のREDOログを作成します。これにより、データファイルのチェックポイントが完了する前にログが循環するときに発生する可能性のあるログスイッチのオーバーヘッドとデータベースのストールを回避できます。また、REDOログを専用のデバイスまたは専用のきめの細かいストライプに配置することもできます。

  • 非同期IOを使用します。データファイルがファイルシステム上にある場合(たとえば、RAWまたはASMではない場合)、FILESYSTEMIO_OPTIONSをAYNCHまたはSETALLに設定します。 SETALLは、直接IOおよび非同期IOを実装します。これは通常、書き込みには役立ちますが、読み取りが遅くなる可能性があります。

  • COMMITでリスクを冒す準備ができている場合は、COMMIT_WRITE(10g)またはCOMMIT_WAITとCOMMIT_LOGGINGを変更して、コミットの発行時に発生するIO)を遅延またはバッチ処理できます。ただし、これを行うと、データベースに障害が発生した場合に一部のトランザクションが失われる可能性があります。

  • アプリケーションコードにアクセスできる場合は、配列挿入が使用されていることを確認し、おそらく、APPENDヒントを使用してダイレクトパス挿入を使用してください。

1
Guy Harrison