Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

проблемы с ADOQuery+SQL   Найти похожие ветки 

 
Stepa   (2003-11-19 20:21) [0]

Постараюсь объяснить поподробнее, но сам, к сожалению, в Delphi не силен....необходимо найти ошибку, и сообщить разработчику приложения....
Приложение использует один ADOConnection для подключения к MSSQL.
в определенный момент, создаются 10-15 ADOQuery (каждый в собственном Thread), подключающихся через этот Connection. Через каждый из них открывается серверный курсор на одну и ту же таблицу в 70000 записей и начинает фечится. В этот момент происходит "зависание" самого приложения, и жуткое торможение SQL.
Запрос курсора выглядит как SELECT [Field1], [Field2]......[FieldN] FROM Table1 WHERE [FieldN] = X ORDER BY [FieldX]
т.е ничего сверхестественного.
SQL показывает множественные страничные блокировки в TempDB от приложения. И множество дополнительных Connection, которые, как я понимаю, крейтятся самим ADO, в случае, если основной Connection занят фечем из курсора. Просмотр запросов в профайлере не показывает никакого криминала.....только сам запрос и хранимые процедуры SQL по созданию курсора....

На таблице меньшего размера или с меньшим колличеством Query все проходит на ура.
Самое странное, что загрузка компа, на котором крутится и приложение и SQL сервер, после "зависания" - 1-5%

Попросил приятеля сваять то же самое на С++......все работает великолепно...:(
Единственное предположение, что ошибка где-то в реализации компонентов ADO в Delphi.

Прошу прощения, если дал недостаточно данных......спрашивайте, сообщу все необходимое....

Буду очень благодарен за всю возможную помощь.
P.S. Проблемы с железом исключены (заменяли сервак), SQL профиксен до упора, Пробовал и на SQL2000 и на SQL 7.


 
ZrenBy   (2003-11-19 21:23) [1]

>>Попросил приятеля сваять то же самое на С++......все работает
>>великолепно...:(
>>Единственное предположение, что ошибка где-то в реализации
>>компонентов ADO в Delphi.

Вполне возможно.
Из-за безобразной работы TADO компонентов
мне пришлось писать свои оболочки над интерфейсами ADO
и работать под ними


 
Fay   (2003-11-20 11:06) [2]

Скажите, как Вам удаётся работать с одним Connection-ом из нескольких потоков? Трудно поверить.


 
АлексейК   (2003-11-20 12:33) [3]

Попросил приятеля сваять то же самое на С++......все работает великолепно...:(
Единственное предположение, что ошибка где-то в реализации компонентов ADO в Delphi.

Скорее ошибку надо искать у разработчиков приложения, а не у Borlanda или Microsofta. А вот приятель похоже грамотно все сделал.
И множество дополнительных Connection, которые, как я понимаю, крейтятся самим ADO, в случае, если основной Connection занят фечем из курсора
Похоже что коннекты и содают эти самые 10-15 Query, минуя компонент Connection.
SQL показывает множественные страничные блокировки в TempDB от приложения
Если курсор, например, определен как INSENSITIVE, то результирующий набор курсора будет размещатся а TempDb.
Отсюда и блокировки.
Самое странное, что загрузка компа, на котором крутится и приложение и SQL сервер, после "зависания" - 1-5%
Все верно, процессор то не загружен, а находится в постоянном ожидании конца блокировки. Посмотрите еще наличие мертвых блокировок.
Вообщето, интересно, зачем понадобилось, 15 раз из одной таблицы одновременно курсорами извлекать данные.


 
sniknik   (2003-11-20 13:18) [4]

Stepa © (19.11.03 20:21)
нужно в каждом потоке свой коннект. + CoInitialize и все связаное.
и еще разграничить что у вас дольше выполнение запроса или получение данных на локаль.
в любом случае поэксперементировать с асинхронным выполнением команд в самом ADO (eoAsyncExecute,eoAsyncFetch...)
скорее всего потоки совсем не понадобятся (их возьмет на себя ADO).

> Попросил приятеля сваять то же самое на С++......все работает великолепно...:(
ваш приятель просто как програмист посильнее (в этой области, ADO), либо случайно(вы в это верите?) использовал более правильный метод.

лирическое отступление
почемуто никогда не слышал уничижительных слов типа "сваять" по отношению к своей или чужой работе от серьезных программистов.
скажите а ваш приятель их употребляет?


 
АлексейК   (2003-11-20 13:28) [5]

Еще интересно, код команды, какую Query выполняют конкретно. И что они в асинхронном режиме работают?


 
sniknik   (2003-11-20 13:31) [6]

АлексейК (20.11.03 13:28) [5]
> И что они в асинхронном режиме работают?
ADOQuery если в опциях поставить то да.


 
АлексейК   (2003-11-21 07:06) [7]

>sniknik ©
Пожалуй неточно выразился, имел ввиду, какое значение имеет ExecuteOptions у этих Query.


 
sniknik   (2003-11-21 08:15) [8]

писал уже
eoAsyncExecute,eoAsyncFetch
в зависимости от нужд (и там еще 2 опции вариации этих).
там все довольно просто, нужно только попробовать. и пробовать на обьемных таблицах/запросах иначе разницы нет.



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
1-36704
GreySerg
2003-12-02 15:34
2003.12.12
Как сделать hint в закладке (TTabSheet ) , когда наводишь курсор


14-36832
Vlad Oshin
2003-11-20 10:16
2003.12.12
Что интересно, у ЮКОСа проблемы, а курс рубля вроде стоит...


1-36623
Pavels
2003-11-30 22:45
2003.12.12
вызываю дельфовый длл из VB


14-36803
Даааа
2003-11-19 16:00
2003.12.12
Это чтоже получается


6-36780
man2k
2003-10-15 03:42
2003.12.12
Как написать на WIN API закачку файла на FTP?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский