powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / клиент-SQL сервер Очень тяжелый запрос.
16 сообщений из 16, страница 1 из 1
клиент-SQL сервер Очень тяжелый запрос.
    #34749470
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется тяжелый запрос, результирующая таблица маленькая, но обработка на сервере занимает значительное время. В это время соответственно фокс ждет ответа от SQL сервера, приложение приобретает вид "висяка".
Можно ли сделать так, чтобы небыло данного эффекта "висяка"? Пока нашел только один выход, отдельныйм приложением запускается анимация (класс на фокс клаб), проблему полностью не снимает, однако хоть что-то видно, что приложение работает. Асинхронный режим работы не подходит, т.к. смысла в нем нет, т.е. результирующая таблица мала, и по времени, что ждать запрос в синхронном режиме, что в асинхронном - ждать пока SQLEXEC() вернет 0, по времени практически одинаково, соответственно эфект "висяка" присутствует.
Т.е. смысл вопроса в том: оставить данную проблему, т.к. это практически не решаемо, либо решение находится где то рядом.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34749481
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поток запусти. Не асинхронный запрос, а именно код в потоке.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34749644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут кое-какие заготовки для одного проекта делаю (кассовая прога), работать должна автономно с периодическим выходом на связь, причем во время связи основная работа прерываться не должна. Наиболее удобным вариантом, на мой взгляд, будет асинхронный запрос + таймер. Тестил на большой базе с долгими запросами - работает, но потестить на базе, где активно работают и есть блокировки - нет возможности.
В аттаче формочка, основной код в таймере, остальное должно быть и так понятно. Попробуй свой запрос, отпишись что получилось, а то может надо другой способ изобретать.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34749673
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сервер MSSQL, то приведите план запроса, возможно сам запрос можно "тюнинговать"
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750057
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Options
Optimization goal: First-row
ANSI update constraints: Cursors
Optimization level: 9
Select list
expr() varchar(20)
expr() numeric(30,2)
Estimates
EstRowCount: 1.5223e+005
EstRunTime: 1099.5
EstDiskReads: 9.8319e+005
EstDiskWrites: 3765
EstDiskReadTime: 495.13
EstDiskWriteTime: 1.8825
EstCpuTime: 602.51
Тут еще идет транспонирование таблицы :)

Dima T посмотрю.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750122
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел,
время выполнения: 57.78
Работа: 0.01 (~140 строк)
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750196
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственное, что пока нашел:
http://www.foxclub.ru/sol/index.php?act=view&id=357
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750237
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaSПосмотрел,
время выполнения: 57.78
Работа: 0.01 (~140 строк)
Я правильно понял что все записи "Работа:..." по 0.01 сек. ? Т.е. максимальное время разового прерывания 0.01 сек. Тогда "висяка" у тебя не должно быть, пользователь в это время может даже комфортно работать в другой форме, а в этой можешь в таймер какую-нибудь анимацию добавить, например писать "уже ждем ... сек.", по окончанию написать "нажмите кнопку для вывода результата", а по кнопке вывод в отчет или куда там тебе нужно.

И второе, это уже спортивное любопытство, при синхронном запросе на сколько быстрее запрос отрабатывает?
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750343
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вермя выполнения 57, т.е. 57 секунд приложение висит, а то что 140 раз по 0,01сек, т.е. 1,5 секунды погоды не делают.
При синхронном пакетном режиме - фокс "оживает" на данные 1,5 секунды позже, согласитесь, что 1,5 секунды ничто, по сравнению с минутой :)
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750541
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaSВермя выполнения 57, т.е. 57 секунд приложение висит, а то что 140 раз по 0,01сек, т.е. 1,5 секунды погоды не делают.
При синхронном пакетном режиме - фокс "оживает" на данные 1,5 секунды позже, согласитесь, что 1,5 секунды ничто, по сравнению с минутой :)
Или я не так понимаю, или ты. Почему висит? У меня складывается впечатление что понимание происходящего у нас разное.
Принцип работы того что в моей форме:
Кнопка запускает таймер с интервалом 500 мс (в твоем случае можно 1-2 секунды поставить).
Таймер при первом срабатывании устанавливает соединение и передает серверу запрос, при последующих срабатываниях таймера проверка на завершение запроса, по завершению вывод в грид и остановка таймера. Между срабатываниями таймера - ожидание действий пользователя (в твоем случае 490 мс из 500 мс).
При каждом срабатывании фиксируется время сколько таймер затратил на выполнение своего кода 0.01 сек * 140 раз = 1.4 сек., т.е. за 57 сек. (странно, должно быть 70 = 140 раз * 500 мс) только 1.4 сек. ушло у фокса на ожидание запроса, остальные 55,6 сек. он ожидал действий пользователя. Если ты (как пользователь) в это время ничего не делал, то прога простаивала. Попробуй пока эта форма работает еще одну открыть. Это я к тому что если сделать немодальную форму с privatedatasession, то пользователь может форму свернуть и работать в проге дальше. А как запрос выполнится, вернуться в форму и сохранить результаты запроса.

