|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
подскажите, выполняю такой запрос begin transaction WHILE (1=1) begin insert into t values(1) end commit transaction и устанавливаю CommandTimeout в 5 сек, к примеру. В итоге запрос висит до бесконечности (даже превышая дефолтовый 30 сек), а должен через 5 сек выдать ошибку Query Timeout В чем тут проблема может быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 17:04 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1, спросите на форуме по C#. SQL Server к этому не имеет отношения. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 17:11 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
точно также себя ведет sqlcmd.exe с тем же запросом при указании параметра -t <timeout> тоже зависает до бесконечности ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 17:15 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1, это в любом случае проблема клиентского приложения. Сервер как на этот параметр может повлиять? Держит, не отпускает? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 17:20 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1, где то накосячили в коде; Код: sql 1. 2. 3. 4. 5. 6.
через 5 секунд вышибает по SqlException ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 17:30 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
прикол в том, что не меняя код, а только sql-запрос на UPDATE t SET i=i+1 WHERE ... (специально заполняю таблицу на миллионы записей, чтобы выполнялся долго) - и в таком случае таймаут отрабатывает, а код тот же. странно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 17:35 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1 прикол в том, что не меняя код, а только sql-запрос на UPDATE t SET i=i+1 WHERE ... (специально заполняю таблицу на миллионы записей, чтобы выполнялся долго) - и в таком случае таймаут отрабатывает, а код тот же. странно Прикол в том, что надо бы учиться думать. 1. Как клиент определяет "жив сервер и запрос или мертв?" 2. Просто и незатейливо: "сервер НИЧЕГО не передает на клиента". 3. Откуда следует незатейливый вывод: Код: sql 1. 2. 3. 4. 5. 6. 7.
и будет тебе таймаут. Или Код: sql 1. 2.
и НЕ будет тебе таймаута. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:10 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
да, думал над этим и пробовал с NOCOUNT ON - результат увы, тот же самый ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:16 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
вот для запуска через IE, Javascript результат тот же - зависает намертво <script> let objConnection = new ActiveXObject("ADODB.Connection"); objConnection.open("Provider=SQLNCLI11;Initial Catalog=test;Data Source=.;Integrated Security=SSPI;"); objConnection.CommandTimeout = 1; let objRs = new ActiveXObject("ADODB.Recordset"); let strComm = "set nocount on; declare @p int; while (1=1) begin set @p=1; end;"; //let strComm = "select 1;"; console.log('opening...'); alert('before'); objRs.open(strComm, objConnection); console.log('OK!'); alert('OK!'); </script> ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:20 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
Не, ну зачем читать мануалы? https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 Параметр CommandTimeout для объекта соединения не влияет на параметр CommandTimeout в объекте Command в том же соединении. то есть, свойство CommandTimeout объекта команды не наследует значение значения CommandTimeout объекта соединения . ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:27 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
aleks222 Не, ну зачем читать мануалы? https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 Параметр CommandTimeout для объекта соединения не влияет на параметр CommandTimeout в объекте Command в том же соединении. то есть, свойство CommandTimeout объекта команды не наследует значение значения CommandTimeout объекта соединения . а где здесь объект Command? покажите! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:28 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1 Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:36 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
тебе нужно не это использовать - ADODB.Recordset, а это - ADODB.Command ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:38 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
я создаю Recordset, а не Command! смотрите внимательнее но можно даже и без него: <script> let objConnection = new ActiveXObject("ADODB.Connection"); objConnection.open("Provider=SQLNCLI11;Initial Catalog=test;Data Source=.;Integrated Security=SSPI;"); objConnection.CommandTimeout = 1; //let objRs = new ActiveXObject("ADODB.Recordset"); let strComm = "set nocount on; declare @p int; while (1=1) begin set @p=1; end;"; //let strComm = "UPDATE t SET i1=1 WHERE v1='asdjalsdjlaksjdlkasjdlkajsd lkajdlkasjdlkajsldkjas'"; //let strComm = "select 1"; alert('before'); var affected = 0; objConnection.execute(strComm,affected,1); alert('OK!'); </script> обратите внимание - запрос с циклом зависает, а запрос с UPDATE выбивает Query Timeout ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:41 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
в 2-х местах выставлять , примерно так (VBScript): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:42 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
Konst_One тебе нужно не это использовать - ADODB.Recordset, а это - ADODB.Command да ну? а Recordset че нельзя? варианты с только Connection, с Recordset и Command дают тот же самый результат: "set nocount on; declare @p int; while (1=1) begin set @p=1; end;" - зависает "UPDATE t SET i1=1 WHERE v1='asdjalsdjlaksjdlkasjdlkajsd lkajdlkasjdlkajsldkjas'" - выдает Query Timeout ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 18:43 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1 В чем тут проблема может быть? В SSMS на ваш пример таймаут срабатывает штатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 19:09 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
invm victorov1 В чем тут проблема может быть? В SSMS на ваш пример таймаут срабатывает штатно. знать бы какая проблема и как ее исправить.. пробовал в качестве клиента IE, c++ ADODB, Delphi, sqlcmd провайдеры: SQLOLEDB.1, SQLNCLI11 SQL-сервер: 2014, 2005 результат одинаков ну вот совсем просто проверить: sqlcmd -q "set nocount on; declare @p int; while (1=1) begin set @p=1; end;" -t 1 у меня висит ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 19:11 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1, смотрите, вы ожидаете несколько иного поведения от CommandTimeout он срабатывает если интервал выполнения отдельного стейтмента превышает пороговое значение. В вашем же примере вы запускаете бесконечный цикл в котором срабатывает отдельный стейтмент и он очень быстро выполняется до заданного порога. если хотите убедиться запустите профайлер на события Sql:BatchCompelted и Sql:StmtCompleted и посмотрите на поведение двух разных инструкций Код: sql 1.
Код: sql 1.
и запустите sqlcmd с -t 1 вы увидите что в первом вариант Sql:StmtCompleted срабатывает кучу раз, тем самым интервал ожидания не нарушен. во втором варианте отдельный стейтмент превышает порог и вылетает по таймауту. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 19:45 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
felix_ff victorov1, смотрите, вы ожидаете несколько иного поведения от CommandTimeout он срабатывает если интервал выполнения отдельного стейтмента превышает пороговое значение. В вашем же примере вы запускаете бесконечный цикл в котором срабатывает отдельный стейтмент и он очень быстро выполняется до заданного порога. если хотите убедиться запустите профайлер на события Sql:BatchCompelted и Sql:StmtCompleted и посмотрите на поведение двух разных инструкций Код: sql 1.
Код: sql 1.
и запустите sqlcmd с -t 1 вы увидите что в первом вариант Sql:StmtCompleted срабатывает кучу раз, тем самым интервал ожидания не нарушен. во втором варианте отдельный стейтмент превышает порог и вылетает по таймауту. пожалуй вы правы - единственное разумное объяснение просто коллеги выше уверяли, что у них все работает и выдает таймаут спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 19:49 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
felix_ff victorov1, смотрите, вы ожидаете несколько иного поведения от CommandTimeout он срабатывает если интервал выполнения отдельного стейтмента превышает пороговое значение. В вашем же примере вы запускаете бесконечный цикл в котором срабатывает отдельный стейтмент и он очень быстро выполняется до заданного порога. если хотите убедиться запустите профайлер на события Sql:BatchCompelted и Sql:StmtCompleted и посмотрите на поведение двух разных инструкций Код: sql 1.
Код: sql 1.
и запустите sqlcmd с -t 1 вы увидите что в первом вариант Sql:StmtCompleted срабатывает кучу раз, тем самым интервал ожидания не нарушен. во втором варианте отдельный стейтмент превышает порог и вылетает по таймауту. Клиенту начхать сколько StmtCompleted в пакете или процедуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 19:51 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1, что еще стоит обратить внимание у каждого провайдера свое реагирование на этот параметр на одинаковом запросе Код: sql 1.
к примеру .Net SqlClient Data Provider отваливается по таймауту (он же SQLNCLI) а подключение через ODBC интерфейс продолжает выполняться. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 20:04 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
aleks222 felix_ff victorov1, смотрите, вы ожидаете несколько иного поведения от CommandTimeout он срабатывает если интервал выполнения отдельного стейтмента превышает пороговое значение. В вашем же примере вы запускаете бесконечный цикл в котором срабатывает отдельный стейтмент и он очень быстро выполняется до заданного порога. если хотите убедиться запустите профайлер на события Sql:BatchCompelted и Sql:StmtCompleted и посмотрите на поведение двух разных инструкций Код: sql 1.
Код: sql 1.
и запустите sqlcmd с -t 1 вы увидите что в первом вариант Sql:StmtCompleted срабатывает кучу раз, тем самым интервал ожидания не нарушен. во втором варианте отдельный стейтмент превышает порог и вылетает по таймауту. Клиенту начхать сколько StmtCompleted в пакете или процедуре. по трафику клиент-сервер видно, что даже с NOCOUNT ON при запуске такого бесконечного цикла сервер непрерывно отправвляет клиенту пакеты ответов, не трудно предпопложить что это отчет о выполнении каждого stmt, соотв. timeout и не срабатывает. Когда же выполняем один долгий stmt, то и пакет ответа приходит только после его выполнения ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 20:10 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1 aleks222 пропущено... Клиенту начхать сколько StmtCompleted в пакете или процедуре. по трафику клиент-сервер видно, что даже с NOCOUNT ON при запуске такого бесконечного цикла сервер непрерывно отправвляет клиенту пакеты ответов, не трудно предпопложить что это отчет о выполнении каждого stmt, соотв. timeout и не срабатывает. Когда же выполняем один долгий stmt, то и пакет ответа приходит только после его выполнения У меня - не отправляет. Все процедуры с "дохрена и более инструкциями, циклами и т.д. и т.п." ничего не отсылают клиенту, пока не выполнят Код: sql 1.
- явный возврат рекордсета. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 20:51 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
плохо что MS в документации эти ньюансы с таймаутами никак не прояснила... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 20:54 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
victorov1, А вот в этом случае Код: sql 1.
клиент почему-то не стал учитывать "отчеты о выполнении каждого stmt" и благополучно отвалился по таймауту. Странная избирательность. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 20:55 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
invm victorov1, А вот в этом случае Код: sql 1.
клиент почему-то не стал учитывать "отчеты о выполнении каждого stmt" и благополучно отвалился по таймауту. Странная избирательность. класс!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 21:06 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
накидал консольный тестик: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92.
итог: System.Data.SqlClient - отлуп по таймауту Microsoft.Data.SqlClient - отлуп по таймауту ODBC - выполняет сколько душе угодно SQLOLEDB - выполняет сколько душе угодно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2021, 21:15 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
felix_ff итог: System.Data.SqlClient - отлуп по таймауту Microsoft.Data.SqlClient - отлуп по таймауту ODBC - выполняет сколько душе угодно SQLOLEDB - выполняет сколько душе угодно Просто, ты не умеешь устанавливать таймаут для SQLOLEDB и ODBC. ОDBC я редко пользуюсь, а SQLOLEDB замечательно отрабатывает таймаут. Никаких проблем. 101%, что и у ОDBC все в порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2021, 12:47 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
Надо смотреть документацию - в каких единицах изменения таймаут для какого сервиса и каков порог. Вообще круто, когда в булочной тебе продают гвозди! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2021, 13:10 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
aleks222 felix_ff итог: System.Data.SqlClient - отлуп по таймауту Microsoft.Data.SqlClient - отлуп по таймауту ODBC - выполняет сколько душе угодно SQLOLEDB - выполняет сколько душе угодно Просто, ты не умеешь устанавливать таймаут для SQLOLEDB и ODBC. ОDBC я редко пользуюсь, а SQLOLEDB замечательно отрабатывает таймаут. Никаких проблем. 101%, что и у ОDBC все в порядке. ну нарисуй (или подправь) пример как правильно устанавливать commandTimeout для ODBCCommand/OLEDBCommand ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2021, 15:39 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
felix_ff aleks222 пропущено... Просто, ты не умеешь устанавливать таймаут для SQLOLEDB и ODBC. ОDBC я редко пользуюсь, а SQLOLEDB замечательно отрабатывает таймаут. Никаких проблем. 101%, что и у ОDBC все в порядке. ну нарисуй (или подправь) пример как правильно устанавливать commandTimeout для ODBCCommand/OLEDBCommand Извини, дарагой, "есть у нас и другие дела...". Вот, когда припечет, буду разбираться. https://knowledgebase.progress.com/articles/Article/000040525 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2021, 17:09 |
|
не отрабатывает CommandTimeout
|
|||
---|---|---|---|
#18+
aleks222 felix_ff пропущено... ну нарисуй (или подправь) пример как правильно устанавливать commandTimeout для ODBCCommand/OLEDBCommand Извини, дарагой, "есть у нас и другие дела...". Вот, когда припечет, буду разбираться. https://knowledgebase.progress.com/articles/Article/000040525 дарагой, прежде чем давать ссылки на продукты business-api слоя, ты хотя бы ознакомился с мат.частью, или ты у нас мышкокликатель? ну да бог с ним, я даже не поленился качнул их реализацию драйвера odbc. результат тот же. пустозвонить может каждый ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2021, 17:45 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1684581]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 421ms |
0 / 0 |