metaclass: (Default)
[personal profile] metaclass
Я всегда думал, что может заставить людей не использовать связываемые параметры в запросах и извращаться с самостоятельной конкатенацией запросов, проверкой на sql-инъекции, эскейпингом, обработкой локалей и форматов и прочим садомазохизмом при работе с СУБД.
Оказывается, bind-параметры влияют на производительность.

То, что он формально прав, и что, зная значения параметров, СУБД может выбрать более оптимальный план, не меняет того факта, что это сродни ассемблерным вставкам и экономии на количестве переменных на стеке при разработке опердени, чтобы "работало быстрее".

Я счас поискал в гугле про подобные проблемы - у людей с OSM подобная фигня с бинд-параметрами в Postgresql вылезла. Но это на таблице в 500 млн записей и очень хитрожопном запросе. Предполагаю, что с такими объемами на обычной опердени жопа начнется намного раньше, чем разница между планами хоть как-то повлияет.
Не говоря уже о том, что правильный план можно прибить гвоздями, как минимум в Firebird так точно и вообще не мучится.

Date: 2010-03-06 09:27 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
То, что он формально прав, и что, зная значения параметров, СУБД может выбрать более оптимальный план, не меняет того факта, что это сродни ассемблерным вставкам и экономии на количестве переменных на стеке при разработке опердени, чтобы "работало быстрее".
Не, батя, ты передёргиваешь.
Я лишь уточнил, чем bind-параметры плохи.
Годятся они в 90% случаев, но надо также понимать, когда они не годятся.

Date: 2010-03-06 09:53 pm (UTC)
From: [identity profile] dmitry-vk.livejournal.com
90%? Или все-таки 99.99999%?

Date: 2010-03-06 09:56 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
А вот от приложения зависит.
Я разработкой OLAP базы занимаюсь, у нас запросы выполняются от 10 минут и выше, данных много (десятки гигабайт в лучшем случае).
Так что не использовать гистограммы при построении запросов с ?x или выводить тип для LPAD как varchar(8000) - смерти подобно.

В то же время уверен, что большинство веб-приложений запросы сложнее одного джойна и where id = ?1 не используют.

От ситуации зависит, короче.

Date: 2010-03-06 10:07 pm (UTC)
From: [identity profile] dmitry-vk.livejournal.com
Ну значит надо в базе запрос перестраивать тогда, когда есть значения параметров. Это ведь не значит, что параметры при этом подлежат обязательному протаскиванию через строки. Интерфейс - интерфейсом, внутренности - внутренностями, и нечего мешать их.

Date: 2010-03-06 10:12 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
Естественно, мы просто перестраиваем запрос.

Да, для веб-приложений это всё мышиная возня, если подумать. Для того и посоветоваться пришёл.

Кстати, а bind-параметры 100% предохранят от sql-injection?
Я вот не могу придумать, как они могут протекать, но как бэ бережённого бог бережёт

Date: 2010-03-06 11:51 pm (UTC)
From: [identity profile] dmitry-vk.livejournal.com
bind-параметры никогда не подвергаются синтаксическом анализу, они никак не могут изменить структуру запроса, поэтому инъекция кода исключена 100% (патологические случаи вроде использования аналога eval не берем в расчет).

Date: 2010-03-06 10:27 pm (UTC)
From: [identity profile] mr-st.livejournal.com
По моему основная проблема для опердени это уложить безумные бизнеспроцессы в более менее логичную схему. А потеря производительности на бинд параметрах настолько мелкая техническая проблема что и обсуждать нечего

Date: 2010-03-06 11:07 pm (UTC)
From: [identity profile] ennor.livejournal.com
Смешно, да. Уж что-что, а драйверы доступа вылизываются так, как мало что иное - количество тестеров огромное же.

При такой аргументации автоматизация бизнес-процессов такими монстрами, как шарепойнт или аксапта, должна выглядеть... я даже не знаю, чем :)))

Date: 2010-03-06 11:18 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
При такой аргументации автоматизация бизнес-процессов такими монстрами, как шарепойнт или аксапта, должна выглядеть... я даже не знаю, чем :)))
Понимаете, у меня просто профессиональная деформация =))) Когда оптимизируешь движок на тему эффективного выполнения запросов, sharepoint и ORM'ы выглядят издевательством над твоей работой ))))

Date: 2010-03-07 05:38 am (UTC)
From: [identity profile] theiced.livejournal.com
ты грузишься и вообще целиком не прав. скорость-хуёрость. бинд _гарантированно_ (ну - 99.999999999%) отловит все возможные проблемы. твоё местечковое решение может в каком нить месте не сработать или забудешь заэскэйпить или ещё какая хуета случится. и толку от твоих более быстрых запросов если база наебнёццо или кредитки все попиздят?

Date: 2010-03-07 02:21 pm (UTC)
From: [identity profile] theiced.livejournal.com
вопрос значит закрыт?

Date: 2010-03-07 02:25 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
В проблеме, что вызвала мои вопросы в исходном посте? Вполне.

Date: 2010-03-07 02:35 pm (UTC)
From: [identity profile] theiced.livejournal.com
так не было проблемы ёпта.

Date: 2010-03-07 02:39 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
Была проблема - уязвимость sql-injection.
Решается bind-параметрами.

Date: 2010-03-07 02:40 pm (UTC)
From: [identity profile] theiced.livejournal.com
но про бинды ты знал, просто стал оптимизировать там где оптимизировать низя.

Date: 2010-03-07 03:35 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
Нет, я всего лишь захотел узнать альтернативы.

Date: 2010-03-07 11:14 am (UTC)
From: [identity profile] ennor.livejournal.com
Ну, в разных ситуациях бывают разные приоритеты - может быть скорость работы, а может быть скорость разработки. :)

Date: 2010-03-07 02:20 pm (UTC)
From: [identity profile] theiced.livejournal.com
во всех случаях приоритет один - надёжность. всё остальное похуй если нет надёжности.

Date: 2010-03-07 03:12 pm (UTC)
From: [identity profile] ennor.livejournal.com
Скажи это владельцу бизнеса, мальчик. Мне ебать моск не надо.

Date: 2010-03-07 09:50 pm (UTC)
From: [identity profile] theiced.livejournal.com
мальчуган, надёжность неважна только если владелец бизнеса нии говна и торфа. в остальных случаях это даже не обсуждается.

Date: 2010-03-08 01:51 pm (UTC)
From: [identity profile] golosptic.livejournal.com
Вы не правы, к сожалению.
Жизнь несколько неприятнее, чем теории.

Date: 2010-03-07 01:17 am (UTC)
From: [identity profile] volodymir-k.livejournal.com
> Уж что-что, а драйверы доступа вылизываются так, как мало что иное

Хм, у меня была масса разных опытов. Например, в Оракле 10.1 JDBC запрос с типа больше 7 или 10 параметров не работает. Почему? Ну бага. Что делать? Ждать следующего релиза. Через год всё будет.

Date: 2010-03-07 05:36 am (UTC)
From: [identity profile] theiced.livejournal.com
тут всё просто. не использовать какашечные говнобазы.

Date: 2010-03-07 11:16 am (UTC)
From: [identity profile] ennor.livejournal.com
Я имел в виду немного иное. Глюки в DAL вылавливаются довольно быстро благодаря огромной тестерской базе, а вот с какой скоростью их фиксят - зависит уже от вендора.

Date: 2010-03-06 11:22 pm (UTC)
From: [identity profile] a-lourier.livejournal.com
bind бывает двух видов - когда подстановка значений идет на стороне клиента и когда на стороне сервера. Если это делает клиент, тогда сервер получает уже обычный запрос и его исполняет. От инъекций спасают оба варианта. Выбор между ними надо делать уже, исходя из особенностей СУБД и задачи.

Date: 2010-03-07 06:48 am (UTC)
From: [identity profile] vp.livejournal.com
Почитал треды

Солидарен с этим:
"Ты знаешь на кого похож? На деда-ассемблерщика, которого заставили на ООП языке писать опердень и он экономит переменные на стеке и оптимизирует операции ассемблерными вставками, потому что когда-то в молодости ему не хватало памяти и скорости процессора."

Это какая-то мутная экономия.

Date: 2010-03-07 09:57 am (UTC)
From: [identity profile] madeveloper.livejournal.com
Всякие обратно-коническо-резьбовые 10-минутные запросы нужно хинтить. Во всех остальных случаях при высокой нагрузке байнды дают выйгрыш в скорости, так как сервер использует уже распарсенные закешированные запросы.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 13th, 2025 01:37 am
Powered by Dreamwidth Studios