|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
skyANA Megabyte пропущено... Эмм. Я даже не знаю, с чего начать. Неоптимальные запросы от простых разработчиков, выросший объем данных, изменения в логике работы с таблицой при доработках. Все это совершенно не обязательно вылезет сразу в виде проблемы производительности. Это выстрелит через неделю\месяц\полгода\год. Ну это я вам самые простые варианты назвал. + может не хватать ресурсов железа, и надо определить, каких конкретно. Megabyte пропущено... Вы про конкретно нашу систему на моей текущей работе спрашиваете? А какая разница, как что на моей работе? Мы же вроде не ее здесь обсуждаем. А если система такая, что хоть сто раз в день накатывай/откатывай версии, то и разработчик в случае чего поправит свой код и пользователи ничего не заметят. Бывает так, запустили проект, индексы не сделали. Их не сделали не обязательно потому что не разбираются в этом, а потому, что на этапе разработки проекта еще не было известно, какие отчеты захочет заказчик. Данных за неделю накопилось, проект стал тормозить. А бывает так. Другой разработчик сделал какой-то полезный для бизнеса функционал, сделал джоб для заполнения новой структуры данных. Первые полгода все было хорошо, потом у нас стал тормозить импорт данных(первичные данные переформатировались и заливались в новую более удобную для анализа структуру). Источник проблемы был найден, но отключить(джоб) его уже нельзя. Данные функционал необходим для работы. Запустили проект, несколько месяцев он работал. Даже не то, чтобы тормозил, но запросы по этому проекту часто попадали в список самых неоптимальных\медленных. Одними индексами там было не обойтись, надо было, для начала, поменять алгоритм работы проекта, т.к. делать индекс на текущей структуре было бы не правильно\не оптимально. Ну и я ежедневно мониторю, какие индексы необходимы для запросов. В день по 2-3 индекса делаю, либо дорабатываю(меняю один индекс на другой). А то если втупую лепить индексы по статистике, то будет куча похожих индексов. 2) Мы не продаем ПО, мы продаем услуги(аутсорсинговый call-центр), т.е. вся система у нас внутри. Как такового релиза нет, есть просто заявки на доработку отчета\другие услуги. Как разработчик сделал, протестил по возможности, менеджер проверил, тут же это и применяется в системе. Просто дело в том, что другие разработчики не разбираются в оптимизации SQL-запросов, но делают отчеты\другие услуги. :) И если у нас тормоза, то нам нельзя ждать, пока разработчик разберется, поправит, иначе заказчик просто нас пошлет, если у него будет отчет грузиться по 10мин или скрипт сценария разговора у оператора по проекту будет работать со скрипом и клиенты просто будут бросать трубку. У нас даже небольшой простой системы\проекта очень дорого нам обойдется финансово. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 12:36 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford т.е. типа отчета? stenford вы откровенно путаетесь в том, для чего ORM предназначены, никто их для целей ETL никогда не применяет Вот вам еще один пример. Кодогенерация у той же аксапты местами э... странная. Есть штук 5 таблиц по 200 полей, что-то заджойнено, и если память не подводит 2 селфджойна + что-то в корреляции. Сфигали эта глупая железяка пытается тянуть ВСЕ поля всех таблиц, если я явно указал чего мне нужно? Казалось бы - ну и ладно, пусть перечисляет все поля с псевдонимами, но нет - система падает с сообщением что буфер для запроса маленький, и иди крути ключи запуска апп-серверов где можно буфер увеличить... а ведь это налету не сделаешь, нужен рестарт. Ах да, а динамические запросы, которые вообще пользователям в виде конструктора отданы? Там ведь могут быть очень серьезные полеты фантазии... Вот вам ORM как есть, а с учетом того что вся работа идет от имени одного пользователя, то попытки профайлить происходящее еще та песня. Впрочем, я ведь об ORM похоже ничего не знаю, ну и ладно. Почитаю вас, вдруг чего интересного и нового напишите. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 16:11 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Ruuu И разумеется «по цепочке» план в хп не ухудьшается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 17:56 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Скажу даже больше, текущий проект например мы делаем на архитектуре микросервисов, для тех кто не в курсе - это когда монолитная система бьется на несколько независимых частей, включая базы данных. Нет, очень модно, красиво, но простенький веб-сайтик с каталогом на несколько тысяч позиций начинает отвечать секунд по 10. stenford SERG1257 Еще один момент: stenford противопоставляет ORM vs хранимки, забывая что его ORM это новая программа, а та что с хранимками это старая программа The Vietnam of Computer Science (Posted on Jun 26, 2006). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 18:17 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Вообще, спор отчасти бестолковый, зависит от многих "но". Например, мы ОРМ натягиваем на существующую модель данных или модель данных генерится ОРМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2018, 18:29 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
kDnZP т.е. не типа отчета ни разу... бизнес называет это срез времени :), у меня свое определение этому безобразию... kDnZP Вот вам еще один пример. Кодогенерация у той же аксапты местами э... странная. Есть штук 5 таблиц по 200 полей, что-то заджойнено, и если память не подводит 2 селфджойна + что-то в корреляции. Сфигали эта глупая железяка пытается тянуть ВСЕ поля всех таблиц, если я явно указал чего мне нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 01:33 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
CawaSPb Ну, мы же не говорим про дебильные недо-СУБД, компилирующие планы функций отдельно, не встраивая предварительно функцию напрямую в запрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 01:46 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
CawaSPb И тут с производительностью наступает п.... :) Нет, очень модно, красиво, но простенький веб-сайтик с каталогом на несколько тысяч позиций начинает отвечать секунд по 10. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 01:48 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford CawaSPb Ну, мы же не говорим про дебильные недо-СУБД, компилирующие планы функций отдельно, не встраивая предварительно функцию напрямую в запрос... Вышеприведённое - про: stenford без recompile неверный план подзапроса/функции в хранимке может по цепной реакции потянуть неверные решения для остального запроса Ни к чему понятие "план фукции". Возможно, что вся фунция схлопнется до какого-то тривиального действия или вообще к константе на этапе компиляции. Нет, можно специально подвывернуться, чтобы ф-я вдруг стала некоторым чёрным ящиком. Тогда да, будет каждый раз вызов (или не каждый, если она DETERMINISTIC). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 02:41 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
CawaSPb Во "взрослой" СУБД текст функций (как табличных, так и скалярных) "встраивается" в запрос (из хранимки ли, из приложения ли) на уровне текста (грубо - инлайнится), потом составляется план получившейся конструкции. И рекомпилится, не рекомпилится, рекомпелится "по средам при нахождении луны в первой четверти" в зависимости от "пожеланий трудящихся". Ни к чему понятие "план фукции". Возможно, что вся фунция схлопнется до какого-то тривиального действия или вообще к константе на этапе компиляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 11:41 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
CawaSPb Например, мы ОРМ натягиваем на существующую модель данных или модель данных генерится ОРМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 11:42 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford отчетами я называю все, что вываливается пользователю/системе без дальнейшей бизнес-обработки. stenford ORM (по крайней мере EF, про аксапту не знаю) не тянет все поля, там указываются необходимые поля и sql генерируется только для них. ORM'ы уже достаточно взрослые продукты, что-бы совершать уж совсем детские ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:25 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford так именно по этой причине скан и может повалить весь остальной запрос, если где-то в подзапросе выбрался скан - то остальной план конечно подстроится по него, со всеми вытекающими. Ну т.е. можно конечно сказать что по стечению обстоятельств убыток от скана может невилироваться остальным планом где вдруг это принесло какую-то неожиданную пользу. Но это называется слепым везением ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:28 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford CawaSPb Во "взрослой" СУБД текст функций (как табличных, так и скалярных) "встраивается" в запрос (из хранимки ли, из приложения ли) на уровне текста (грубо - инлайнится), потом составляется план получившейся конструкции. И рекомпилится, не рекомпилится, рекомпелится "по средам при нахождении луны в первой четверти" в зависимости от "пожеланий трудящихся". Ни к чему понятие "план фукции". Возможно, что вся фунция схлопнется до какого-то тривиального действия или вообще к константе на этапе компиляции. Но, похоже, вы не догоняете. Нет понятия "плана ф-и" и "остального плана". После автоматического встраивания тела функции запрос может быть вообще переписан компилятором так, что ничего похожего на оригинальный код вы там не найдёте. Какие-либо условия могут уйти, например, вниз в дереве подзапросов, добавившись к коду ф-и, что может повлиять на выбор индекса для доступа. А может код будет оставлен как есть. Допустим, функция - select по таблице по какому-либо критерию. Что там будет использоваться (table scan, index scan, partial index scan, ...), будет выбираться для каждого конкретного общего запроса по-своему (и рекомпилиться/не рекомпилиться по желанию Developer'а/DB админа). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 16:06 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford CawaSPb Например, мы ОРМ натягиваем на существующую модель данных или модель данных генерится ОРМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 16:17 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
kDnZP Вы о какой СУБД это говорите? Просто на тот же SQL Server я ваше утверждение не могу натянуть вообще никак... Скан это не всегда плохо для начала, если запрос будет обрабатывать 80% таблицы, то скан для данного случая будет чуть ли не самым эффективным вариантом. CawaSPb Не. Это называется стоимостной оптимизацией. Иногда, конечно, выливающейся в чистое везение или невезение :) Но, похоже, вы не догоняете. Нет понятия "плана ф-и" и "остального плана". После автоматического встраивания тела функции запрос может быть вообще переписан компилятором так, что ничего похожего на оригинальный код вы там не найдёте. Какие-либо условия могут уйти, например, вниз в дереве подзапросов, добавившись к коду ф-и, что может повлиять на выбор индекса для доступа Например для простоты возьмем такой: Код 1. 2. 3. 4. 5. 6.
Как вы-же совершенно правильно говорите, оптимизатор попытается схлопнуть оба запроса, и в итоге может решить, что вместо джойна по индексу во второй части union можно заюзать результаты скана из первой части, т.е. сравнивать улицу с каждой записью из первой части или типа того, несмотря на то, что при запуске второй части отдельно выбрался-бы поиск по индексу В простом примере это не сильно очевидно, но при использовании ORM таких запросов в общем случае не будет. Будет 2 разных метода, один на поиск по городам, другой - по улицам. В результате у меня будет один скан на города, и 3 джойна с индексами по улицам. В случае использования хранимки будет 3 скана со сравнением по каждой записи из таблицы с улицами. С увеличением сложности запросов и хранимок разница будет только возрастать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:56 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
CawaSPb Понятно, что и так, и так можно. Но спор то идёт о том, плохи нынешние ОРМ или нет. Без этого контекста (кого на кого натягиваем) спор ни о чём. Принципиально разные ситуации (возьмите хоть работу с наследованием). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:59 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Предлополжим, что первая часть запроса уводит dbo.Cities в скан, и также предположим что запускается это для 3 улиц: 'Rare street', 'Моrе rare street', 'Yet even more rare street'. Как вы-же совершенно правильно говорите, оптимизатор попытается схлопнуть оба запроса, и в итоге может решить, что вместо джойна по индексу во второй части union можно заюзать результаты скана из первой части, т.е. сравнивать улицу с каждой записью из первой части или типа того, несмотря на то, что при запуске второй части отдельно выбрался-бы поиск по индексу В простом примере это не сильно очевидно, но при использовании ORM таких запросов в общем случае не будет. Будет 2 разных метода, один на поиск по городам, другой - по улицам. з.ы. Запрос изначально кривой, с кривой логикой, странно ожидать, что оптимизатор постоит идеальный план. Он же не ИИ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 15:44 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford той разницей что когда у вас хранимка в сотни строк, с ветвлением по массе условий и прочего - то good luck получить там оптимальный план на последующие вызовы А на клиенте сортируем добавляем условия и т.д. тем же linq. Ето для селекта конечно. для создания изменения сложного об'екта таки да сотни строк имеют право быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 17:32 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
yabs В ОРМ кстати можно логить все запросы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 17:36 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Предлополжим, что первая часть запроса Это вообще-то один запрос, и если по статистике на [Name] = 'Moscow' получается вес .8 к примеру, то скан более чем оправдан, если же индекса вообще нет - то как бы добавить нужно. Вот вам на для помедитировать над планами и тем что и почему получается: Код 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Megabyte з.ы. Запрос изначально кривой, с кривой логикой, странно ожидать, что оптимизатор постоит идеальный план. Он же не ИИ. * А вообще надоело. Всем спасибо, я свободен. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 19:20 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
Megabyte В данном простом примере в результате будет выполнено 2 запроса, вместо одного. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 03:47 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
kDnZP ??? Это вообще-то один запрос, и если по статистике на [Name] = 'Moscow' получается вес .8 к примеру, то скан более чем оправдан, если же индекса вообще нет - то как бы добавить нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 03:53 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
kDnZP Не нужно недооценивать оптимизатор, тупит он не столь чтобы часто. Программист тупит чаще ИМХО. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 14:58 |
|
Что происходит на рынке DB вакансий в ЕС?
|
|||
---|---|---|---|
#18+
stenford Megabyte В данном простом примере в результате будет выполнено 2 запроса, вместо одного. В случае, если запрос вызывается редко хрен бы с ним, а если часто, то минус производительность. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 15:01 |
|
|
start [/forum/topic.php?fid=7&msg=21641244&tid=1297162]: |
0ms |
get settings: |
17ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
477ms |
get tp. blocked users: |
52ms |
others: | 15ms |
total: | 635ms |
0 / 0 |