Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблемы оптимизации при сохранении большого графа сущностей #149

Closed
roxblnfk opened this issue Jan 12, 2021 · 0 comments · Fixed by #190
Labels
magic Structural changes, new features, performance. type:enhancement Enhancement.
Milestone

Comments

@roxblnfk
Copy link
Member

У нас в yii-demo есть консольная команда fixture/add для добавления фикстур.
Например fixture/add 20 сгенерирует в блог около 20 пользователей с 20 постами на каждого, а в постах от 0 до 20 комментов и сколько-то тегов.
При сохранении сгенерированного все сущности пользователей помещаются в одну транзакцию.
Соответственно, сайкл проходит по всем пользователям, получает все посты, все комменты и как-то это сохраняет.

Проблема 1

При включённом xdebug скрипт fixture/add 20 падает из-за слишком большой вложенности (большой стек вызовов).
Xdebug и выброшенный стек в 256 строк как бы намекают, что рекурсивный подход с ростом стека вызовов при обходе сущностей — не очень красиво.
Пока мы уменьшили набухание стека путём отказа от двустороннего связывания сущностей в коде команды (yiisoft/demo@6e1cdfc).

Проблема 2

Наблюдается обильное поедание памяти в процессе выполнения транзакции.
При выполнении fixture/add 100 с memory_limit = 128M приложение падает с ошибкой нехватки памяти.
Перед запуском транзакции поедаемая память со всеми сгенерированными сущностями не превышает 30МБ, так что остальные 90МБ за ORM. Дебаг отключён, логи в памяти приложением не собираются.
Отваливается скрипт 50/50 как до начала сохранения в БД так и во время.

@wolfy-j wolfy-j added type:enhancement Enhancement. magic Structural changes, new features, performance. labels Feb 11, 2021
@roxblnfk roxblnfk linked a pull request Jun 17, 2021 that will close this issue
@roxblnfk roxblnfk added this to the 2.0 milestone Jan 10, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
magic Structural changes, new features, performance. type:enhancement Enhancement.
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants