Как я могу научиться делать реалистичные предположения о производительности базы данных? - PullRequest
7 голосов
/ 08 июля 2010

Я в первую очередь Java-разработчик, который работает с Hibernate, и в некоторых моих случаях использования у меня есть запросы, которые выполняются очень медленно по сравнению с тем, что я ожидаю.Я говорил с местными администраторами баз данных, и во многих случаях они утверждают, что производительность не может быть улучшена из-за характера запроса.

Однако я не решаюсь поверить им на слово.Какие ресурсы я могу использовать, чтобы узнать, когда мне нужно смириться с этим и найти другой способ получения информации, которую я хочу, или научиться жить со скоростью, и когда я могу вызвать чушь собеседников.

Ответы [ 5 ]

10 голосов
/ 08 июля 2010

Вы на интересном этапе. Большинство разработчиков Java используют инструменты ORM, потому что они ничего не знают о базах данных, они не хотят ничего узнавать о базах данных и особенно они не хотят ничего узнавать об особенностях конкретной проприетарной СУБД. ОРМ якобы защищают нас от всего этого.

Но если вы действительно хотите понять, как должен выполняться запрос, вам нужно понять, как работает база данных Oracle. Это хорошо: вы определенно будете создавать лучшие приложения Hibernate, если будете работать с базой данных.

Комплект документации Oracle включает том по настройке производительности. Это место, чтобы начать. Узнайте больше . Как уже говорили другие, инструмент начального уровня - EXPLAIN PLAN . Другое обязательное прочтение - Oracle Руководство по базам данных . Важным аспектом настройки является понимание логической и физической архитектуры базы данных. Я также согласен с рекомендацией DCooke о книге Тома Кайта.

Имейте в виду, что есть подрядчики и консультанты, которые прекрасно зарабатывают на настройке производительности Oracle. Если бы это было легко, они были бы намного беднее. Но вы, безусловно, можете дать себе достаточно знаний, чтобы заставить этих надоедливых администраторов баз работать с вами должным образом.

7 голосов
/ 08 июля 2010

DCookie, OMG и APC получают +1 за свои ответы. Я был на стороне администратора приложений Hibernate и, как сказал Том Кайт, нет параметра «fast = true», который мог бы использовать неэффективный SQL и заставить его работать быстрее. Время от времени мне удавалось захватить проблемный запрос Hibernate и использовать анализатор Oracle SQL для создания профиля SQL для этого оператора, который повышает производительность. Этот профиль представляет собой набор подсказок, которые «перехватывают» генерацию плана выполнения оптимизатором и вынуждают его (без изменений в приложении) к лучшему, который по какой-то причине обычно игнорируется оптимизатором. Тем не менее, эти выводы являются скорее исключением, чем правилом для неэффективного SQL.

Одна вещь, которую вы можете сделать как разработчик, который, по-видимому, понимает данные лучше, чем уровень ORM, - это написание эффективных представлений для решения конкретных проблем запросов и представления этих представлений в Hibernate.

Особая проблема, на которую следует обратить внимание, - это столбцы Oracle DATE (не TIMESTAMP), которые попадают в сгенерированные Hibernate запросы и сравниваются с переменными связывания в предложении WHERE - несовпадение типов с типами данных Java timestamp предотвратит использование индексов по этим столбцам.

4 голосов
/ 08 июля 2010

Публикация моего комментария в качестве ответа:

Это компромисс с использованием ORM - вам не терпится узнать, как он создает запрос, отправляемый в базу данных.LINQ - единственный, который заинтересовал меня, потому что вы можете использовать его в сочетании с хранимыми процедурами для подобных ситуаций.Я удивлен, что администраторы баз данных не советуют вам отказываться от ORM, если вы хотите повысить скорость ...

План EXPLAIN даст вам представление об эффективности, но не совсем о перспективе,Для Oracle вам нужно будет использовать tkprof (при условии, что он доступен для вас) для анализа происходящего.

4 голосов
/ 08 июля 2010

Что является основой для ваших ожиданий эффективности запросов?Кишка чувствовать?Если вы собираетесь спорить с администраторами баз данных, вам нужно знать (как минимум), какие у вас запросы, понимать EXPLAIN PLAN и уметь указывать, как улучшить ситуацию.И, как указывает @OMG Ponies, Hibernate, возможно, плохо справляется с построением запросов - тогда что вы делаете?

Не легко?Возможно, лучшим подходом было бы взять немного менее состязательный подход с персоналом DBA и вежливо спросить, что это за запросы, которые препятствуют повышению производительности, и есть ли у них какие-либо предложения о том, как вы могли бы реорганизовать их для повышения производительности.

0 голосов
/ 08 июля 2010

это также может быть проблема структуры (нормализации) таблицы. В основном, именно поэтому я не использую Hybernate - вы всегда должны иметь возможность писать свои собственные запросы, которые являются оптимальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...