8コア・マシンと16Gb RAMでOracleデータベースを使用するアプリケーションがあります。テーブルには15の列と約5700,000の行があります。頻繁に更新される5列の索引があります。挿入要求である1秒あたり100リクエストの負荷をかけた後、すべての要求ループで読み取りと更新操作が行われると、CPU負荷は指数関数的に増加し始め、最大25に達し、その後エラーが発生します。複数の索引を持つ100リクエスト/秒で、Oracleデータベースのサーバー負荷が25になる
I/O Error : Socket read time out.
ただし、単一の列のインデックスを使用して同じ操作を実行すると、負荷は4-5のままです。 5列でインデックスを作成し、8コアCPUと16 Gb RAMのマシンを搭載しているにもかかわらず、負荷にそれほど大きな違いはないはずです。
私は質問が何であるか分かりません。インデックスを追加するとオーバーヘッドが発生します。これらのインデックスは、データが挿入および更新されるときに維持する必要があります。頻繁に更新される列の索引には、比較的大きなオーバーヘッドがあります。あなたは、あなたの負荷テストがこれらの期待を確認すると言っているようです。魔法のように「正確に同じインデックスを使用するが、より効率的に維持する」というフラグはありません。あなたが望むと思っているインデックス、使用しようとしているハードウェア、アプリケーションの設計などを再考する必要はありません。 –
あなたのお返事ありがとう@JustinCaveありがとうございます。データベースに行を挿入すると、テーブルインデックスが更新されます。すべてのインデックスがB-Treeで再配置されることを意味しますか? – Abhimanyu
「並べ替え」の意味がわかりません。新しい行を挿入すると、あなたが話しているかもしれないブロック分割のようなものが含まれる可能性があります。 –