Сегодня наконец-то собрался с силами и оформил тэг для просмотра sql запросов в виде отдельного приложения. Для просмотра EXPLAIN запросов требуется настройка url dispatcher и отдельный view, так что получилось полноценное приложение.
Предыстория. Напарсил полмиллиона записей и решил их скриптом (на базе моделей и ORM django) обработать. Но вот незадача - на 143 тысяче скрипт умирал от нехватки памяти.
Стал я, значит, думать, кто виноват и что делать. Конечно, легче всего было свалить всё на django ORM. что я и сделал ) Найдя виноватого, я с чистой совестью пошёл читать всяческие документации и дискуссии в django developers на тему мемори ликов. Выяснил две вещи:
- я неправильно понимал работу django ORM
- memory leaks в django orm отсутствуют
Есть такая штука в django - selecte_related. Если вы присовокупите её к какому-нить QuerySet, то она сделает вот что: начнёт сказать по полям ForeignKey объектов из QuerySet и подгружать объекты, если у тех есть ForeignKey, то у них тоже подгрузит что-нибудь и т.д. Глубину проникновения можно регулировать параметром depth. Но есть у этой штуки один недостаток: она не работает с ForeignKey, которые могут быть null.