powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ODBC душит производительность Access<->Oracle??
2 сообщений из 2, страница 1 из 1
ODBC душит производительность Access<->Oracle??
    #32625814
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть приложение на Access которое использует курсоры. (OpenRecordset)
Читает с Oracle 8.1.7 Odbc линк
Вижу что медленно работает. Начал копать. Простая программа на полный скан таблицы в 500 мегабайт дала удивительные результаты.
В не зависимости от мощьности ПК мы имеет скорость в сетевом интерфейсе 80000 байт\с на прием и 60000 байт на отправку. Причем при переходе на гораздо мощный ПК клиента скорость не увеличилась. Сервер - свободен, сетка тоже (можно копировать файлы на приличной скорости 5мб\с с сервера - сетка 100мегабит в т.ч. на клиентах)

Взял утилиту OracleSQL plus которая работает без Odbc и запустил курсор (программа ниже) и надоже - скорость возрасла до 250000 байт\с на прием и на отправку уменшилась до 30000 т.е. Прием возрос. На более мощном
ПК скорость приема увеличилась до 500000 байт\с. Т.е. имеем возрастание на порядок
Можно ли как нибудь оптимизировать работу ODBC?
Это для SQLPlus
SET AUTOPRINT ON
SET TERMOUT OFF
SET HEADS OFF
VARIABLE VREC REFCURSOR
BEGIN
OPEN :VREC FOR SELECT * FROM xxx.tab;
END;
/

Это программа которую вызываем из формы
Private Sub Start_Click()
Dim MyDbs As Database
Dim Rc As Recordset
Set MyDbs = CurrentDb
Set Rc = MyDbs.OpenRecordset("xxx_tab")
Dim FStr As String
Dim Rcount As Long
Dim I As Long
Rcount = 0
Rc.MoveFirst
Rc.CacheSize = 50
Rc.FillCache

While Not Rc.EOF 'And Not Rcount = 1000
For I = 1 To Rc.Fields.Count
FStr = FStr & CStr(Nz(Rc.Fields(I - 1))) & "|"
Next I


FStr = ""
Rc.MoveNext

Rcount = Rcount + 1
If Rcount Mod 50 = 0 Then
Rc.CacheStart = Rc.Bookmark
Rc.FillCache
Me.MyTxt.Caption = "Îáðàáîòàíî " & Rcount & " çàïèñåé"
Me.Repaint
End If

Wend



End Sub

Сергей С
Сергей С
...
Рейтинг: 0 / 0
ODBC душит производительность Access<->Oracle??
    #32628180
Фотография Markelenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой опыт связки Access<->Oracle говорит о том, что проблемы скорей всего не в odbc-драйвере, а в тупом Access'e. Если при установке связи из Access с таблицей Oracle у таблицы в Oracle есть primary key, Access его "понимает". В последующем этот дебильный (других слов найти трудно) Access тянет из Oracle данные группами по 10 строк запросами примерно такого вида:

Код: plaintext
1.
2.
3.
4.
select * from table where
column_1_of_PK=: 1  and column_2_of_PK=: 2  and column_3_of_PK=: 3  OR
column_1_of_PK=: 4  and column_2_of_PK=: 5  and column_3_of_PK=: 6  OR
...
column_1_of_PK=: 28  and column_2_of_PK=: 29  and column_3_of_PK=: 30 
В этом примере PK составной из 3 колонок.
Ни о какой производительности при таком подходе нет и речи. Если PK на таблицу в Oracle нет, Access ведет себя поразумней. Поэтому можно попробовать удалить временно в Oracle PK перед присоединением таблицы, а затем создать его в Oracle заново. Если PK на таблицу нет, Access спрашивает, какие столбцы будут его (primary key) составлять. Ответить надо cancel. Это может помочь.

И вообще, связка Oracle-Access у меня вызывает нервную дрожь с приступами ненависти к дяде Билли.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ODBC душит производительность Access<->Oracle??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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