В SQL Server 2008 определено представление, объединяющее 4 таблицы.Выполнение этого представления в SQL Server Management Studio занимает около 3 секунд и возвращает около 45 000 записей.Мое приложение написано на Java с использованием hibernate, чтобы просто выполнить запрос «из MyViewObject» в HQL.Когда это выполняется, время выполнения постоянно составляет около 45 секунд.Я также попытался просто использовать JDBC для выполнения этого запроса и получил тот же уровень производительности, поэтому я предположил, что он не имеет никакого отношения к hibernate.
Мой вопрос: что я могу сделать, чтобы диагностировать эту проблему?Очевидно, что то, как Management Studio выполняет запрос, отличается от того, как мое приложение выполняет запрос, но я не смог придумать много.
Единственное, что я придумал какпотенциально жизнеспособным объяснением является проблема с библиотекой jtds, которая содержит драйвер для SQL Server в Java.
Будем весьма благодарны за любые рекомендации.
ОБНОВЛЕНИЕ Я вернулсячтобы попробовать чистый JDBC и попытался добавить атрибуты selectMethod и responseBuffering в строку подключения, но не получил никаких улучшений.Я также взял свой код JDBC из своего приложения и запустил его из тестовой программы, содержащей только мой код JDBC, и он запустился в течение ожидаемых 3 секунд.Так что для меня это кажется экологичным для приложения.
Мое приложение - приложение на основе Google Web Toolkit (GWT), и код JDBC выполняется в моем основном сервлете RPC.По сути, метод RPC получает вызов и немедленно выполняет код JDBC.Ничто в этой настройке не дает мне много указаний на то, почему производительность ужасна.Я собираюсь попробовать драйвер JDBC 3.0 и посмотреть, будет ли он работать лучше, но, похоже, это еще не решит проблему.
Моя цель на данный момент - получить мой запросработать вживую с JDBC, а затем переключить его обратно в Hibernate, чтобы я мог сделать тестирование достаточно простым.Спасибо за помощь до сих пор!
ОБНОВЛЕНИЕ 2 Я наконец начинаю сосредотачиваться на источнике проблемы, хотя все еще не знаю, какова реальная проблема.Я открыл представление в SQL Server и скопировал оператор SQL (довольно большой) точно в мой код и выполнил его, используя JDBC, вместо того, чтобы извлекать данные из представления, и большинство проблем производительности исчезли.Кажется, что некоторая комбинация GWT, SQL Server Views и JDBC здесь не работает должным образом.Я не рассматриваю сохранение очень большого рукописного запроса в своем коде как долгосрочное решение, но оно предлагает немного больше понимания.