powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEЧУС и задержка 200мс
13 сообщений из 13, страница 1 из 1
SQLEЧУС и задержка 200мс
    #34384560
Callace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполняем тестовый пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
STORE SQLSTRINGCONNECT('DRIVER=SQL Server;SERVER=server;DATABASE=master ;UID=sa;PWD=') TO gnConnHandle

SQLEXEC(gnConnHandle,'select * from dbo.sysobjects','cur1')
SELECT cur1
INDEX ON id TAG id
seco1=SECONDS()
for i = 1  TO  10000 
SQLEXEC(gnConnHandle,'select * from dbo.sysobjects where id='+STR(m.i),'cur2')
ENDFOR
seco1=SECONDS()-seco1

seco2=SECONDS()

SELECT cur1
for i = 1  TO  10000 
=SEEK(m.i)
a=name
ENDFOR
seco2=SECONDS()-seco2
MESSAGEBOX(seco1)
MESSAGEBOX(seco2)

SQLDISCONNECT(gnConnHandle)
USE IN cur1
USE IN cur2
и видим что выгоднее(по времени) работать с данными на клиненте , чем выполнять (пусть даже очень быстрые) запросы на SQL серваке.
Отчего происходит задеожка в 200мс при выполнении SQLEXEC ?
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34384579
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компиляция запроса. Время можно в данном случае можно уменьшить используя SQLPrepare().

Код: plaintext
1.
2.
3.
4.
SQLPrepare(gnConnHandle,'select * from dbo.sysobjects where id=?m.i'),'cur2')

for i= 1  to  10000 
SQLExec(gnConnHandle)
next
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34384729
Ffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну это и так известно. Свои Native данные обрабатываются быстрее.
Только, если данных очень много (гигабайты), сервер быстрее.
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34384942
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задержка идет еще и потому, что при каждом SQLEXEC идет обмен с сервером не только для получения данных , но и некоторые "системные" проверки .
поэтому пример не совсем корректен.
Тут больше времени тратиться не на обрабтку и получение данных , а на организацию обмена.

"Выгода" будет , если у вас на сервере много данных , с ними что-то надо сделать : отобрать , сгрупировать и т.д. Причем чем больше объем данных и чем селективнее запрос , тем больше "выгоды" получаешь.

Кстати - вот еще чем хорош фокс - где надо можно получить выгоду в скорости обработки , используя "родные" курсоры.
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34384986
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати - выполните в QA
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @i int , @a1 int , @dt1  datetime
set @dt1=getdate()
set @i= 1 
while @i< 10000  
begin 
 set @a1 = (select id from dbo.sysobjects where id=@i)
set @i=@i+ 1 
print @i
end
print @dt1
print getdate()
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34385046
Callace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=-задержка идет еще и потому, что при каждом SQLEXEC идет обмен с сервером не только для получения данных , но и некоторые "системные" проверки .
поэтому пример не совсем корректен.
Тут больше времени тратиться не на обрабтку и получение данных , а на организацию обмена.

Т.е от этой задержке в обмене с SQL никак не избавится? OLEDB или ADO помогут?

Sergey Sizov.Компиляция запроса. Время можно в данном случае можно уменьшить используя SQLPrepare().

Код: plaintext
1.
2.
3.
4.
SQLPrepare(gnConnHandle,'select * from dbo.sysobjects where id=?m.i'),'cur2')

for i= 1  to  10000 
SQLExec(gnConnHandle)
next

В том то все и дело, что запрос на сервере обрабатывается за 1-2ms(по крайней мере в profiler время 0)

Программа написана так что происходит большое (1000-10000) количество последовательных простых запросов к sql и обработка результата каждого вызова.
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34385057
Callace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=-кстати - выполните в QA
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @i int , @a1 int , @dt1  datetime
set @dt1=getdate()
set @i= 1 
while @i< 10000  
begin 
 set @a1 = (select id from dbo.sysobjects where id=@i)
set @i=@i+ 1 
print @i
end
print @dt1
print getdate()

3 секунды на серваке и 8 секунд в аналогичной по смысле программе на фоксе.
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34385956
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию, 100 мс VFP ждет перед тем, как проверять, что команда на сервере выполнилась
Параметр WaitTime команды SQLSETPROP. Так, что это время будет тратиться всегда.
Минимизируте кол-во обращений к сервере. Постарайтесь обработку перенести на сервер.
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34386076
Callace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-KПо умолчанию, 100 мс VFP ждет перед тем, как проверять, что команда на сервере выполнилась
Параметр WaitTime команды SQLSETPROP. Так, что это время будет тратиться всегда.
Минимизируте кол-во обращений к сервере. Постарайтесь обработку перенести на сервер.

Параметр WaitTime ни на что в данном случае не влияет(зависит от драйвера?).
Смысла переносить на сервер обработку тоже не вижу , т.к. клиенту достаточно "толстые".
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34386288
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если клиент "достаточно толстый", то может имеет смысл все на него закачать в один заход?
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34386480
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если клиент "достаточно толстый", то может имеет смысл все на него закачать в один заход?

Проверено - лучше один раз все на клиента и потом локальные селекты, чем каждый раз дергать сервер для маленького запросика в цикле. Выигрыш в разы
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34386635
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BurnПроверено - лучше один раз все на клиента и потом локальные селекты, чем каждый раз дергать сервер для маленького запросика в цикле. Выигрыш в разы
Несогласен - это смотря для чего.
Если мы просто "по кускам " тягаем данные из одной таблице( ну или из простого запроса ) - тогда да - быстрее получаеться затянуть максимум нужных данных и перелопатить их на клиенте.
Однако если данных много , а результаты выборки достаточно малы и получаються путем сложных или "тяжелых" расчетов - тогда обработку - на сервак .
Опять-же для чего тягать "куски" в цикле - может стоит переложить весь расчет на сервер - и просто уже получить окончательный результат.
Короче говоря - под каждую задачу-свой подход.И опять-же как хорошо что есть Фокс с его собственным движком БД.
...
Рейтинг: 0 / 0
SQLEЧУС и задержка 200мс
    #34387359
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-=AlexiS=-
Уточнение принимается;)
Как понял из топика у автора имено "Если мы просто "по кускам " тягаем данные из одной таблице( ну или из простого запроса ) "
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEЧУС и задержка 200мс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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