powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ADO vs BDE - как выполняется запрос?
15 сообщений из 15, страница 1 из 1
ADO vs BDE - как выполняется запрос?
    #32027388
iluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветы!

есть кpайне пpостой запpос, котоpый считывает данные из 4 связанных таблиц за некотоpый пpомежyток вpемени (сеpвеp - MSSQL 2000). по всем "нyжным" полям индексы сделаны, imho оптимизиpовать дальше некyда. вот сам запpос:

SELECT
T_TRAIN.*,T_TRAIN_KTSM.*,T_VAGON.*,T_OST.*
FROM
T_TRAIN
LEFT JOIN T_TRAIN_KTSM ON T_TRAIN.TrUniqueNum = T_TRAIN_KTSM.TrUniqueNum
LEFT JOIN T_VAGON ON T_TRAIN.TrUniqueNum = T_VAGON.TrUniqueNum
LEFT JOIN T_OST ON T_VAGON.VagUniqueNum = T_OST.VagUniqueNum
WHERE
(T_TRAIN.TrSpdDT >= '20020114') and (T_TRAIN.TrSpdDT < '20020115')
ORDER BY
T_TRAIN.TrUniqueNum

все "UniqueNum" - identity PK
TrSpdDT - индекс
возвpащаемый набоp данных - 8409 стpок с pазмеpом 393 байт

если я выполняю запpос в Query Analyzer (соответственно, чеpез ADO), то вpемя выполнения запpоса занимает в сpеднем 30 секyнд, после этого я могy pаботать со всем набоpом данных.

если же я выполняю запpос в SQL Explorer (чеpез BDE), то вpемя выполнения запpоса занимает не больше 5 секyнд, но после выполнения запpоса я могy pаботать только с некотоpой поpцией набоpа данных, а, скажем, пеpемещение в конец набоpа данных займет некотоpое вpемя, но все pавно не оцень значительное.

я стал тpассиpовать выполнение запpоса обоими методами с помощью SQL Profiler'а, и обнаpyжил pазличие в тpассах (см. ниже). кто мне это обьяснит?

SQL Query Analyzer:

EventClass StartTime TextData CPU Reads Writes Duration
-+---------------------------------------------------------------------------
SQL:BatchStarting 09:39:09.677 SELECT ...
SQL:StmtStarting 09:39:09.797 SELECT ...
Audit Object Permission Event 09:39:09.797 SELECT ...
Audit Object Permission Event 09:39:09.797 SELECT ...
Audit Object Permission Event 09:39:09.797 SELECT ...
Audit Object Permission Event 09:39:09.797 SELECT ...
Degree of Parallelism (7.0 Insert) 09:39:09.797
Execution Plan 09:39:09.807 Execution Tree
Show Plan All 09:39:09.807
Show Plan Text 09:39:09.807
SQLTransaction 09:39:09.807
SQLTransaction 09:39:09.807 1020
SQLTransaction 09:39:17.117
SQLTransaction 09:39:17.117 27570
Show Plan Statistics 09:39:44.687
SQL:StmtCompleted 09:39:09.797 SELECT ... 6280 47804 0 34900
SQL:BatchCompleted 09:39:09.677 SELECT ... 6370 47938 0 35170

SQL Explorer:

EventClass StartTime TextData CPU Reads Writes Duration
-+---------------------------------------------------------------------------
SQLTransaction 09:36:19.400 229300
SQL:BatchCompleted 09:36:00.703 SELECT ... 6680 47828 0 248006
Attention 09:40:08.710
SQL:BatchStarting 09:40:08.860 SELECT ...
SQL:StmtStarting 09:40:08.960 SELECT ...
Audit Object Permission Event 09:40:08.960 SELECT ...
Audit Object Permission Event 09:40:08.960 SELECT ...
Audit Object Permission Event 09:40:08.960 SELECT ...
Audit Object Permission Event 09:40:08.960 SELECT ...
Degree of Parallelism (7.0 Insert) 09:40:08.960
Execution Plan 09:40:08.960 Execution Tree
Show Plan All 09:40:08.980
Show Plan Text 09:40:08.980
SQLTransaction 09:40:08.990
SQLTransaction 09:40:08.990 663
SQLTransaction 09:40:14.340
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027398
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все просто.
BDE по-умолчанию фетчит не весь набор, а только небольшую часть, дофетчивая остальное по мере необходимости. ADO при клиентском курсоре фетчит сразу весь набор данных.
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027408
iluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>BDE по-умолчанию фетчит не весь набор, а только небольшую часть, дофетчивая остальное
>по мере необходимости. ADO при клиентском курсоре фетчит сразу весь набор данных.

а ADO можно заставить так же работать?
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027409
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ADO, кстати тоже можно реализовывать асинхронный доступ к данным.
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027411
iluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понял, BDE использует серверный курсор???
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027427
iluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>BDE по-умолчанию фетчит не весь набор, а только небольшую часть, дофетчивая остальное
>по мере необходимости. ADO при клиентском курсоре фетчит сразу весь набор данных.

а ADO можно заставить так же работать?
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027468
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> не понял, BDE использует серверный курсор???

Незафетчивание и серверный курсор разные вещи, хотя и несколько похожие.

> а ADO можно заставить так же работать?

Можно, но не нужно. Запросил - забери, что запросил. Только такая работа с sql-сервером корректна. Ограничивай выборки критериями.
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027475
iluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> а ADO можно заставить так же работать?
>Можно, но не нужно. Запросил - забери, что запросил.
>Только такая работа с sql-сервером корректна.
>Ограничивай выборки критериями.

условия такие, что надо загружать данные из годичного архива. архив весь в 4-х связанных таблицах (см. первое письмо), критерий один - промежуток времени, за который нужны эти данные.
в принципе скорость загрузки можно повысить, если архив за год хранить не в одном, а в нескольких наборах таблиц. но так мне не очень нравится!

тут кто-то говорил, что в АДО можно сделать асинхронный запрос. как?
я использую Delphi, нашел у TADODataSet есть свойство ExecuteOptions типа set of (eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords). и как им грамотно пользоваться? в хелпе практически пусто, примеров нету...
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027497
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Асинхронное выполнение команд не приводит к увеличению скорости их выполнения. Скорее, наоборот. Просто, пока выполняется асинхронная команда, ты можешь не ожидая завершения ее выполнения в своем приложении делать что-то еще (например, запустить на время ожидания микротетрис), периодически опрашивая статус выполнения команды. Когда статус команды перейдет в выполненый (завершен успешно, либо аварийно), можно заглянуть в результаты.
Использование серверного курсора имеет свои преимущества и недостатки. Работа порциями - свои (и преимущества и недостатки). В любом случае, если нет необходимости закачивать на клиент весь массив информации (просто потому, что глазами его никто просматривать не собирается), так и не нужно это делать. Ограничь выборку по какому-либо условию. Если же получение всего объема информации жизненно необходимо, то и нечего морочиться с серверным курсором и бить информацию на порции. Все эти кувыркания в итоге только замедлят получение на клиенте суммарного объема информации.
И вообще, для хранения больших объемов информации и получения статистических выборок по давно прошедшим периодам специально придуман OLAP. Так что, может, не стОит изобретать велосипед?
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027500
sysop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> ...периодически опрашивая статус выполнения команды.

Garya, избавтесь наконец от догм структурного программирования! В ADO инкапсулирована отличная модель событий! Ничего не надо опрашивать, чуточку колдовства с кодом - и завершение процедуры вызывает событие.
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027520
iluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Асинхронное выполнение команд не приводит к увеличению скорости их выполнения.

дык это я понимаю, не дурак

>Скорее, наоборот. Просто, пока выполняется асинхронная команда, ты можешь не ожидая
>завершения ее выполнения в своем приложении делать что-то еще (например, запустить на время
>ожидания микротетрис), периодически опрашивая статус выполнения команды.

можно по-подробней, с примерами на Delphi? я и так запускаю выполнение запроса в отдельном thread'е, но вот процент выполнения запроса не получается посчитать!
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027784
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SysOp. Привет! В общем-то, твоя поправка правильная. Просто не хотелось утопать в подробностях, о которых теперь заходит разговор. Действительно, в ADO имеются события, и работу можно построить по событию заверщения операции. Тем не менее, инкапсулированные в ADO прибамбасы именно так и работают, как я описал - то есть, организуют цикл проверки статуса (проверено). Так что по сути, с точки зрения использования процессора большой разницы нет, использовать объектно-ориентированное программирование или структурное.

По сути заданного вопроса могу сказать следующее. Используя в Delphi набор стандартно поставляемых компонент из палитры компонентов, можно реализовать только структурное программирование (по сути замечания SysOp). Для работы с событиями необходимо напрямую работать с интерфейсом.
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027797
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дельфах у ADODataSet есть свойство CursorLocation, которое может принимать значение clUseClient и clUseServer. Серверный курсор берет порциями.

А с этими вагонами... Обычно пользователям не нужен список, а только какая-то статистика за период времени. И если они говорят, что им надо все, то они ошибаются. Если же они вынуждены что-то выбирать глядя на экран, то это Ваша недоработка. Про вагоны сужу профессионально. И у меня есть такие недработки, уж очень в вагонном хозяйстве все запутано.

Рабочее мыло, коллега, vchd19kulakov@ptrz.orw.ru
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027798
sysop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya.
Hi!
>Тем не менее, инкапсулированные в ADO прибамбасы именно так и работают, как я описал - то есть, организуют цикл проверки статуса (проверено).

А вот это для меня новость. Сервер возвращает информацию о завершении, обработку которого логично было бы использовать для генерации события. Кстати, как Вы выявили механизм проверки?
...
Рейтинг: 0 / 0
ADO vs BDE - как выполняется запрос?
    #32027893
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Событие генерит используемая на клиенте библиотека ADO. Внутри она работает через методы и свойства OLEDB, периодически опрашивая статус. Проверял не я - мой напарник. Подробностей привести не могу.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ADO vs BDE - как выполняется запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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