|
|
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
2 разных TADOCommand'а работают через ОДИН TADOConnection к SQL-серверу. В один момент в одном из TADOCommand'ов начинаются интенсивные insert'ы в таблицу T1, через некоторое время в эту же таблицу начинается поток insert'ов из 2го ТADOCommand'а. Внимание, вопрос! С точки зрения SQL-сервера insert'ы из разных TADOCommand'ов буду находиться в разных batch'ах или нет? A batch is a group of one or more Transact-SQL statements sent at one time from an application to Microsoft® SQL Server™ for execution. SQL Server compiles the statements of a batch into a single executable unit, called an execution plan. The statements in the execution plan are then executed one at a time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 19:59 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
Небольшое уточнение: Execute у обоих Command'ов находятся в разных потоках, НЕ под Synchronize. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 20:02 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
Вопрос в общем то, для MS SQL форума. Но если я правильно понимаю что такое MS SQL batch, то в разных. В общей транзакции, но в разных "batch". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 22:12 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
batch - это кусок TSQL -текста, посланный на сервер для исполнения. Один Execute - один batch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 00:13 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
prefНебольшое уточнение: Execute у обоих Command'ов находятся в разных потоках, НЕ под Synchronize. TADOConnection на каждый поток должен быть свой, т.е. на каждый поток - свой коннект. Только тогда будет синхронность более-менее и безглючность работы ADO. Либо пул коннектов. IMHO из практики с SQL Server 2000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 10:16 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
Вопрос в том, не "соптимизирует" ли ADO эти запросы к серверу, т.е. получив два близких по времени execute, не получится ли буферизация запросов и последующая отправка на сервер их пачки? Или execute сразу же бежит выполнять то, что ему подсунули, а если не может, становится в очередь с другими запросами? Petro123, а пул коннектов это чего? Сейчас ситуация такая, что TADOConnection создается один раз и ссылка на него выдается всем желающим (модулям, объектам), можно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 13:34 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
prefВопрос в том, не "соптимизирует" ли ADO эти запросы к серверу, т.е. получив два близких по времени execute, не получится ли буферизация запросов и последующая отправка на сервер их пачки? Или execute сразу же бежит выполнять то, что ему подсунули, а если не может, становится в очередь с другими запросами? Petro123, а пул коннектов это чего? Сейчас ситуация такая, что TADOConnection создается один раз и ссылка на него выдается всем желающим (модулям, объектам), можно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection? нельзя! 1. Пул коннектов это не один коннект и не один экземпляр :). На то это и пул. Если один коннект, то все встают в очередь в основном потоке. И параллельность будет не на стадии запросов, а на стадии разных процессов сервера. Т.е. если 2 больших запроса по очереди идут через одну калитку (экземпляр ADOConn... и его свойство НЕТ АСИНХРОННОСТИ), то сервер, не увидит второй пока не вернёт результата от первого. =================== Для асинхронности: - на каждый поток по одному ADOConn (создан должен в основном потоке!) либо пул побольше. - или асинхронный режим ADOConn...(тогда и потоки не нужны) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 15:00 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
prefВопрос в том, не "соптимизирует" ли ADO эти запросы к серверу, т.е. получив два близких по времени execute, не получится ли буферизация запросов и последующая отправка на сервер их пачки? Точно нет. Каждый ADODB.Command.Execute сам по себе представляет из себя пакет запросов. Просто задай несколько sql команд через точку с запятой в ADODB.Command.CommandText и все. ADO само по себе отдельные запросы между собой не склеивает никогда. Если сервер решит что пришедшие друг за другом запросы могут быть склеены это будет уже на совести сервера. Вот только не совсем понятно, отчего возник этот вопрос то? prefИли execute сразу же бежит выполнять то, что ему подсунули, а если не может, становится в очередь с другими запросами? Там нету очереди. Просто обломится кинув соотвествующее исключение. Скорее всего это будет invalid cursor или transaction state. prefможно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection? Нет, нельзя. Ты запрашиваешь синхронный или асинхронный метод в момент коннекта к серверу БД. Если сервер может работать асинхронно - режим асинхронности включится, если не может... В случае синхронного режима работы команда Execute выданая до тех пор пока предыдущая не отработала до конца - даст ошибку. В случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 18:23 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
авторВ случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет. Может это не в ADO а в обёртке из класса Delphi сделано, но там событие есть , когда придёт ответ от сервера. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 18:26 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
Petro123 авторВ случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет. Может это не в ADO а в обёртке из класса Delphi сделано, но там событие есть , когда придёт ответ от сервера. Да, конечно, есть событие. ADODB.Connection.ExecuteComplete называется. Но по большому счету, процесс ожидания события это и есть тот же самый цикл проверяющий статус объекта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 18:30 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
White Owl Petro123 авторВ случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет. Может это не в ADO а в обёртке из класса Delphi сделано, но там событие есть , когда придёт ответ от сервера. Да, конечно, есть событие. ADODB.Connection.ExecuteComplete называется. Но по большому счету, процесс ожидания события это и есть тот же самый цикл проверяющий статус объекта :) - ну, наверно не всегда, чтобы убедится что завезли хлеб, надо бегать в магазин. Можно и на уведомление подписаться )) ?????. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 18:33 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
Petro123- ну, наверно не всегда, чтобы убедится что завезли хлеб, надо бегать в магазин. Можно и на уведомление подписаться )) ?????. Ну да, а сидеть почтальона ждать и бегать на каждый звонок в дверь уже не нужно будет? :) Ой, я представил как приходит человек в булочную и просит чтобы его уведомили по почте когда бублики испекуться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 18:51 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
White Owl Petro123- ну, наверно не всегда, чтобы убедится что завезли хлеб, надо бегать в магазин. Можно и на уведомление подписаться )) ?????. Ну да, а сидеть почтальона ждать и бегать на каждый звонок в дверь уже не нужно будет? :) Ой, я представил как приходит человек в булочную и просит чтобы его уведомили по почте когда бублики испекуться :) Может ты и прав, я не системщик. В OS на низшем уровне так и происходит - для генерации события кто то должен бегать и проверять почтальона (слушать порты или OLE-COM ADO) ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 10:44 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
White Owl prefможно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection? Можно. Не использовать асинхронный режим и последовательно слать запросы. Взаимодействие клиента и сервера на самом деле всегда строго синхронно. White Owl Нет, нельзя. Ты запрашиваешь синхронный или асинхронный метод в момент коннекта к серверу БД. Если сервер может работать асинхронно - режим асинхронности включится, если не может... В случае синхронного режима работы команда Execute выданая до тех пор пока предыдущая не отработала до конца - даст ошибку. В случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет. White Owl, ты хоть знаешь как этот асинхронный режим реализуется ? Делается отдельный тред, и в него помещается посылка запроса и установка mutex-а, что уже типа можно. Эта асинхронность - только для клиента, чтобы он мог бы своими окошками поворочать в это время. Соединение остается на все время занятым и другой запрос через него выполнить нельзя. Поэтому взаимодействие клиента и сервера всегда строго синхронно, ты не можешь послать один запрос, не выполнить его до конца и послать другой, а потом вернуться обратно к первому. По крайней мере для рассматриваемого MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 23:06 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
MasterZiv prefможно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection? Можно. Не использовать асинхронный режим и последовательно слать запросы. Взаимодействие клиента и сервера на самом деле всегда строго синхронно. Средствами самого ADO нельзя :) White OwlWhite Owl, ты хоть знаешь как этот асинхронный режим реализуется ? Конечно знаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 00:39 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
White Owl Средствами самого ADO нельзя :) Почему ? Из-за разнуздано активного connections pooling ? Ну так убить его нафиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 23:06 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
MasterZiv White OwlСредствами самого ADO нельзя :) Почему ? Из-за разнуздано активного connections pooling ? Ну так убить его нафиг. Потому что ADO это всего лишь интерфейс доступа к БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 23:11 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
непонятно чем ADO не угодил: - хош синхронно работай в основном потоке и будешь ждать ответа пока его не получишь - хош асинхронно работай в основном потоке и НЕ будешь ждать ответа - занимайся своими делами. Когда придёт ответ - получишь событие с данными, которые ждал. - хош асинхронно с потоками создай пул коннектов в основном потоке и пусть потоки работают с сервером. ===================== Для этого ничего писать не надо - всё уже есть. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2005, 14:51 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
White Owl Потому что ADO это всего лишь интерфейс доступа к БД. Это не ответ. Любая клиентская библиотека CLI == всего лишь интерфейс доступа к БД. Ну и что ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2005, 23:16 |
|
||
|
ADO, разные batch'и или нет?
|
|||
|---|---|---|---|
|
#18+
MasterZiv White OwlПотому что ADO это всего лишь интерфейс доступа к БД.Это не ответ. Любая клиентская библиотека CLI == всего лишь интерфейс доступа к БД. Ну и что ? эээээ...... ну я имел в виду, что вот этот самый пул коннектов или буферизация и синхронизация запросов внутри коннекта в самом ADO не предусмотрена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2005, 18:48 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33369841&tid=2032460]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
19ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 303ms |

| 0 / 0 |
