Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

проблемы с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-36690
sandy
2003-12-02 19:13
2003.12.12
RichEdit


1-36631
DimaK
2003-12-01 12:00
2003.12.12
RichEdit


3-36580
Duber
2003-11-19 16:00
2003.12.12
Есть ли СУБД в которых не нужно использовать посредников типа BDE


7-36869
Николашка
2003-10-03 11:44
2003.12.12
Interrupt 21h Function 440Dh Minor Code 4Ah


11-36586
Slay
2003-03-31 01:40
2003.12.12
object & property





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский