レプリケーションサーバーで動作するdjangoアプリケーションがあり、マスターを書き込み専用、スレーブを読み取り専用として使用するように構成されています。しかし、データベースの負荷を監視し始めたとき、マスターに大量の読み取りトラフィックがあることがわかりました。調査の結果、次のことがわかりました。
def get_or_create(self, **kwargs):
# Update kwargs with the related object that this
# ForeignRelatedObjectsDescriptor knows about.
kwargs.update({rel_field.name: instance})
db = router.db_for_write(rel_model, instance=instance)
return super(RelatedManager, self.db_manager(db)).get_or_create(**kwargs)
get_or_create.alters_data = True
したがって、そのコードから、get_or_create に必要な読み取り操作と書き込み操作の両方に書き込みデータベースを使用し、スレーブを使用して読み取りを行い、マスターを使用して期待どおりに「作成」するのではなく、誰かがこの問題を抱えていますか? get_or_create 関数を書き直す以外に修正する方法はありますか?