Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
КСкажу так. мне просто не нравится идея качать весь запрос на клиента. Надеюсь, больше возражений не будет ?Заведомо неверно. Запрос должен ограничить набор данных по критериям, для этого и существует язык запросов. Другое дело как результат фетчить, сразу или порциями. Вообще вопрос для ветки Delphi. Там вам объяснят, если надо про асинхронные запросы и про нормальный фетчинг. Кстати нормально работают связки по ADO, а уж по SDAC тем более. СУБД тут не при чем, как уже говорилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 14:16 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
Hello К, "К" <nospam@sql.ru> wrote: К> А вообще-то изначально был вопрос "могут ли так другие сервера". К> Вместо этого мне пытаются доказать что мне это не надо... это все К> равно что я спрошу "как в плеере включить радио" а мне скажут К> "запиши весь эфир на кассету и слушай" Правильная терминология определена еще в ODBC. Сначала открываются connection, затем на него вешаются statements. MSSQL - только один statement per connection, MS Access (если, конечно, ее можно считать сервером) - 256, Oracle - несколько, точно не знаю. Мысль о том, что дело не в сервере, а в интерфейсе доступа (ODBC, OCI и т.п.), не лишена основания. Хотя возможности интерфейса завязаны на сервер. Как MS не пыжится, выдумавая новые интерфейсы (OLEDB и проч.), но ограничение, имеющееся при работе с ODBC драйвером, остается и для них. Видимо, в сервере что-то жестко зашито. -- Sincerely, Dmitriy Ivanov Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 04:27 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
Dmitriy IvanovMSSQL - только один statement per connection, MS Access (если, конечно, ее можно считать сервером) - 256, Oracle - несколько, точно не знаю. Не знаю, как ведет себя Oracle via ODBC, но думаю так же, как и в других случаях. Количество курсоров, которые могут быть одновременно открыты одной сессией, задается системным параметром open_cursors и относится ко всем видам курсоров (запросы с клиента, явные и неявные курсоры в выполняемых ХП и триггерах, динамическом SQL итд). Оптимальное значение open_cursors зависит от приложения. В большинстве случаев я полагаю правильным ограничить этот параметр достаточно небольшим значением (20-40); это позволяет вовремя (на этапе разработки) отловить утечки в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 11:08 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
Dmitriy Ivanov Правильная терминология определена еще в ODBC. Сначала открываются connection, затем на него вешаются statements. MSSQL - только один statement per connection , Для MS SQL информация не соответствует действительности. Ниже код, который явно содержит более одного statement per connection (если я конечно правильно понял, что Вы имеете ввиду под этим). Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 12:32 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
iscrafm, и что это демонстрирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 12:57 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
это демонстрирует то, что в драйверах доступа к MS SQL нет ограничения на statements, о котором сказал Dmitriy Ivanov, ничего больше. Приведенный код не исполняется как ХП на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:13 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
iscrafm Ниже код, который явно содержит более одного statement per connection (если я конечно правильно понял, что Вы имеете ввиду под этим). Судя по всему - неправильно. Имелось ввиду, конечно не SQL statement вообще, а открытый недофетченный курсор. Т.е. если бы в Вашем примере было так: Код: plaintext 1. 2. 3. 4. 5. 6. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:15 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
Дмитрий, такое тоже вне сервера MS SQL работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:21 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. Иногда приходится выносить такие расчеты на сервер приложений. Правда получается только в MS SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:28 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
Hello Dimitry, "Dimitry Sibiryakov" <nospam@sql.ru> wrote: DS> Ниже код, который явно содержит более одного statement per DS> connection (если я DS> конечно правильно понял, что Вы имеете ввиду под этим). DS> DS> DS> Судя по всему - неправильно. Имелось ввиду, конечно не SQL DS> statement вообще, а открытый недофетченный курсор. Т.е. если бы в DS> Вашем примере было так: DS> DS> DECLARE CURSOR C... DS> DECLARE CURSOR D... DS> OPEN C DS> OPEN D DS> FETCH C DS> FETCH D DS> DS> было бы гораздо интереснее. Да, именно такое я имел в виду. Просто statement в терминологии ODBC - это структура для выполнения SQL-предложения, ссылка на которую осуществляется через указатель (handle). Предложение может быть не обязательно типа DQL, т.е. SELECT, как для курсора, но и DML (UPDATE, INSERT и т.п.) или DDL (CREATE ...). Выражаясь более низко, в MSSQL на один открытый хэндл коннекта может приходиться не более одного открытого хэндла предложения. -- Sincerely, Dmitriy Ivanov Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:31 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
iscrafm-- Курсор Потребности Хм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом. Насколько я понимаю, Дмитрий имеет в виду примерно следующее. Фрагмент кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. в случае MSSQL не имеет шанса на быстрое выполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 22:15 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
softwarer iscrafm-- Курсор Потребности Хм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом. там их несколько на самом деле, это попался первый в точности как Дмитрий описал. Причем такие фишки проходят только с MS SQL, остальные принимают только по одному. Тот примерчик что Вы привели конечно клиентский курсор не потянет. Вернее потянет но не "на_миллиард_строк". Хотя кто его знает что каждый понимает под "statement" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 23:15 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
softwarer iscrafm-- Курсор Потребности Хм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом. Насколько я понимаю, Дмитрий имеет в виду примерно следующее. Фрагмент кода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. в случае MSSQL не имеет шанса на быстрое выполнение.Всё зависит от того, чем являются Query1 и Query2 : В случае с BDE строка Query2.Open вызовет неявно Query1.FetchAll. В случае с ADO строка Query2.Open вызовет неявно новый коннект, в котором и будут производится действия с Query2 За остальные компоненты не скажу. Как уже упоминалось выше, в MSSQL 2005 ввели Multiple Active Result Sets (MARS) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 23:22 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
iscrafmПричем такие фишки проходят только с MS SQL, остальные принимают только по одномуГм. Вы уверены ? Можно огласить список остальных ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 23:25 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
hvlad, может я конечно чего-то не понимаю, но мы в этом топике обсуждаем клиентские курсоры, а MARS расширяет возможности серверных. Или мы о разных курсорах общаемся? Клиентский курсор никаких неявных коннектов не создает. Почти уверен в этом, т.к. у нас работает возможность ограничивать количество подключений к СУБД, т.е. сервер приложений держит столько коннектов к БД, сколько ему указано и на это количество выстраивает пул запросов. Думаю что если бы создавались неявные, то они бы блокировались... С серверными курсами да, похоже на действительность. Могу ошибаться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 23:42 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
iscrafm softwarerХм. Может быть, я ошибаюсь, но как мне представляется, тот скрипт, который Вы привели, весь целиком является единственным statement-ом. там их несколько на самом деле, Не думаю. Если грубо и на пальцах, Statement - это объект, обладающий свойствами Connection (соединение, к которому относится), Text (собственно текст команды), а также методами Prepare и Execute. То, что Вы написали - это Text одного-единственного statement-а. MSSQL, в отличие допустим от Oracle, умеет воспринимать и выполнять подобные скрипты, но из этого никак не следует, что в этом участвует несколько statement-ов (напомню, statement именно в том смысле, который употребил Дмитрий. В дельфе это понятие представлено различными наследниками TDataSet). iscrafmТот примерчик что Вы привели конечно клиентский курсор не потянет. Если так, то Дмитрий видимо прав в своем исходном утверждении. Не знаю как другие, а Oracle такой пример выполнит без малейших проблем. То есть расхождение реально есть, и именно в случае гридов оно "стрельнет" при попытке переноса приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 23:59 |
|
||
|
MSSQL и другие & клиентские курсоры
|
|||
|---|---|---|---|
|
#18+
iscrafmhvlad, может я конечно чего-то не понимаю, но мы в этом топике обсуждаем клиентские курсорыДа, конечно клиентские iscrafmа MARS расширяет возможности серверныхКак раз клиентских :) Во-первых, это из "Features of SQL Native Client", во-вторых, из вышеупомянутой ссылки BOLSQL Server 2005 provides support for multiple active result sets (MARS) in applications accessing the Database Engine. In earlier versions of SQL Server, database applications could not maintain multiple active statements on a connection. When using SQL Server default result sets, the application had to process or cancel all result sets from one batch before it could execute any other batch on that connection. SQL Server 2005 introduces a new connection attribute that allows applications to have more than one pending request per connection, and in particular, to have more than one active default result set per connection. MARS simplifies application design with the following new capabilities: Applications can have multiple default result sets open and can interleave reading from them. Applications can execute other statements (for example, INSERT, UPDATE, DELETE, and stored procedure calls) while default result sets are open. iscrafmИли мы о разных курсорах общаемся? Клиентский курсор никаких неявных коннектов не создает. Почти уверен в этом, т.к. у нас работает возможность ограничивать количество подключений к СУБД, т.е. сервер приложений держит столько коннектов к БД, сколько ему указано и на это количество выстраивает пул запросов. Думаю что если бы создавались неявные, то они бы блокировались... С серверными курсами да, похоже на действительность. Могу ошибаться :)Пул запросов или пул коннектов ? :) Возможно в вашем сервере приложений просто нет ситуации когда в одном коннекте нужно иметь открытыми более одного клиентского курсора - например вы используете серверные курсоры, или сразу кешируете на клиенте всю выборку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 00:52 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=33969579&tid=1553512]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 402ms |

| 0 / 0 |
