|
|
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Имеется тяжелый запрос, результирующая таблица маленькая, но обработка на сервере занимает значительное время. В это время соответственно фокс ждет ответа от SQL сервера, приложение приобретает вид "висяка". Можно ли сделать так, чтобы небыло данного эффекта "висяка"? Пока нашел только один выход, отдельныйм приложением запускается анимация (класс на фокс клаб), проблему полностью не снимает, однако хоть что-то видно, что приложение работает. Асинхронный режим работы не подходит, т.к. смысла в нем нет, т.е. результирующая таблица мала, и по времени, что ждать запрос в синхронном режиме, что в асинхронном - ждать пока SQLEXEC() вернет 0, по времени практически одинаково, соответственно эфект "висяка" присутствует. Т.е. смысл вопроса в том: оставить данную проблему, т.к. это практически не решаемо, либо решение находится где то рядом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 00:50 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Поток запусти. Не асинхронный запрос, а именно код в потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 01:15 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Я тут кое-какие заготовки для одного проекта делаю (кассовая прога), работать должна автономно с периодическим выходом на связь, причем во время связи основная работа прерываться не должна. Наиболее удобным вариантом, на мой взгляд, будет асинхронный запрос + таймер. Тестил на большой базе с долгими запросами - работает, но потестить на базе, где активно работают и есть блокировки - нет возможности. В аттаче формочка, основной код в таймере, остальное должно быть и так понятно. Попробуй свой запрос, отпишись что получилось, а то может надо другой способ изобретать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 08:54 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Если сервер MSSQL, то приведите план запроса, возможно сам запрос можно "тюнинговать" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 09:20 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
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 посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 11:10 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Посмотрел, время выполнения: 57.78 Работа: 0.01 (~140 строк) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 11:22 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Единственное, что пока нашел: http://www.foxclub.ru/sol/index.php?act=view&id=357 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 11:40 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
GoshaSПосмотрел, время выполнения: 57.78 Работа: 0.01 (~140 строк) Я правильно понял что все записи "Работа:..." по 0.01 сек. ? Т.е. максимальное время разового прерывания 0.01 сек. Тогда "висяка" у тебя не должно быть, пользователь в это время может даже комфортно работать в другой форме, а в этой можешь в таймер какую-нибудь анимацию добавить, например писать "уже ждем ... сек.", по окончанию написать "нажмите кнопку для вывода результата", а по кнопке вывод в отчет или куда там тебе нужно. И второе, это уже спортивное любопытство, при синхронном запросе на сколько быстрее запрос отрабатывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 11:50 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Вермя выполнения 57, т.е. 57 секунд приложение висит, а то что 140 раз по 0,01сек, т.е. 1,5 секунды погоды не делают. При синхронном пакетном режиме - фокс "оживает" на данные 1,5 секунды позже, согласитесь, что 1,5 секунды ничто, по сравнению с минутой :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 12:09 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
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, то пользователь может форму свернуть и работать в проге дальше. А как запрос выполнится, вернуться в форму и сохранить результаты запроса. т.е. своего рода эмуляция многопоточности получилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 12:42 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
GoshaS EstRowCount: 1.5223e+005 EstRunTime: 1099.5 EstDiskReads: 9.8319e+005 EstDiskWrites: 3765 Тут еще идет транспонирование таблицы :) 1. Текст самого запроса 2. Скрипт таблиц (что-то мне подсказывает, что с индексами на таблицах не густо) 3. Где оценосное время транспонирования или хотя бы размер курсора для транспонирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 12:44 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
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 с небольшим минуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 14:43 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
по вашей форме. Пока идет обработка на сервере, SQLEXEC не вернула 0, в течении минуты, я не могу ни свернуть форму, ни сдвинуть ее куда либо, на закрытие Windows кричит что приложение зависло, типа подождать или сразу прибить процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 15:00 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
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 работа сервера остальное возврат результата) никаких зависаний, форма сворачивается, другие запускаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 15:25 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
GoshaS 2 PaulWist SQL сервер - Sybase SQL ASA 8 сам запрос отсылать думаю не имеет смысла, т.к. без знания структуры базы это мало о чем скажет. Тем более без доп. пояснений. А вот этого я вам и не могу сказать. Скажу только одно, что от разработчика ПО данный отчет обрабатывается около 5-и часов, у меня в общей сложности 2 с небольшим минуты. Ну, как хотите, в принципе правила построения условий запросов в разных БД похожи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 15:39 |
|
||
|
клиент-SQL сервер Очень тяжелый запрос.
|
|||
|---|---|---|---|
|
#18+
Недавно обсуждали : VFP+Postgre при CREATE REMOTE VIEW происходило выполнение запроса на серваке вместо проверки синтаксиса. Были подозрения на драйвер или взаимодействие фокса с драйвером, чем кончилось - автор не отписался. Похоже все-таки заточка фокса под MS-SQL довольно серьезная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 15:42 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34750122&tid=1588853]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 374ms |

| 0 / 0 |
