データベースにいくつかのテーブル (User & UserRecord) があり、それらが極端に断片化 (99% など) し、データベース全体が停止するため、Web サイトが停止します。
UserRecord は、ある時点でのそのユーザーのスナップショットのようなものです。ユーザーは、そのユーザーのマスター レコードのようなものです。ユーザーには 0 から多数の UserRecords があります。ユーザーには約 100 万行あり、UserRecord には約 250 万行あります。これらのテーブルはたくさん書き込まれます。彼らもよく捜索されています。二人ともこれからどんどん大きくなっていきます。ひどく断片化されている主なインデックスは、User テーブルと UserRecord テーブルの主キーです。
DB は SQL Server 2012 で、Entity Framework を使用しており、ストアド プロシージャは使用していません。
テーブルは次のようになります。
USER
UserName string PK ClusteredIndex
FirstName string
LastName string
+SeveralMoreRows
USER_RECORD
UserRecordId int PK ClusteredIndex
ListId int FK(List)
UserName string FK(User) NonClusteredIndex
Community string NonClusteredIndex
DateCreated datetime
+LotsMoreRows
LIST
ListId int PK & ClusteredIndex
Name string
DateCreated datetime
(リストが重要かどうかはわかりませんが、User_Record に関連しているので含めたいと思いました。リストには 0 から多数の UserRecords があります)
毎日インデックスを再構築する SQL メンテナンス プランを設定しましたが、これは役に立ちますが、十分でない場合もあります。
友人は、2 つのデータベースを使用することを提案しました。1 つは読み取り用、もう 1 つは書き込み用です。読み取り DB を書き込み DB から同期します。これを行うことについて何も知らないというわけではありませんが、このソリューションで最初に目にする問題は、サイトを表示するときに最新のデータが必要だということです. たとえば、ユーザーの詳細または UserRecord を更新する場合、それらの変更をすぐに確認したいと考えています。
この問題が制御不能になる前に、この問題を修正する方法について何か提案はありますか?