Медленное выполнение SQL запросов из Excel

Конфигурирование, исправление ошибок Pervasive.SQL.

Правила форума
Тема закрыта! Все обсуждения теперь ведутся в группе СБИС 2.Х
Подробнее о том как найти группы и вступить в них.

Медленное выполнение SQL запросов из Excel

Есть несколько удаленных объектов где стоит СБиС 1.9 (сетевая версия mkd, база подключеная к pervasive, ddf файлы присутсвуют, база стоит на мощном сервере). Эти объекты соеденены с офисом посредством провайдера со скоростью не мене 1 мегабита в секунду (качество связи хорошее!) Из офиса идет сбор данных через Excel с помощью макроса в котором выполняются SQL запросы (собираем выручку за один день). При этом когда то эти запросы выполняются быстро, а когда то очень тихо (разброс скорости значительный - от двух секунд на объект до минуты на объект), а бывает даже зависнет. Было замечено, что скорость зависит от нагрузки на СБиС на объектах (выполняются назначенные задания в СБиС на сервере, или идет перезакрытие документов). Такая зависимость объяснима, но бывает что на сервере ничего не происходит, а SQL запросы все равно выполняются очень медленно.

Насколько я понимаю SQL запросы должны выполняться быстро и при этом практически не зависить от скорости соединения с удаленным объектом!
Почему так сильно колеблется скорость выполнения SQL запросов? Может надо что то поднастроить?

Запрос в макросе делаю так
sqlstring = "SELECT Sum(DOC.FSumma)/1000, Count(*) FROM DOC DOC WHERE (DOC.FTema>='01' And DOC.FTema<='10') AND (DOC.FData={d '" & Msg & "'}) AND (DOC.""FTip dokumenta""=19)"

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=" & Base & ";;ServerDSN=" & Base & ";UID=sqluser;PWD=sqluser;ArrayFetchOn=1;ArrayBufferSize=8;TransportHint=TCP:S" _
), Array( _
"PX;DBQ=" & Base & ";TranslationDLL=" & iPathPVSW & ";OpenMode=0;DecimalSymbol=,;;CodePageConvert" _
), Array("=1251;AutoDoubleQuote=0;")), Destination:=Range("B" & Per_Po_Poradku + 2 & ""))

.CommandText = Array(sqlstring)
.Name = "Çàïðîñ èç MAG" & Per
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Павел Глухих 
» 15 июн 2011, 13:09


Представление, что SQL запросы должны выполняться быстро

неверно. Сервер БД на них также тратит время как и на все другое, разве что лишний раз данные по сети не прогонит. А он еще в отличие от СБИС и план запроса строит, что тоже может требовать времени. Поэтому если сервер сильно занят, например, идет перезакрытие документов, то и SQL запросы будут выполняться медленнее. Зависимость скорости соединения все равно имеет смысл если в посылаете серверу 1000 запросов, он их все равно вынужден передать по сети и вернуть вам ответ, а если вы умудритесь 1000 запросов свести в один, то возможно получится прирост производительности. В любом случае однозначно ответить на Ваш вопрос сложно, узкое место здесь может быть в чем угодно.
Терентьев Алексей 
» 21 июн 2011, 15:00
Компания "Тензор"
Аватара пользователя



Вернуться в Pervasive.SQL

cron