powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос с большим количеством значений в операторе IN
12 сообщений из 12, страница 1 из 1
Запрос с большим количеством значений в операторе IN
    #37773399
Фотография Zick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени. Есть запрос на выборку, в котором в операторе 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
Запрос с большим количеством значений в операторе IN
    #37773406
Фотография Zick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Если значений мало (10-20), то все отлично работает.
...
Рейтинг: 0 / 0
Запрос с большим количеством значений в операторе IN
    #37773408
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$zv ?
...
Рейтинг: 0 / 0
Запрос с большим количеством значений в операторе IN
    #37773442
Фотография Zick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit, Cache for Windows (x86-64) 2010.2.4 (Build 802_1U) Fri May 6 2011 20:06:36 EDT
...
Рейтинг: 0 / 0
Запрос с большим количеством значений в операторе IN
    #37773452
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zick,

Судя по ошибке, запрос делаешь в каком то веб-приложении, и запрос не успевает выполниться за пользовательский таймаут, может стоит его увеличить, либо что-то изменить в запросе чтобы он не был таким большим, разбить на несколько запросов, и в IN подставлять порциями
...
Рейтинг: 0 / 0
Запрос с большим количеством значений в операторе IN
    #37773460
Фотография Zick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor, да, из веб-приложения, но делал запрос и, просто, из редактора запросов - та же самая картина.
...
Рейтинг: 0 / 0
Запрос с большим количеством значений в операторе IN
    #37773501
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Запрос с большим количеством значений в операторе IN
    #37773513
Фотография Zick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit, спасибо большое! Заработало после того, как в строке подключения прописал Query Timeout = 1.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Запрос с большим количеством значений в операторе IN
    #38390930
Chumakov_JA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если я подключаюсь через драйвер
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
Запрос с большим количеством значений в операторе IN
    #38391025
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Запрос с большим количеством значений в операторе IN
    #38395407
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Запрос с большим количеством значений в операторе IN
    #38400121
rstr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zick, Может быть сделать вычисляемое поле, в котором возвращать 1/0 при попадании какого то элемента в массив?
Тогда вместо условия Field1 In (@BigList) будет что-то вроде Field1Calc=1.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос с большим количеством значений в операторе IN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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