powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблема выполнения запроса из под JAVA
11 сообщений из 11, страница 1 из 1
Проблема выполнения запроса из под JAVA
    #34310989
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер DB2 8.2 fix pack 13 и пробовал с 14
java SUN 1.4.2.12
библиотека доступа ibm dab 3.5
среда разработки eclipse 3.3m5

запрос вот такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT  a.WrtSbjCode, a.WrtID,  a.WrkBeginDate, 
 COALESCE(a.WrkEndDate, a.WrkBeginDate) as WrkEndDate,   
 a.WrkPlanVolume, a.WrkPlanSum,   a.WrkActualVolume, a.WrkActualSum,   
 a.WrkGIDSbjCodeObj, a.WrkGIDObj,   
 RTRIM(RTRIM(b.StrName) || ' ' || RTRIM(b.AdrHouseNum) || ' ' || RTRIM(coalesce(b.AdrKorpNumber, ''))) as HsName,
 c.HrgSbjCode, c.HrgID  
 FROM vFsvTreeWork a
   INNER JOIN vLivAddressText b ON 
    ((a.WrkGIDSbjCodeObj, a.WrkGIDObj) = (b.GIDSbjCode, b.GID))
   INNER JOIN vLivLstHsObjPoss c ON
    ((b.AdrSbjCode, b.AdrID) = (c.AdrSbjCode, c.AdrID))
 WHERE 
  ((not a.WrkGIDSbjCodeObj is null) and (not a.WrkGIDObj is null))  
  AND
  (a.PrjSbjCode, a.PrjID) = (?, ?)  
  AND
  ((a.WrkBeginDate >= ?) AND (COALESCE(a.WrkEndDate, a.WrkBeginDate) <= ?))
    AND
  ((a.WrkBeginDate >= c.HroBeginDate) AND (COALESCE(a.WrkEndDate, a.WrkBeginDate) <= COALESCE(c.HroEndDate, '2999-12-31')))

при попытке выполения зависает, при этом сервак молотит винтом - хорошо слышно :)
если убрать проверку: ((a.WrkBeginDate >= ?) AND (COALESCE(a.WrkEndDate, a.WrkBeginDate) <= ?))
то запрос прекрасно отрабатывает
причем проблема только если из java с параметрами... в рапиде запрос отрабатывает за 1 сек.

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

Никто не сталкивался с таким поведением: db2 подвисает на определенных сочетаниях условий с датами в where части запроса с параметрами?

Пока заборол этот глюк путем вынесения этой проверки в java код, но осадок остался...
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34311549
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте вместо параметров даты использовать актуальные значения.
Оптимизатор, не зная их (эти актуальные значения) в момент построения плана запроса, может строить совершенно другой план.
Вы можете сравнить эти планы - один с параметрами, другой - с актуальными значениями.
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34311768
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinПопробуйте вместо параметров даты использовать актуальные значения.
Оптимизатор, не зная их (эти актуальные значения) в момент построения плана запроса, может строить совершенно другой план.
Вы можете сравнить эти планы - один с параметрами, другой - с актуальными значениями.

Без параметров вроде отрабатывает нормально, но это то же полумера..., т.е. надо строку запроса каждый раз формировть в цикле

Просто интересно чей это глюк: db2 или компонент доступа
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34311911
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey KuznetsovПросто интересно чей это глюк: db2 или компонент доступаЯ бы назвал это фичей, а не глюком.
Представьте себя оптимизатором запросов. :)
Вот вам таблица:
Код: plaintext
d date | ...
Есть индекс (даже, может, уникальный) по полю d.
Вот вам запрос:
Код: plaintext
select * from t where ?<=d and d<=?
Какой план запроса вы выберите?

Индексное сканирование?
Но актуальные границы даты могут быть очень широкие (т.е. запросом отберется большой процент записей таблицы) и табличное сканирование окажется предпочтительней.

И наоборот, если выбрать табличное сканирование, то из-за узкого актуального диапазона дат будет выгоднее индексное сканирование.

Так что вы выберите?
А ведь это самый простой случай...
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34312283
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinЯ бы назвал это фичей, а не глюком.
Представьте себя оптимизатором запросов. :)
...
Фича там или баг но зависать то зачем? мне пофиг пусть он хоть что там делает лишь бы не зависал :)
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34312379
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey KuznetsovФича там или баг но зависать то зачем? мне пофиг пусть он хоть что там делает лишь бы не зависал :)У вас что зависает?
Приложение, пославшее этот запрос?
Или весь менеджер БД, т.е. никто другой больше не может законнектится или выполнять что-либо?
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34312806
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein Alexey KuznetsovФича там или баг но зависать то зачем? мне пофиг пусть он хоть что там делает лишь бы не зависал :)У вас что зависает?
Приложение, пославшее этот запрос?
Или весь менеджер БД, т.е. никто другой больше не может законнектится или выполнять что-либо?
только приложение пославшее запрос. Оно ждет ответа от сервера и в разумные сроки не дожидается.
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34312888
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kuznetsovтолько приложение пославшее запрос. Оно ждет ответа от сервера и в разумные сроки не дожидается.Так пишите свое приложение так, чтоб оно отменяло запрос, который не вернул результат за "разумное время".
Или пользуйтесь ключевым словом QueryTimeoutInterval в db2cli.ini для выставления предела этому "разумному времени".
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34313066
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinИли пользуйтесь ключевым словом QueryTimeoutInterval в db2cli.ini для выставления предела этому "разумному времени".Тут я ошибся - это ключевое слово не для выставления таймаута.
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34314466
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinТак пишите свое приложение так, чтоб оно отменяло запрос, который не вернул результат за "разумное время".
Так вот в том то и засада что по всем признакам НЕ ДОЛЖНО ОНО уходить в ступор!!! Таблички в базе смешные по размеру. И к тому же если из запроса убрать параметры и заменить их константами, то запрос отрабатывает пулей. А вот при наличии параметров - кирдык.

у нас в приложении сотни запросов с параметрами и мы уже второй раз нарвались на ситуацию когда db2 неправильно работает если поле имеет тип DATE и стоит проверка с параметром. Кусаем щаз локти что в первый раз не задокументировали workaround...
...
Рейтинг: 0 / 0
Проблема выполнения запроса из под JAVA
    #34315175
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kuznetsovу нас в приложении сотни запросов с параметрами и мы уже второй раз нарвались на ситуацию когда db2 неправильно работает если поле имеет тип DATE и стоит проверка с параметром. Кусаем щаз локти что в первый раз не задокументировали workaround...Вы можете поэкспериментировать с предложением selectivity в запросе на разных уровнях оптимизации, если неохота каждый раз переписавать statement и вы знаете, что предикат в запросе имеет маленькую selectivity:

На сервере:
Код: plaintext
1.
2.
db2set DB2_SELECTIVITY=ALL
db2stop
db2start
В яве:
stmt = con.prepareStatement("select * from table1 where dat between ? and ? selectivity 0.001");
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблема выполнения запроса из под JAVA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]