Разумные настройки для ZODB pool_size

Какой разумный дефолт для pool_size в ZODB.DB вызывать в многопоточном веб-приложении?

Оставляя фактическое значение по умолчанию 7 дает мне некоторую связь WARNINGДаже когда я один перемещаюсь по обработчикам, взаимодействующим с БД. Можно ли установить слишком большое число? Какие факторы влияют на решение, что именно установить?

1 ответ

Решение

Размер пула является лишь "ориентиром"; предупреждение регистрируется, когда вы превышаете этот размер; если бы вы использовали двойное количество соединений в CRITICAL сообщение журнала будет зарегистрировано вместо этого. Это означает, что вы можете использовать слишком много соединений в вашем приложении.

Пул будет пытаться уменьшить количество сохраняемых соединений до размера пула при закрытии соединений.

Вам необходимо установить максимальное количество потоков в вашем приложении. Для Торнадо, который, я считаю, использует асинхронные события вместо почти исключительно потоков, это может быть сложнее определить; если в Tornado настраивается максимальное количество одновременных подключений, то размер пула должен быть установлен на это число.

Однако я не уверен, как будет работать ZODB, когда ваше приложение масштабируется до сотен или тысяч одновременных подключений. До сих пор я использовал его не более чем с 100 или более параллельными соединениями, распределенными между несколькими процессами и даже машинами (используя ZEO или RelStorage для обслуживания ZODB между этими процессами).

Я бы сказал, что если большинство этих соединений только читают, у вас все будет в порядке; он пишет на одном и том же объекте одновременно, что является слабым местом ZODB в плане масштабируемости.

Другие вопросы по тегам