Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблема выполнения запроса из под JAVA / 11 сообщений из 11, страница 1 из 1
07.02.2007, 07:09
    #34310989
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема выполнения запроса из под JAVA
Сервер 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
07.02.2007, 10:50
    #34311549
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема выполнения запроса из под JAVA
Попробуйте вместо параметров даты использовать актуальные значения.
Оптимизатор, не зная их (эти актуальные значения) в момент построения плана запроса, может строить совершенно другой план.
Вы можете сравнить эти планы - один с параметрами, другой - с актуальными значениями.
...
Рейтинг: 0 / 0
07.02.2007, 11:26
    #34311768
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема выполнения запроса из под JAVA
Mark BarinsteinПопробуйте вместо параметров даты использовать актуальные значения.
Оптимизатор, не зная их (эти актуальные значения) в момент построения плана запроса, может строить совершенно другой план.
Вы можете сравнить эти планы - один с параметрами, другой - с актуальными значениями.

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

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

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

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

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

у нас в приложении сотни запросов с параметрами и мы уже второй раз нарвались на ситуацию когда db2 неправильно работает если поле имеет тип DATE и стоит проверка с параметром. Кусаем щаз локти что в первый раз не задокументировали workaround...
...
Рейтинг: 0 / 0
08.02.2007, 11:48
    #34315175
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема выполнения запроса из под JAVA
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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблема выполнения запроса из под JAVA / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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