|
Долго выполняется 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 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Мы с сервером "сидим" в одной комнате. База представляет собой тестовый слепок основной базы. Есть приобретенный комплекс "Операционный день банка", писаный на Delphi. Если я со своего компа запускаю этот комплекс, то проверка логина и пароля, а значит и подключение, происходит за те же ~20 сек., но открытие форм с таблицами происходит мгновенно. Могу еще добавить, что сервер работает под Linux-ом, хотя по-моему это не имеет значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 10:55 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Юрий Р.Возможно Вы не совсем внимательно читали обсуждение, но я поясню подробней. ну возможно. Юрий Р.В головном модуле объявляется глобальная переменная gnConnHandle раз у вас все равно есть глобальная переменная , дак присойте значение прямо ей и её используйте везде. ну... хотя бы ради проверки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 12:16 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
to -=AlexiS=- Последовал Вашему совету и ... получил шок! Стыдно признаться, но как оказалось в задержке вообще виноват не запрос (установлено опытным путем). Но возник новый вопрос: а что же тогда задерживает визуализацию формы? На форме только три элемента: Shape, Label и ComboBox. Текст в теле события Init() привожу: Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Больше в этой форме никакого кода нет. Ситуация, на мой взгляд, еще больше запуталась. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 12:45 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Ну что Вам сказать, коллеги? Создал я полный аналог "вредной" формы, даже старые контролы туда перенес, и никаких проблем, все летает. Отсюда делаю вывод, что каким-то образом были запорчены SCT/SCX - файлы, хотя никаких "аварийных" ситуаций не возникало. Вопрос: как в дальнейшем избежать таких "грабель"? Огромное спасибо всем, кто пытался помочь. Спасибо и тем, кто просто читал. Ну и отдельная блогодарность -=AlexiS=- за особо ценный совет, иначе я бы еще долго бился головой о стену. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 13:20 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
Юрий Р., Задержка с визуализацией формы случается, в частности, когда в SET PATH попадает ссылка на недоступный или отсутствующий сетевой ресурс - даже если все нужные файлы лежат в текущей папке. Видимо, при открытии файлов в DE Fox пытается просмотреть все возможные пути, а 20 секунд - это время таймаута. Посмотрите эту форму на предмет "висящих" ссылок. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 14:14 |
|
Долго выполняется SELECT
|
|||
---|---|---|---|
#18+
to Sea_Cat Ну наконец-то! Просмотрел содержимое SCX и обнаружил в секции Data Environment остатки своих экспериментов, про которые я и забыл совсем. Там действительно присутствует процедура BeforOpenTable в которой создается подключение к базе на основе ADO - это я пробовал разные варианты, потом очистил, как мне казалось, Data Environment и забыл. Впредь буду осторожней. Большое спасибо! Разобрались. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2009, 15:05 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1586132]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 479ms |
0 / 0 |