|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
Доброго времени. Есть запрос на выборку, в котором в операторе 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>] Что подскажете для разрешения данной проблемы? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 09:22 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
P.S. Если значений мало (10-20), то все отлично работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 09:25 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
$zv ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 09:26 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
servit, Cache for Windows (x86-64) 2010.2.4 (Build 802_1U) Fri May 6 2011 20:06:36 EDT ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 09:42 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
Zick, Судя по ошибке, запрос делаешь в каком то веб-приложении, и запрос не успевает выполниться за пользовательский таймаут, может стоит его увеличить, либо что-то изменить в запросе чтобы он не был таким большим, разбить на несколько запросов, и в IN подставлять порциями ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 09:47 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
DAiMor, да, из веб-приложения, но делал запрос и, просто, из редактора запросов - та же самая картина. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 09:50 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
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) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 10:15 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
servit, спасибо большое! Заработало после того, как в строке подключения прописал Query Timeout = 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2012, 10:19 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
а если я подключаюсь через драйвер 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>] ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2013, 13:38 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
Chumakov_JA ,
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2013, 14:35 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
Chumakov_JAа если я подключаюсь через драйвер InterSystems.Data.CacheClient.dllНикогда не понимал это стремление - собирать строки подключения "вручную". Зачем? - практически во всех коннекторах есть же специализированные билдеры...... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 04:26 |
|
Запрос с большим количеством значений в операторе IN
|
|||
---|---|---|---|
#18+
Zick, Может быть сделать вычисляемое поле, в котором возвращать 1/0 при попадании какого то элемента в массив? Тогда вместо условия Field1 In (@BigList) будет что-то вроде Field1Calc=1. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 13:36 |
|
|
start [/forum/topic.php?fid=39&msg=37773513&tid=1557065]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 233ms |
total: | 479ms |
0 / 0 |