powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Долго выполняется SELECT
25 сообщений из 31, страница 1 из 2
Долго выполняется SELECT
    #36151873
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени суток.

Помогите, пожалуйста, решить проблему. В программе создается ODBC-соединение с удаленной базой Informix, на что тратится ~20 сек. Затем, используя дескриптор этого соединения, делается простой запрос на выборку типа: "SELECT * FROM ... ORDER BY ...". Так вот этот запрос тоже выполняется ~20 сек. Не могу понять почему. Такое впечатление, что подключение заново создается. Исходная таблица содержит всего 534 записи. Был некий опыт работы с Oracle, но там и при сотнях тысяч записей такие "грабли" не проявлялись.
Подскажите в чем может быть дело?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36151978
mvictor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сеть ? (стабильность, ping )
tracert ? - может вы к своему серверу через австралию ходите
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36151998
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, с сетью все Ok. Опять же основная надстройка (на Delphi писаная) работает нормально.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152007
АлексейО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А delphi через тот же ODBC ходит? c точно такойже строкой соединения?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152009
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, пробовал всю процедуру повторить на C++Builder + ADO - все нормально, а вот Фокс "кашляет"
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152019
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АлексейОА delphi через тот же ODBC ходит? c точно такойже строкой соединения?

Delphi, похоже, ходит так же, только еще и через BDE
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152054
АлексейО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю что "кашляет" не фокс а ODBC.
можно проверить/обновить ODBC драйвер, а можно сделать курсор адаптер на ADO соединении.
в случае с Ms SQL это было у меня быстрее.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152073
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АлексейОДумаю что "кашляет" не фокс а ODBC.
можно проверить/обновить ODBC драйвер, а можно сделать курсор адаптер на ADO соединении.
в случае с Ms SQL это было у меня быстрее.

А ничего, что в связи с отсутствием OLE DB провайдера для Informix придется пользоваться универсальным, т.е. ODBC-шным ?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152271
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А запрос случайно не параметрезированный ?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152278
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=-А запрос случайно не параметрезированный ?

Нет, самый простой запрос.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152881
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот у меня такое впечатление, что при запросе не используется созданное ранее соединение, а на его основе строится новое. Может быть нужно как-то указать чтобы использовалось ранее созданное?

По алгоритму программы соединение создается после вводе логина и пароля при входе в программу функцией SQLSTRINGCONNECT (или SQLCONNECT). Затем из меню главной формы вызываю новую, в INIT() которой делается запрос. Что не так?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152898
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код приведите. Как именно делаете запрос к серверу?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152910
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМКод приведите. Как именно делаете запрос к серверу?

вот так:

Код: plaintext
1.
2.
3.
lcConnString = "DSN=test;DB=pxbank;HOST=10.0.50.50;SERV=sqlexec;SRVR=ontest;PRO=olsoctcp;" + ;
		"UID=" + lcUserLog + ";PWD=" + lcUserPas
lnConnHandle = SQLSTRINGCONNECT(lcConnString)
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152918
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Юрий Р.ВладимирМКод приведите. Как именно делаете запрос к серверу?

вот так:

Код: plaintext
1.
2.
3.
lcConnString = "DSN=test;DB=pxbank;HOST=10.0.50.50;SERV=sqlexec;SRVR=ontest;PRO=olsoctcp;" + ;
		"UID=" + lcUserLog + ";PWD=" + lcUserPas
lnConnHandle = SQLSTRINGCONNECT(lcConnString)


то есть это подключение, а запрос вот:

Код: plaintext
1.
2.
lcSQLText = "SELECT * FROM informix.bst_creddebtors ORDER by short_name"
lnCursorCount = SQLEXEC(gnConnHandle, lcSQLText, "CredDogList")
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152946
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lnConnHandle = SQLSTRINGCONNECT(lcConnString)
lnCursorCount = SQLEXEC( gnConnHandle , lcSQLText, "CredDogList")

Это опечатка ?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152968
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=- lnConnHandle = SQLSTRINGCONNECT(lcConnString)
lnCursorCount = SQLEXEC( gnConnHandle , lcSQLText, "CredDogList")

Это опечатка ?

Нет. lnConnHandle возвращается функцией и присваивается глобальной gnConnHandle.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36152994
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а мужыки то и не знают (С)

ну тогда у вас запрос выполняеться в открытом соединении.

