Павел
Ну для бэка знание индексов в принципе дефолт
Рома
ну когда я спрашивал тимлида с прошлой работы, мы таким не занимаемся.
Рома
не такого не было)
Рома
как лара сгенерировала так и будет
Павел
Другое дело, чтобы навесить индекс или правильно колонку изменить в большой базе, это уже отдельныйе кейсы
Рома
кстати symfony ставит индексы или нет самостоятельно?
Рома
через код или просто в БД?
Павел
Максимум что сделает фрейм, он навесит индексы на связи
Рома
может оптимизировали прод, но не дэв базу
Рома
вообще а как это тестировать?
и разбираться в этом?
чтоб видна была разница между разными вариантами
нагрузочные тесты писать для разных конфигов
Рома
есть ли вариант специально замедлить работу с базой?
навесит ограничения на приложения
чтоб тестировать оптимальность нагрузки
Рома
например выделить 100 мег и 10 мег оперативы на приложение и чтоб запрос выполнялся 1 секунду
Рома
хочу хайлоад сделать в миниатюре)
чтоб понять разницу между разными подходами
Павел
Alexey Mishurovskiy
Коллеги, всем привет.
Есть задача - пакетная обработка данных. Если точнее - анализатор и фиксер биллинга
Кейс - берем транзакции и проверяем на ошибки и консистенность.
Записей в целом не много. 42000
После 11к обработанных записей падает производительность то есть условно, первые цилкы делаются за 8мс, потом 10, потом 12 и так делее.. потом доходит до 50, 70 и дальше растет.
Что еже сделал:
1) Доктрина выгребает батчами по 1000к через toIterable(), lmit\offset сделан через id > X
2) добавил dc_collect_cycles и unset
3) em->clear() разумеется
память почти не растет, если до было 2 гига, то сейчас выше 250мег не поднимается.. но все равно подтекает.
Что еще можно сделать чтобы ускорить?
Михаил
Павел
Михаил
Михаил
(Bonus)
Не использовать доктрину и не добавлять сущности в identity map
Михаил
Самый жёсткий поедатель памяти - monolog
Alexey Mishurovskiy
Рома
Alexey Mishurovskiy
Alexey Mishurovskiy
Жесть 😱
по делу есть что ?
Alexey Mishurovskiy
Alexey Mishurovskiy
Михаил
Михаил
Сука
Alexey Mishurovskiy
на медиуме есть статья кстати где чел по 10к батчит, у меня начинает тормозить
нигде не нашел как по факту работает toIterable()
Михаил
Короче минус минус в начале
Alexey Mishurovskiy
Alexey Mishurovskiy
—no-debug
иди обниму! 😂😂😂
Михаил
Alexey Mishurovskiy
Alexey Mishurovskiy
это вполне приемлемый результат
Михаил
Ой как красиво, с процесс баром :)
Михаил
Павел
Но свою задачу решил
Alexey Mishurovskiy
уменьшил размер батча до 1000, красота вообще
Alexey Mishurovskiy
Alexey Mishurovskiy
34 мега на обработку против раньше 2.5 гигов
Павел
Поэтому что то большое и долгое включать даже локально с дебагом очень больно
Alexey Mishurovskiy
Alexey Mishurovskiy
А еще вы знаете о том, что для relation OneToOne в любом случае делается запрос и насрать есть ли там Lazy или нет
Dmitriy
APP_ENV=prod
APP_DEBUG=0
в дев режиме все запросы логируются, жрет дико память
Dmitry
Привет! Перетащил папку с контроллерами в другую директорию
routes.yaml
controllers:
resource:
path: ../src/other-path/Controller/
namespace: App\Controller
type: attribute
но он не хочет их видеть, лезет в директорию по умолчанию, что я еще упустил?
Dmitry
вот так сработало
controllers:
resource: ../src/other-path/Controller/
type: attribute
The Ant
как думаете, в 7.1 симфы прикрутят доктрину 3?
Павел
Павел
Или имеешь ввиду мин версию?
The Ant
Хз, ч тоже не смотрел, но уже хочется 🤣
The Ant
Не, именно 3-я
Павел
чет я короче не пойму суть вопроса)))
Павел
6.3 и 6.4 поддерживают 3 доктрину
The Ant
Ну то вручную
Павел
тип что бы орм пак ставил 3 доктрину?
The Ant
Да, с рецептом.
The Ant
Но по сути пох, если интеграция готова уже...
Dmitriy
только валидация схемы сломана с орм 3, если использовать доктриновские миграции
Vlad
https://github.com/symfony/symfony/issues/54228
Илья
всем привет. кто ни будь сталкивался с ошибкой
PHP Exception RuntimeException: "Failed to start the session." at /var/www/call-center/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php line 173
подскажите, в какую сторону копать?
Nikolay
Подскажите по доктрине. Есть несколько стратегий генерации. Интересуют две:
1. ORM\GeneratedValue(strategy="AUTO") (SEQUENCE)
2. ORM\GeneratedValue(strategy="IDENTITY")
Под капотом сиквенсы (postgres < 10), но есть разница
1. Создается поле integer
2. Создается поле serial
При изменении 2 на 1 проиcходит только ALTER TABLE table ALTER id DROP DEFAULT , то есть сиквенс и там, и там есть по сути
Но есть одна существенная разница, что при persist в первом случае генерируется id, а втором нет. Не могу в доке найти про разницу, может кто в курсе, почему так?
Михаил
kakoi-to-noob
для postgres используй IDEnTITY , в последних версиях доктрины он по умолчанию для postgres идет
Михаил