Closed bo858585 closed 9 years ago
Здесь не производится работы с большими данными в таблицах. Каждый SELECT запрос ограничен LIMIT, для вставки или обновления также достаточно простых индексов на колонках статуса и даты.
Профилировать удобнее через Django-debug-toolbar
Выяснить, насколько транзакции приложения блокируют таблицу.
Параметры в postgresql.conf выставлены с учетом того, что операции с блоками памяти/кэшем должны ослаблять эффект блокировок основной таблицы Booking и остальных таблиц.
Приоритет: низкий
Приоритет: высокий
http://www.varlena.com/GeneralBits/Tidbits/perf.html#intro http://www.varlena.com/GeneralBits/Tidbits/annotated_conf_e.html http://www.powerpostgresql.com/Downloads/annotated_conf_80.html http://linuxfinances.info/info/quickstart.html
Настроить postgreSQL.conf - ввести рекомендуемые в man параметры. Параметры зависят от параметров аппаратуры в том числе.
Cоздается таблица заказов с большим числом записей N = 1000000:
Взять запросы из этих django views, получить их SQL, распечатав его в консоль в django-коде. Для view: str(get_queryset().query). http://simeonfranklin.com/blog/2011/feb/14/hidden-django-queryset-features-i/
Сделать в psql EXPLAIN этих запросов. Откорректировать параметры в postgresql.conf, отвечающие за эти операции (размер дискового кеша при выборке данных, частота сброса данных на диск при их вставке и обновлении, удаление мусора при их удалении и обновлении и т.д.).
Создать в Postgresql индексы в таблицах, использующихся в этом view. Выяснить через EXPLAIN, как менятся время работы запросов при добавлении индекса.
Параметры postgreSQL.conf:
shared_buffers = 450MB # (1/4 memory) Общий кэш PostgreSQL effective_cache_size = 1.5GB # 50-75% of full memory, вся ожидаемая память под кэш, используется планировщиком для определения вероятнсти того, будет ли запрос работать с диском или данные уже доступны в памяти work_mem = 50MB # память для сортировки данных, используемая одним запросом.
checkpoint_segments - данные из буферов сбрасываются на диск при проходе контрольной точки при заполнении нескольких (параметр checkpoint_segments, по умолчанию 3) сегментов журнала транзакций. checkpoint_timeout - либо через определённый интервал времени (параметр checkpoint_timeout, измеряется в секундах, по умолчанию 300).
listen_addresses = '*' # localhost
2 . Возможно стоит запустить через nginx написанные unit performance тесты и измерить время работы.