Javaで書かれたアプリケーションのパフォーマンスに関連する一連の問題を研究しています。これは、 1 日あたり約100,000 のヒットがあり、カーディナリティが 2 つのプリンシパル データベース テーブル (均等に分割) で平均 5 ~ 10 回の読み取り/書き込みが行われます。100万から300万のレコードの両方に対して(休止状態を介してDBにアクセスします)。
私の 2 つのメイン テーブルには、ユーザー情報 (varchar、integer、timestamptz 型の約 60 列) と、表示されるデータにリンクされた別のテーブル (主に varchar、integer、timestamptz の約 30 列) が格納されます。
私が遭遇した主な問題は、サイトのパフォーマンスが低下した可能性があります (データベースのパフォーマンスだけに依存しない5 秒以上の時間負荷について話しましょう)、現在デフォルト値の 100であるFillFactorの使用です(データが変更されていない場合は常に使用されます..)。
明らかにフィルファクターはインデックス上で同じです(タイプbtreeの2つのテーブルごとに10あります)
現在、私が作成しているメインテーブルに
- 40% 選択操作
- 30% の更新操作
- 20% 操作挿入
- 10% の削除操作。
私のデータベースは、重要度の低い他の 40 のテーブルで構成されています (ユーザーのカーディナリティが同じ 3 つだけです)。
私の質問は次のとおりです。
- 設定するフィルファクターの正しい値をどのように見つけますか?
- この種のデータベースのパフォーマンスを改善するためにチェックすべきタスクのチェックリストはどれですか?
データベースはサーバー専用 (16 GB RAM、8 コア) にあり、ストレージは SSD ディスクにあります (データは終日バックアップされ、別のストレージに移動されます)