powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADO, разные batch'и или нет?
20 сообщений из 20, страница 1 из 1
ADO, разные batch'и или нет?
    #33367654
pref
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33367659
pref
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшое уточнение: Execute у обоих Command'ов находятся в разных потоках, НЕ под Synchronize.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33367767
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в общем то, для MS SQL форума.
Но если я правильно понимаю что такое MS SQL batch, то в разных. В общей транзакции, но в разных "batch".
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33367841
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
batch - это кусок TSQL -текста, посланный на сервер для исполнения.
Один Execute - один batch
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33368235
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prefНебольшое уточнение: Execute у обоих Command'ов находятся в разных потоках, НЕ под Synchronize.
TADOConnection на каждый поток должен быть свой, т.е. на каждый поток - свой коннект. Только тогда будет синхронность более-менее и безглючность работы ADO.
Либо пул коннектов.
IMHO из практики с SQL Server 2000
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33368814
pref
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в том, не "соптимизирует" ли ADO эти запросы к серверу, т.е. получив два близких по времени execute, не получится ли буферизация запросов и последующая отправка на сервер их пачки? Или execute сразу же бежит выполнять то, что ему подсунули, а если не может, становится в очередь с другими запросами?

Petro123, а пул коннектов это чего? Сейчас ситуация такая, что TADOConnection создается один раз и ссылка на него выдается всем желающим (модулям, объектам), можно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection?
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33369133
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prefВопрос в том, не "соптимизирует" ли ADO эти запросы к серверу, т.е. получив два близких по времени execute, не получится ли буферизация запросов и последующая отправка на сервер их пачки? Или execute сразу же бежит выполнять то, что ему подсунули, а если не может, становится в очередь с другими запросами?

Petro123, а пул коннектов это чего? Сейчас ситуация такая, что TADOConnection создается один раз и ссылка на него выдается всем желающим (модулям, объектам), можно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection?
нельзя!
1. Пул коннектов это не один коннект и не один экземпляр :). На то это и пул. Если один коннект, то все встают в очередь в основном потоке. И параллельность будет не на стадии запросов, а на стадии разных процессов сервера. Т.е. если 2 больших запроса по очереди идут через одну калитку (экземпляр ADOConn... и его свойство НЕТ АСИНХРОННОСТИ), то сервер, не увидит второй пока не вернёт результата от первого.
===================
Для асинхронности:
- на каждый поток по одному ADOConn (создан должен в основном потоке!) либо пул побольше.
- или асинхронный режим ADOConn...(тогда и потоки не нужны)
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33369778
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 объекта, закончил он работать или нет.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33369784
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет.
Может это не в ADO а в обёртке из класса Delphi сделано, но там событие есть , когда придёт ответ от сервера.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33369796
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 авторВ случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет.
Может это не в ADO а в обёртке из класса Delphi сделано, но там событие есть , когда придёт ответ от сервера.
Да, конечно, есть событие. ADODB.Connection.ExecuteComplete называется.
Но по большому счету, процесс ожидания события это и есть тот же самый цикл проверяющий статус объекта :)
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33369799
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Petro123 авторВ случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет.
Может это не в ADO а в обёртке из класса Delphi сделано, но там событие есть , когда придёт ответ от сервера.
Да, конечно, есть событие. ADODB.Connection.ExecuteComplete называется.
Но по большому счету, процесс ожидания события это и есть тот же самый цикл проверяющий статус объекта :)
- ну, наверно не всегда, чтобы убедится что завезли хлеб, надо бегать в магазин. Можно и на уведомление подписаться )) ?????.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33369841
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123- ну, наверно не всегда, чтобы убедится что завезли хлеб, надо бегать в магазин. Можно и на уведомление подписаться )) ?????.
Ну да, а сидеть почтальона ждать и бегать на каждый звонок в дверь уже не нужно будет? :)
Ой, я представил как приходит человек в булочную и просит чтобы его уведомили по почте когда бублики испекуться :)
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33370418
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Petro123- ну, наверно не всегда, чтобы убедится что завезли хлеб, надо бегать в магазин. Можно и на уведомление подписаться )) ?????.
Ну да, а сидеть почтальона ждать и бегать на каждый звонок в дверь уже не нужно будет? :)
Ой, я представил как приходит человек в булочную и просит чтобы его уведомили по почте когда бублики испекуться :)
Может ты и прав, я не системщик.
В OS на низшем уровне так и происходит - для генерации события кто то должен бегать и проверять почтальона (слушать порты или OLE-COM ADO) )))))
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33372349
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
prefможно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection?

Можно. Не использовать асинхронный режим и последовательно слать запросы.
Взаимодействие клиента и сервера на самом деле всегда строго синхронно.

White Owl
Нет, нельзя. Ты запрашиваешь синхронный или асинхронный метод в момент коннекта к серверу БД. Если сервер может работать асинхронно - режим асинхронности включится, если не может...
В случае синхронного режима работы команда Execute выданая до тех пор пока предыдущая не отработала до конца - даст ошибку. В случае асинхронного коннекта, Execute отдаст команду серверу а тебе прийдется в цикле сидеть и проверять статус своего ADODB.Command объекта, закончил он работать или нет.

White Owl, ты хоть знаешь как этот асинхронный режим реализуется ?
Делается отдельный тред, и в него помещается посылка запроса
и установка mutex-а, что уже типа можно.
Эта асинхронность - только для клиента, чтобы он мог бы своими окошками
поворочать в это время. Соединение остается на все время занятым и другой
запрос через него выполнить нельзя. Поэтому взаимодействие клиента и сервера всегда строго синхронно, ты не можешь послать один запрос, не выполнить его до конца и послать другой, а потом вернуться обратно к первому. По крайней мере для рассматриваемого MSSQL.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33372376
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv prefможно ли средствами ADO гарантировать синхронность выполнения запросов через 1 connection?
Можно. Не использовать асинхронный режим и последовательно слать запросы.
Взаимодействие клиента и сервера на самом деле всегда строго синхронно.
Средствами самого ADO нельзя :)

White OwlWhite Owl, ты хоть знаешь как этот асинхронный режим реализуется ?
Конечно знаю :)
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33374764
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Средствами самого ADO нельзя :)


Почему ? Из-за разнуздано активного connections pooling ?
Ну так убить его нафиг.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33374767
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv White OwlСредствами самого ADO нельзя :)
Почему ? Из-за разнуздано активного connections pooling ?
Ну так убить его нафиг.
Потому что ADO это всего лишь интерфейс доступа к БД.
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33374998
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непонятно чем ADO не угодил:
- хош синхронно работай в основном потоке и будешь ждать ответа пока его не получишь
- хош асинхронно работай в основном потоке и НЕ будешь ждать ответа - занимайся своими делами. Когда придёт ответ - получишь событие с данными, которые ждал.
- хош асинхронно с потоками создай пул коннектов в основном потоке и пусть потоки работают с сервером.
=====================
Для этого ничего писать не надо - всё уже есть.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33375184
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Потому что ADO это всего лишь интерфейс доступа к БД.

Это не ответ. Любая клиентская библиотека CLI == всего лишь интерфейс доступа к БД. Ну и что ?
...
Рейтинг: 0 / 0
ADO, разные batch'и или нет?
    #33377513
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv White OwlПотому что ADO это всего лишь интерфейс доступа к БД.Это не ответ. Любая клиентская библиотека CLI == всего лишь интерфейс доступа к БД. Ну и что ?
эээээ...... ну я имел в виду, что вот этот самый пул коннектов или буферизация и синхронизация запросов внутри коннекта в самом ADO не предусмотрена.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADO, разные batch'и или нет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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