если выполнить этот же запрос второй раз - скорость увеличиваеться ?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153008
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=AlexiS=-а мужыки то и не знают (С)

ну тогда у вас запрос выполняеться в открытом соединении.

если выполнить этот же запрос второй раз - скорость увеличиваеться ?

Увы. При последующих аналогичных запросах та же картина маслом.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153156
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я спрашивал не про аналогичные , а про точно такой-же.
собственно тут фокс как-бы и не причем.
он всего-лишь "говорит" ODBC какой запрос выполнить и принимает ответ.

с информиксом не работал , но почему спрашивал про повторы- например в MS SQL при первом запуске запроса после долгого простоя или после запуска самого сервера могут быть долгими , а вот последующие - уже быстро проходят.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153173
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже имел ввиду точно такой же.
Про MS SQL не знаю, не сталкивался.
Кстати, если подключение и запрос выполнять в одной процедуре, то затрачивается только ~20 сек., а если так, как у меня - в два раза дольше. Непонятно ...
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153661
АлексейО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Юрий Р.
Код: plaintext
1.
2.
3.
4.
5.
6.
lcConnString = "DSN=test;DB=pxbank;HOST=10.0.50.50;SERV=sqlexec;SRVR=ontest;PRO=olsoctcp;" + ;
		"UID=" + lcUserLog + ";PWD=" + lcUserPas
lnConnHandle = SQLSTRINGCONNECT(lcConnString)

lcSQLText = "SELECT * FROM informix.bst_creddebtors ORDER by short_name"
lnCursorCount = SQLEXEC(gnConnHandle, lcSQLText, "CredDogList")


мне кажется этот код вообще не должен работать. я бы написл так:

lcConnString = "DSN=test;DB=pxbank;HOST=10.0.50.50;SERV=sqlexec;SRVR=ontest;PRO=olsoctcp;" + ;
"UID=" + lcUserLog + ";PWD=" + lcUserPas
lnConnHandle = SQLSTRINGCONNECT(lcConnString)

lcSQLText = "SELECT * FROM informix.bst_creddebtors ORDER by short_name"
lnCursorCount = SQLEXEC( lnConnHandle , lcSQLText, "CredDogList")
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153866
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to АлексейО

Возможно Вы не совсем внимательно читали обсуждение, но я поясню подробней.

В головном модуле объявляется глобальная переменная gnConnHandle , которая по задумке будет содержать дескриптор моего соединения. Затем, в процессе регистрации пользователя (это естественно отдельная форма), с помощью функции генерации подключения ей присваивается конкретное значение, в зависимости от которого делается вывод об удачном/неудачном соединении с базой. Первые две строки взяты из функции генерации подключения и перемення lnConnHandle - это ее локальная переменная, передаваемая из функции. А две последние строки взяты из кода события INIT() отдельной формы, вызываемой при необходимости из меню пользователем.

Все работает ... но медленно, что, собственно, и не устраивает.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153899
Юрий Р.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе выход есть. Он заключается в хранении результата запроса в таблице временной базы фокса. Эта таблица фактически представляет собой справочник, который обновляется ежедневно в начале работы, хотя возможно повторное обновление, но не часто. Однако кроме этого мне понадобятся регулярные запросы на обновление некоторых таблиц Informix (ввод платежек, например).
Поэтому беспокоит не будут ли и эти запросы так долго работать, что не допустимо.
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36153931
pitermax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на самом серваке за сколько выполняется запрос?
Может все-таки канал?
...
Рейтинг: 0 / 0
Долго выполняется SELECT
    #36154009
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если подключение и запрос выполнять в одной процедуре, то затрачивается только ~20 сек., а если так, как у меня - в два раза дольше. Непонятно ...
вот это точно непонятно.
по идее этого не должно быть .

еще раз :
если выполнить просто запрос 2 раза подряд

Код: plaintext
1.
2.
lcSQLText = "SELECT * FROM informix.bst_creddebtors ORDER by short_name"
lnCursorCount = SQLEXEC(lnConnHandle, lcSQLText, "CredDogList_1")
lnCursorCount = SQLEXEC(lnConnHandle, lcSQLText, "CredDogList_2")
второй запрос выполниться быстрее или так-же долго ?
т.е. не через некоторое время , а именно вот так - тупо один за другим .
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Долго выполняется SELECT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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