|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Доброго всем времени суток. Помогите, пожалуйста, решить проблему. В программе создается ODBC-соединение с удаленной базой Informix, на что тратится ~20 сек. Затем, используя дескриптор этого соединения, делается простой запрос на выборку типа: "SELECT * FROM ... ORDER BY ...". Так вот этот запрос тоже выполняется ~20 сек. Не могу понять почему. Такое впечатление, что подключение заново создается. Исходная таблица содержит всего 534 записи. Был некий опыт работы с Oracle, но там и при сотнях тысяч записей такие "грабли" не проявлялись. Подскажите в чем может быть дело? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 12:02 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
сеть ? (стабильность, ping ) tracert ? - может вы к своему серверу через австралию ходите ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 12:42 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Нет, с сетью все Ok. Опять же основная надстройка (на Delphi писаная) работает нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 12:49 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
А delphi через тот же ODBC ходит? c точно такойже строкой соединения? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 12:51 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Кстати, пробовал всю процедуру повторить на C++Builder + ADO - все нормально, а вот Фокс "кашляет" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 12:53 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
АлексейОА delphi через тот же ODBC ходит? c точно такойже строкой соединения? Delphi, похоже, ходит так же, только еще и через BDE ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 12:55 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Думаю что "кашляет" не фокс а ODBC. можно проверить/обновить ODBC драйвер, а можно сделать курсор адаптер на ADO соединении. в случае с Ms SQL это было у меня быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 13:05 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
АлексейОДумаю что "кашляет" не фокс а ODBC. можно проверить/обновить ODBC драйвер, а можно сделать курсор адаптер на ADO соединении. в случае с Ms SQL это было у меня быстрее. А ничего, что в связи с отсутствием OLE DB провайдера для Informix придется пользоваться универсальным, т.е. ODBC-шным ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 13:14 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
А запрос случайно не параметрезированный ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 14:10 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
-=AlexiS=-А запрос случайно не параметрезированный ? Нет, самый простой запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 14:12 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Вот у меня такое впечатление, что при запросе не используется созданное ранее соединение, а на его основе строится новое. Может быть нужно как-то указать чтобы использовалось ранее созданное? По алгоритму программы соединение создается после вводе логина и пароля при входе в программу функцией SQLSTRINGCONNECT (или SQLCONNECT). Затем из меню главной формы вызываю новую, в INIT() которой делается запрос. Что не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:02 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Код приведите. Как именно делаете запрос к серверу? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:07 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
ВладимирМКод приведите. Как именно делаете запрос к серверу? вот так: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:12 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Юрий Р.ВладимирМКод приведите. Как именно делаете запрос к серверу? вот так: Код: plaintext 1. 2. 3.
то есть это подключение, а запрос вот: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:15 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
lnConnHandle = SQLSTRINGCONNECT(lcConnString) lnCursorCount = SQLEXEC( gnConnHandle , lcSQLText, "CredDogList") Это опечатка ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:25 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
-=AlexiS=- lnConnHandle = SQLSTRINGCONNECT(lcConnString) lnCursorCount = SQLEXEC( gnConnHandle , lcSQLText, "CredDogList") Это опечатка ? Нет. lnConnHandle возвращается функцией и присваивается глобальной gnConnHandle. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:31 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
а мужыки то и не знают (С) ну тогда у вас запрос выполняеться в открытом соединении. если выполнить этот же запрос второй раз - скорость увеличиваеться ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:37 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
-=AlexiS=-а мужыки то и не знают (С) ну тогда у вас запрос выполняеться в открытом соединении. если выполнить этот же запрос второй раз - скорость увеличиваеться ? Увы. При последующих аналогичных запросах та же картина маслом. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 17:40 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Я спрашивал не про аналогичные , а про точно такой-же. собственно тут фокс как-бы и не причем. он всего-лишь "говорит" ODBC какой запрос выполнить и принимает ответ. с информиксом не работал , но почему спрашивал про повторы- например в MS SQL при первом запуске запроса после долгого простоя или после запуска самого сервера могут быть долгими , а вот последующие - уже быстро проходят. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 18:39 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Я тоже имел ввиду точно такой же. Про MS SQL не знаю, не сталкивался. Кстати, если подключение и запрос выполнять в одной процедуре, то затрачивается только ~20 сек., а если так, как у меня - в два раза дольше. Непонятно ... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2009, 18:54 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Юрий Р. Код: 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( lnConnHandle , lcSQLText, "CredDogList") ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 08:15 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
to АлексейО Возможно Вы не совсем внимательно читали обсуждение, но я поясню подробней. В головном модуле объявляется глобальная переменная gnConnHandle , которая по задумке будет содержать дескриптор моего соединения. Затем, в процессе регистрации пользователя (это естественно отдельная форма), с помощью функции генерации подключения ей присваивается конкретное значение, в зависимости от которого делается вывод об удачном/неудачном соединении с базой. Первые две строки взяты из функции генерации подключения и перемення lnConnHandle - это ее локальная переменная, передаваемая из функции. А две последние строки взяты из кода события INIT() отдельной формы, вызываемой при необходимости из меню пользователем. Все работает ... но медленно, что, собственно, и не устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 10:19 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
В принципе выход есть. Он заключается в хранении результата запроса в таблице временной базы фокса. Эта таблица фактически представляет собой справочник, который обновляется ежедневно в начале работы, хотя возможно повторное обновление, но не часто. Однако кроме этого мне понадобятся регулярные запросы на обновление некоторых таблиц Informix (ввод платежек, например). Поэтому беспокоит не будут ли и эти запросы так долго работать, что не допустимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 10:30 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
А на самом серваке за сколько выполняется запрос? Может все-таки канал? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 10:37 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Кстати, если подключение и запрос выполнять в одной процедуре, то затрачивается только ~20 сек., а если так, как у меня - в два раза дольше. Непонятно ... вот это точно непонятно. по идее этого не должно быть . еще раз : если выполнить просто запрос 2 раза подряд Код: plaintext 1. 2.
т.е. не через некоторое время , а именно вот так - тупо один за другим . ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 10:55 |
|
|
start [/forum/topic.php?fid=41&msg=36152898&tid=1586132]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 156ms |
0 / 0 |