bo858585 / AbstractBooking

Cистема подачи/выполнения заказов
MIT License
0 stars 1 forks source link

Профилирование #45

Closed bo858585 closed 9 years ago

bo858585 commented 9 years ago

Приоритет: высокий

  1. Профилирование sql-запросов:

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:

  1. CreateBookingView - INSERT N rows (Вставить через dbshell 1000000 строк для 2,3,4)
  2. UpdateBookingView - UPDATE N rows
  3. BookingListView - SELECT N rows
  4. DeleteBookingView - DELETE N rows

Взять запросы из этих 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 тесты и измерить время работы.

bo858585 commented 9 years ago

Здесь не производится работы с большими данными в таблицах. Каждый SELECT запрос ограничен LIMIT, для вставки или обновления также достаточно простых индексов на колонках статуса и даты.

bo858585 commented 9 years ago

Профилировать удобнее через Django-debug-toolbar

bo858585 commented 9 years ago

Выяснить, насколько транзакции приложения блокируют таблицу.

bo858585 commented 9 years ago

Параметры в postgresql.conf выставлены с учетом того, что операции с блоками памяти/кэшем должны ослаблять эффект блокировок основной таблицы Booking и остальных таблиц.

bo858585 commented 9 years ago

Приоритет: низкий