MIT’s blog

個人的なメモかな

大きな方針転換して、プロジェクトに複数のコンテキストが存在する

昨日行ったフルセットアップは結局金曜日の夜は修正のみで一旦終了し、土曜日の朝から追加修正して開始。終わったのは日付回って今日午前0時過ぎでした。14時間43分とか掛かってまして、やはり62ギガバイトとかの巨大なDBファイルとなりました。追加のアップデートデータも入れ込んだ後に最適化すると、ギリ60ギガバイト切りました(笑) で、追加作業してたんですが、ある表示をするのに数分とか掛かる事が分かりました。最初は何かハングでもするミスコーディングでもしたのかと思い、一旦PCから離れて戻ると表示はされてたんですが、これでは使い物にならない様な^^; DB最適化もアプリ固まる状態で3時間強だったかな。

どう考えても、この巨大DBファイルは現実的ではないよな~っと。で、分割する事にします。4分割綺麗に15ギガバイトずつにはならないとは思うが、4分割してみようかと。エンティティ定義を大きなテーブルを別々のコンテキストにすれば良いだけだと信じて、作業してみます。分割後に再度フルセットアップして、その時間。最適化の時間。で、問題の表示時間等がどの程度短縮されるか楽しみに作業進めてみます^^

 

追記 2022/2/6 22:10
簡単には4分割出来ないと判断して、取敢えず3分割に。大きくなりそうなテーブル3つを別コンテキストにするんですが、2つは関連があるので、この2つを別コンテキスト、更に巨大になっていると思われる1つのテーブルを別コンテキストという感じにして、プロジェクト内に3つのコンテキストが存在する事になりました。

ここで、今まで同様にAdd-Migration xxxとUpdate-Databaseをしようとするが

More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for PowerShell commands and the '--context' parameter for dotnet commands.

とか言われて処理されない^^; グーグル先生に確認すると

Add-Migration xxx -Context context1
Update-Database -Context context1

Add-Migration xxx -Context context2
Update-Database -Context context2

って感じでオプションパラメーターで指定する必要がある事が分かった。今回はもう1回の計3セットする必要があった訳だが、それを済ませてフルセットアップ開始してみた。フルセットアップは時短されないとすると明日の昼過ぎに終わるかな^^;

 

追記 2022/2/7 9:22
今もフルセットアップ中なんですが、エクスプローラでDBサイズ確認すると既にメインDBは45ギガバイトorz 余りダイエット出来てない様です。これでは期待薄なので、一応終了までは今回の結果確定用に続け、午後終了後に当初の計画通り4分割処理してみようかと。これすればメインDBのダイエットはもう少し効果あるんじゃないかと思うので、それから効果確認してみようかと思います。

 

追記 2022/2/7 12:37
やっとフルセットアップ完了。14時間19分で、24分程度短縮された^^; 最適化前にメインDBは58ギガバイトと少しスリムになりましたが、まあ、確かに分けたコンテキストは3ギガバイトと1ギガバイトで3ギガバイトの方が単一テーブルなので、確かに巨大テーブルで分離したのは良かったのかもですが、効果自体は期待出来ないかも。なので、分割作業進めてみる。

 

追記 2022/2/7 13:50
分割作業は結局6分割まで進めてみた。これで実用的じゃなかったらっとか考えたくもないが、分割後のフルセットアップ開始はしたので、明日の明け方に終わるのかな~^^; 分割ダイエットによるセットアップ時間の短縮はそれ程期待は出来ないとは思う。例の1テーブルで3ギガバイトなコンテキストは1年分のデータ登録に40分程度掛かる感じなのは把握した。これ、確か2004年頃から提供されているので、ここまで18年分とかある訳で、これだけでも12時間掛かる計算ですorz ってか、逆に言えば、これ見捨てれば2時間程度で終わるのか^^ 今回の作業終わったら、しばらくこのモンスター除外して諸々進めるのか吉かな。

 

追記 2022/2/8 14:30
今日早朝にセットアップが終わってたんですが、痛恨のポカミスorz コンテキスト移動してるのに古いままのアクセスしようとしてのエラーで終了とか。まあ、本当の終わりの部分だったので14時間24分とかだった模様で分割での時短はもう無い感じですかね。問題の修正も終えて朝再トライ掛けようとするがエラーが出るとか...データ提供元がメンテに入ってたので、強制的に休憩w その間にも出来る修正はしてみました。しかし、こんなメンテも本来なら一般ユーザーの影響が少ない夜中に行う感じなのに普通に昼間に行う辺りが、親方日の丸ってな感じなのがね~^^;
まあ、分割は大体成功してる感じで、予想通り巨大なテーブルは頻繁にアクセスするテーブルとは分離出来、まあ、その分離した側が50ギガバイト超えとか^^; 今回はフルセットアップ中にエラーが出での終了だったので、全DB削除してますので、サーバーメンテ終了したら、テスト的なセットアップして動作確認後に今晩再度フルセットアップして寝る感じになるのかなぁっと。