Почему запросы django к горячему резервированию идут медленнее, чем запросы к мастеру?
У меня есть два сервера, на которых запущен postgres, и я настроен как главный / репликатор с использованием горячего резервирования. Когда я делаю запросы с использованием django на главном сервере, запросы занимают примерно половину времени, которое занимают те же запросы на реплицированном сервере. Серверы идентичны, за исключением того, что один использует базу данных для чтения / записи, предоставляющую файлы WAL, а другой - базу данных только для чтения, реплицирующую из файлов WAL.
Если я выполняю запросы на реплицированном сервере, чтобы справиться с ними, запросы разрешаются в два раза быстрее, чем если бы я выполнял запросы непосредственно в локальной базе данных. Почему это?
Я использую маршрутизатор базы данных, как описано в документации django:
class DatabaseRouter:
def db_for_read(self, model, **hints):
"""
Reads go to local host.
"""
return 'default'
def db_for_write(self, model, **hints):
"""
Writes always go to master.
"""
return 'write'
def allow_relation(self, obj1, obj2, **hints):
"""
Relations between objects are allowed if both objects are
in the primary/replica pool.
"""
db_list = ('default', 'write')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Migration handled by PostgreSQL
"""
return None
И у меня есть настройки базы данных в моем файле настроек
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': NAME,
'USER': USERNAME,
'PASSWORD': PASSWORD,
'HOST': '127.0.0.1',
'PORT': '5432',
},
'write': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': NAME,
'USER': USERNAME,
'PASSWORD': PASSWORD,
'HOST': MASTER_IP,
'PORT': '5432',
}
}