т.е. своего рода эмуляция многопоточности получилась.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34750551
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaS
EstRowCount: 1.5223e+005
EstRunTime: 1099.5
EstDiskReads: 9.8319e+005
EstDiskWrites: 3765
Тут еще идет транспонирование таблицы :)


1. Текст самого запроса
2. Скрипт таблиц (что-то мне подсказывает, что с индексами на таблицах не густо)
3. Где оценосное время транспонирования или хотя бы размер курсора для транспонирования
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34751054
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dima T
Не совсем правильно. Работа в асинхронном пакетном режиме.
Программа:
1-отсылает запрос на сервер
2-ожидает пока SQLEXEC() вернет 0, т.е. признак, что первая партия запроса готова, обычно 100 строк. В это время сервер упорно трудится над запросом. Пока SQLEXEC() не вернет 0, программа ожидает и появляется эффект "висяка". На моем запросе это время ~1 минута.
3-SQLEXEC() вернула 0. Программа оживает и начинает получать данные с сервера, пока SQLEXEC() не вернет 1. В зависимости от структуры запроса, запрос уже обработан полностью, либо продолжает обрабатываться на сервере. У вас это отмеченно как "работа", в моем случае, фактически получение остальных данных с сервера, что занимает 0.01 сек. за один цыкл. и 1,5 секунды в общем на данный этап.
4-SQLEXEC() вернула 1. Все данные с сервера получены.
Это как я понимаю структуру работы :)
2 PaulWist
SQL сервер - Sybase SQL ASA 8
сам запрос отсылать думаю не имеет смысла, т.к. без знания структуры базы это мало о чем скажет. Тем более без доп. пояснений. А вот этого я вам и не могу сказать.
Скажу только одно, что от разработчика ПО данный отчет обрабатывается около 5-и часов, у меня в общей сложности 2 с небольшим минуты.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34751144
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по вашей форме.
Пока идет обработка на сервере, SQLEXEC не вернула 0, в течении минуты, я не могу ни свернуть форму, ни сдвинуть ее куда либо, на закрытие Windows кричит что приложение зависло, типа подождать или сразу прибить процесс?
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34751249
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaS 2 Dima T
Не совсем правильно. Работа в асинхронном пакетном режиме.
Программа:
1-отсылает запрос на сервер
2-ожидает пока SQLEXEC() вернет 0, т.е. признак, что первая партия запроса готова, обычно 100 строк. В это время сервер упорно трудится над запросом. Пока SQLEXEC() не вернет 0, программа ожидает и появляется эффект "висяка". На моем запросе это время ~1 минута. ...
Как я понимаю в моей формочке записи о времени у тебя примерно такие:
Соединение: 0.50
Работа: 60.00
Работа: 0.01
Работа: 0.01
...

Так пишет? Если так, то это подвешивает драйвер Sybase, т.к. с MS-SQL 2000 такого не происходит.
Только-что запустил долгоиграющую хранимку (секунд 10 из них 8 работа сервера остальное возврат результата) никаких зависаний, форма сворачивается, другие запускаются.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34751309
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoshaS 2 PaulWist
SQL сервер - Sybase SQL ASA 8
сам запрос отсылать думаю не имеет смысла, т.к. без знания структуры базы это мало о чем скажет. Тем более без доп. пояснений. А вот этого я вам и не могу сказать.
Скажу только одно, что от разработчика ПО данный отчет обрабатывается около 5-и часов, у меня в общей сложности 2 с небольшим минуты.

Ну, как хотите, в принципе правила построения условий запросов в разных БД похожи.
...
Рейтинг: 0 / 0
клиент-SQL сервер Очень тяжелый запрос.
    #34751323
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недавно обсуждали : VFP+Postgre при CREATE REMOTE VIEW происходило выполнение запроса на серваке вместо проверки синтаксиса. Были подозрения на драйвер или взаимодействие фокса с драйвером, чем кончилось - автор не отписался.
Похоже все-таки заточка фокса под MS-SQL довольно серьезная.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / клиент-SQL сервер Очень тяжелый запрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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