Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос с большим количеством значений в операторе IN / 12 сообщений из 12, страница 1 из 1
27.04.2012, 09:22
    #37773399
Zick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
Доброго времени. Есть запрос на выборку, в котором в операторе IN задано очень большое количество значений (~1000). Запрос валится со следующей ошибкой:

ERROR [HYT00] [Cache ODBC][State : S1T00][Native Code 450]
[c:\windows\system32\inetsrv\w3wp.exe]
[SQLCODE: <-450>:<Превышение тайм-аута для запроса>]
[Cache Error: <<ALARM>%0AmHk1+3^%sqlcq.XXX.436>]
[Location: <ServerLoop - Query Fetch>]
[%msg: <SQL statement execution timed out due to user timeout>]

Что подскажете для разрешения данной проблемы?

Спасибо.
...
Рейтинг: 0 / 0
27.04.2012, 09:25
    #37773406
Zick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
P.S. Если значений мало (10-20), то все отлично работает.
...
Рейтинг: 0 / 0
27.04.2012, 09:26
    #37773408
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
$zv ?
...
Рейтинг: 0 / 0
27.04.2012, 09:42
    #37773442
Zick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
servit, Cache for Windows (x86-64) 2010.2.4 (Build 802_1U) Fri May 6 2011 20:06:36 EDT
...
Рейтинг: 0 / 0
27.04.2012, 09:47
    #37773452
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
Zick,

Судя по ошибке, запрос делаешь в каком то веб-приложении, и запрос не успевает выполниться за пользовательский таймаут, может стоит его увеличить, либо что-то изменить в запросе чтобы он не был таким большим, разбить на несколько запросов, и в IN подставлять порциями
...
Рейтинг: 0 / 0
27.04.2012, 09:50
    #37773460
Zick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
DAiMor, да, из веб-приложения, но делал запрос и, просто, из редактора запросов - та же самая картина.
...
Рейтинг: 0 / 0
27.04.2012, 10:15
    #37773501
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
Zick ,

Варианты:
запретить таймаут в настройках ODBC: Disable Query Timeout ;

увеличить таймаут в коде при подключении через ODBC, если API позволяет;
из документацииQuery Timeout — If 1, causes the ODBC client driver to ignore the value of the ODBC query timeout setting.
The ODBC query timeout setting specifies how long a client should wait for a specific operation to finish. If an operation does not finish within the specified time, it is automatically cancelled. The ODBC API provides functions to set this timeout value programmatically. Some ODBC applications, however, hard-code this value. If you are using an ODBC application that does not allow you to set the timeout value and the timeout value is too small, you can use the Disable Query Timeout option to disable timeouts.
переписать запрос с использованием %INLIST
В документации к версии 2012.2 чуть побольше информации.

использовать временную(глобальную) таблицу, а запрос немного видоизменить:
select * from sqlru.test where field in (select field1 from ASPNET.temp)
...
Рейтинг: 0 / 0
27.04.2012, 10:19
    #37773513
Zick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
servit, спасибо большое! Заработало после того, как в строке подключения прописал Query Timeout = 1.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.09.2013, 13:38
    #38390930
Chumakov_JA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
а если я подключаюсь через драйвер
InterSystems.Data.CacheClient.dll

строка подключения
string ConnStr = "Server = " + server.Text + ";"
+ " Port = 1972;"
+ " Namespace = BASE;"
+ " User ID = user;"
+ " Password = pssword;"
+ " CONNECTION TIMEOUT = 90;"
+ " QUERYTIMEOUT = 1;"
+ "";

и все равно получаю
ответ

[SQLCODE: <-450>:<Превышение тайм-аута для запроса>]
[Location: <ServerLoop - Query Fetch>]
[%msg: <SQL statement execution timed out due to user timeout>]
...
Рейтинг: 0 / 0
09.09.2013, 14:35
    #38391025
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
Chumakov_JA ,
    Query Timeout (QueryTimeout) "Query Timeout" предназначен для ODBC , а не Caché .NET Provider (ADO.NET & Object)
Troubleshooting: Connection timeout errors (cм. свойство CommandTimeout класса InterSystems.Data.CacheClient.CacheCommand )
...
Рейтинг: 0 / 0
13.09.2013, 04:26
    #38395407
sigmov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
Chumakov_JAа если я подключаюсь через драйвер
InterSystems.Data.CacheClient.dllНикогда не понимал это стремление - собирать строки подключения "вручную". Зачем? - практически во всех коннекторах есть же специализированные билдеры......
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CacheConnectionStringBuilder ccsb = new CacheConnectionStringBuilder()
{
    LogFile = null,
    Server = "localhost",
    Port = 1972,
    User = "_SYSTEM",
    Password = "SYS",
    ConnectionTimeout = 15000,
};
CacheConnection cc = new CacheConnection(ccsb.ConnectionString);
...
Рейтинг: 0 / 0
18.09.2013, 13:36
    #38400121
rstr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большим количеством значений в операторе IN
Zick, Может быть сделать вычисляемое поле, в котором возвращать 1/0 при попадании какого то элемента в массив?
Тогда вместо условия Field1 In (@BigList) будет что-то вроде Field1Calc=1.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос с большим количеством значений в операторе IN / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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