ただのにっき
2020-11-15(日) [長年日記]
■ MongoDB AtlasのDBを分割、移動した
先日DBを引っ越したこの日記でTimeoutエラーが出るようになって、という話をTwitterでつぶやいたら先に移行したMatz日記でも同じという証言があって、Atlasの信頼性かなり低いのでは? みたいな疑惑が出たので少し調べてみた。
といってもプランは無償のM0だし、想定用途的にはSandboxだから文句を言う筋合いではない。フリーミアムに乗っかっておこぼれを頂戴している立場である。たぶんちゃんとお金を出せばまともな性能を期待できるはずです。M0の次のプランM1は趣味の個人サイトで使うにはすでに高すぎるんだけどさ。
Herokuのコンソールに入ってDBを叩いてみると、特定の日付の日記を直接クエリするならすぐに返ってくる。一方、日記全体を舐めるようなクエリ(tDiaryではカレンダーを表示するためにこれをやる)だ数分は戻ってこない。一応クエリは完了するので、Webサーバがタイムアウトさえしなければ動くけど、まぁ使い物にはならんわな。
Heroku側の問題という可能性を考慮して、ローカルからも試してみたけど同じなのでAtlasのM0プランが相当メモリを絞っているということではないかなぁ。DB側のプロファイリングができないプランなので想像だけど。稼働開始後、数日経過してからこの状況になってるのが謎だけど。利用状況をみて動的にメモリを絞られたりしてたらたまらんが。
カレンダー生成のクエリを軽くするために専用のドキュメントを作ってみたりもしたけど改善されないので、どこかに同じような重いクエリが潜んでいそう。tDiaryのジャングルに分け入ってる時間がないので今日はここで打ち止め。
とりあえず、1クラスタに複数の日記のDBを置くのをやめて、この日記だけは独立させてみた。また数日後に同様な現象が起きたりしたら、この日記くらいのサイズがM0の限界ということなので、別のストレージの検討を始めなきゃならなさそう。