Павел
Ну для бэка знание индексов в принципе дефолт
Рома
ну когда я спрашивал тимлида с прошлой работы, мы таким не занимаемся.
Павел
ну когда я спрашивал тимлида с прошлой работы, мы таким не занимаемся.
Они каждый раз бегали к кому то "ребят мы делаем такой запрос, у нас всё ок" ?)
Рома
не такого не было)
Рома
как лара сгенерировала так и будет
Павел
Другое дело, чтобы навесить индекс или правильно колонку изменить в большой базе, это уже отдельныйе кейсы
Рома
кстати symfony ставит индексы или нет самостоятельно?
Павел
как лара сгенерировала так и будет
Для поиска навешивают программеры а не лара
Рома
через код или просто в БД?
Павел
Максимум что сделает фрейм, он навесит индексы на связи
Рома
может оптимизировали прод, но не дэв базу
Павел
кстати 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
Рома
Как может быть 10 уз с 1000 уз?
Наверно денормализованная таблица
Михаил
Самый жёсткий поедатель памяти - monolog
Alexey Mishurovskiy
Alexey Mishurovskiy
Запускать в режиме no-debug Отключить логгер на sql
я делал setLogger(null) чот не отключился он
Alexey Mishurovskiy
Жесть 😱
по делу есть что ?
Alexey Mishurovskiy
Михаил
я делал setLogger(null) чот не отключился он
Попробуйте вообще вырубить логгер, ну для чистоты эксперимента
Михаил
как переключить в режим no-debug?
А чем запускаете команды, что это? Symfny messanger или просто консольная команда?
Михаил
Сука
Alexey Mishurovskiy
на медиуме есть статья кстати где чел по 10к батчит, у меня начинает тормозить нигде не нашел как по факту работает toIterable()
Михаил
Короче минус минус в начале
Alexey Mishurovskiy
—no-debug
я понял )
Alexey Mishurovskiy
—no-debug
иди обниму! 😂😂😂
Михаил
на медиуме есть статья кстати где чел по 10к батчит, у меня начинает тормозить нигде не нашел как по факту работает toIterable()
Да там от версии к версии симфы/доктрины всё гуляет Можно ещё APP_DEBUG=0 или в продакшен режиме запустить
Alexey Mishurovskiy
Михаил
Попытайтесь понять где именно проседает
А вот как блин профайлить? Это не чистый php симфа кучу говна на стек накидывает
Alexey Mishurovskiy
это вполне приемлемый результат
Михаил
Ой как красиво, с процесс баром :)
Павел
А вот как блин профайлить? Это не чистый php симфа кучу говна на стек накидывает
Ну у человека было что MC растут во времени ставить логи и смотреть разницу в начале и конце. Ну и профайлер можно, он покажет что именно жрет больше всего и уже на это делать акцент
Павел
А какой профайлер посоветуешь? Xdebug и блэкфлаер?
Посоветовать не могу, так как пользовался только xdebug
Alexey Mishurovskiy
Ой как красиво, с процесс баром :)
еще раз спасибо - это что-то невероятное... 3 минуты обработка вместо первоначльного значения в почти 7 часов
Павел
Но свою задачу решил
Alexey Mishurovskiy
уменьшил размер батча до 1000, красота вообще
Alexey Mishurovskiy
Alexey Mishurovskiy
34 мега на обработку против раньше 2.5 гигов
Павел
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?
Павел
как думаете, в 7.1 симфы прикрутят доктрину 3?
А что там интересного? Ну просто не смотрел)
Павел
Или имеешь ввиду мин версию?
The Ant
Хз, ч тоже не смотрел, но уже хочется 🤣
The Ant
Не, именно 3-я
Павел
Не, именно 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, а втором нет. Не могу в доке найти про разницу, может кто в курсе, почему так?
Nikolay
В первом случае id обязательно при вставке тебе нужно запросить некствал Во втором посгря сама присвоит id
Ну то есть в первом случае это под капотом происходит, а во втором надо самому делать (получить id при персисте)?
kakoi-to-noob
для postgres используй IDEnTITY , в последних версиях доктрины он по умолчанию для postgres идет
Nikolay
для postgres используй IDEnTITY , в последних версиях доктрины он по умолчанию для postgres идет
Я это и хочу сделать, только в старом код есть AUTO (SEQUENCE), и ломается логика, так как на persist-е ожидается, что будет id заполнен
Nikolay
Ну то есть в первом случае это под капотом происходит, а во втором надо самому делать (получить id при персисте)?
Если мне память не изменяет, когда у тебauto increment например как в mysql и простом варианте ostgres, о узнать следующий айдишник почти не реально. Тот жу max дает тебе приблительное значение. А вот с последовтельностью там иначе. Ты можешь вызвать next_val и значение для тебя зарезервируется