SQL Server запрос работает медленно из Java - PullRequest
9 голосов
/ 07 июня 2009

У меня есть Java-программа, которая запускает несколько запросов к базе данных сервера SQL. Первый из них, который запрашивает представление, возвращает около 750 тыс. Записей. Я могу выполнить запрос через SQL Server Studio Studio, и я получаю результаты примерно через 30 секунд. Тем не менее, я запустил программу для запуска прошлой ночью. когда я проверил его этим утром, этот запрос все еще не дал результатов обратно в java-программу, примерно через 15 часов.

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

вот код

stmt = connection.createStatement();
clientFeedRS = stmt.executeQuery(StringBuffer.toString());

EDIT1:

Ну, это было давно, и это отвлеклось, но эта проблема вернулась. Я посмотрел на обновление с jdbc driver v 1.2 до 2.0, но мы застряли на jdk 1.4, а v 2.0 требует jdk 1.5, так что это не стартер. Теперь я смотрю на свойства моей строки подключения. Я вижу 2, которые могут быть полезны.

SelectMethod=cursor|direct
responseBuffering=adaptive|full

В настоящее время с проблемой задержки я работаю с курсором в качестве selectMethod и со значением по умолчанию для responseBuffering, которое заполнено. Может ли изменение этих свойств помочь? если это так, какие будут идеальные настройки? Я думаю, основываясь на том, что я могу найти в Интернете, что использование метода прямого выбора и адаптивной буферизации ответов может решить мою проблему. есть мысли?

EDIT2:

Мы закончили изменять оба этих параметра строки соединения, используя метод выбора по умолчанию (direct) и указав responseBuffering как адаптивный. Это в конечном итоге работает лучше всего для меня и устраняет проблемы с задержкой, которые я видел. спасибо за помощь.

Ответы [ 13 ]

0 голосов
/ 07 июня 2009

Чтобы начать отладку, было бы хорошо определить, находится ли проблемная область в базе данных или в приложении. Вы пытались изменить запрос так, чтобы он возвращал гораздо меньший результат? Если это не вернется, я бы посоветовал выбрать способ доступа к БД из Java.

0 голосов
/ 07 июня 2009

Тот факт, что он выполняется быстро из среды Management Studio, может быть вызван неверно кэшированным планом запросов и устаревшими индексами (скажем, из-за большого импорта или удаления). Возвращает ли он все записи 750 КБ в SSMS?

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

0 голосов
/ 07 июня 2009

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

...