Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché Новый топик    Ответить
 Медленная работа через ECP  [new]
Hisbreht Victor
Member

Откуда:
Сообщений: 104
Имеется некая БД, которая крутится под Cache 2009.
При доступе к этой БД через ECP все происходит в разы, если не в десятки раз, медленнее, чем при обычном локальном доступе.
Уже вроде все проверили. Сеть работает нормально, файлы копируются без проблем.
Приложение, написанное на С++, взаимодействует с БД одинаковым образом.
Что еще может так замедлять доступ через ECP?

Виктор
4 авг 17, 15:06    [20701086]     Ответить | Цитировать Сообщить модератору
 Re: Медленная работа через ECP  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3535
Hisbreht Victor,

Ну как бы логично, что работа через ECP медленнее, причем намного, по сравнению с доступом к локальной базе. Вопрос в том, что именно вы делаете с ECP? Некоторые операции, например, $incremet, lock (соответственно, вставка или апдейт строк таблиц) вызывают синхронизацию данных при каждой операции, что кардинально замедляет скорость. Если просто чтение, то тут более-менее должно быть нормально, данные будут кэшироваться и в итоге читаться из локального кэша.
Еще зависит от версии, вроде бы в новых версиях работу с ECP обещали сделать получше.
4 авг 17, 15:22    [20701164]     Ответить | Цитировать Сообщить модератору
 Re: Медленная работа через ECP  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3535
Hisbreht Victor,

запись без инкрементов и блокировок будет тоже достаточно быстрой. Если все-таки инкремент необходим, попробуйте заменить его $sequence
4 авг 17, 15:23    [20701175]     Ответить | Цитировать Сообщить модератору
 Re: Медленная работа через ECP  [new]
Hisbreht Victor
Member

Откуда:
Сообщений: 104
Замедление, конечно, было ожидаемо, но не такое.

Блок А.Н.
Hisbreht Victor,

запись без инкрементов и блокировок будет тоже достаточно быстрой. Если все-таки инкремент необходим, попробуйте заменить его $sequence


Справка по 2009 $sequence не находит.
Это получается надо на новую версию переходить?
4 авг 17, 15:35    [20701223]     Ответить | Цитировать Сообщить модератору
 Re: Медленная работа через ECP  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1427
Наиболее частые ошибки конфигурирования ECP:
  • Мощный (по кол-ву ядер) сервер данных (СБД), слабые серверы приложений СП. Должно быть наоборот: приложения работают на СП.
  • Недостаточно большой кэш данных на СП.
  • Медленная сеть между СП и СБД. Должна быть >= 1000BaseT.
  • Парадокс: менее 4 СП. Представитель ISC откровенно признался мне, что в таких случаях лучше применить вертикальное масштабирование. Существует тенденция отказа от ECP, когда технически возможно купить сервер, который сможет стать СБД+СП "в одном флаконе".
    Однако вряд ли малое количество СП снижает скорость работы на отдельно взятом СП; это лишь архитектурный изъян.

    Наиболее частые ошибки программирования в среде ECP:
  • Использование full-сканов; если без них никак, то код, их выполняющий, должен запускаться удалённо на СБД или вообще на отдельном сервере (Reporting Async Mirroring Member).
  • Использование bit-map индексов; неактуально, начиная с 2017.1.
  • Использование "нормальных" глобалов в тех случаях, когда можно использовать временные или приватные.
  • 4 авг 17, 16:49    [20701586]     Ответить | Цитировать Сообщить модератору
     Re: Медленная работа через ECP  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3535
    Hisbreht Victor,

    в свое время (кстати, на 2009) если нужно было залить много данных для ECP, то разрабатывали правила генерации ID, чтобы они не повторились на разных серверах, создавали данные локально, а затем их просто сливали через merge. Решает проблему кардинально :-) К тому же, логика $sequence не такая уж сложная, если хотите, можно ее самим реализовать, и даже подзаточить именно под ваши условия.
    4 авг 17, 20:40    [20702024]     Ответить | Цитировать Сообщить модератору
     Re: Медленная работа через ECP  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3535
    Hisbreht Victor,

     #define sequence(%Ref) $select($e($name(%Ref))="^":$$sequence($name(%Ref)),1:$i(%Ref))
     
     w !,$$$sequence(^log)
     w !,$$$sequence(^log(1))
     s y=1
     w !,$$$sequence(^log(y))
     w !,$$$sequence(test)
     
     
    sequence(refName) public
    {
    	q:$e(refName)'="^" $i(@refName)
    	if $g(^||sequence(refName,"last"))=$g(^||sequence(refName,"max"))
    	{
    		s ^||sequence(refName,"step")=$g(^||sequence(refName,"step"),.5)*2
    		s ^||sequence(refName,"max")=$i(@refName,^||sequence(refName,"step"))
    		s ^||sequence(refName,"last")=^||sequence(refName,"max")-^||sequence(refName,"step")
    	}
    	q $i(^||sequence(refName,"last"))	
    }
    

    Вот как-то так. Это демка, в рабочей эксплуатации не использовал. Если понравится, вызов программы нужно будет переделать, но суть, я думаю, ясна.
    4 авг 17, 22:25    [20702106]     Ответить | Цитировать Сообщить модератору
     Re: Медленная работа через ECP  [new]
    EvLaUy
    Member

    Откуда: Москва
    Сообщений: 2068
    Виктор, я бы порекомендовал Вам в первую очередь последить во время передачи данных за таблицей блокировок на одном и другом Cache-сервере. Если их аномально много и они подолгу висят - это уже будет повод к размышлению, почему так происходит и что можно изменить.
    Ровно 10 лет назад, в сентябре 2007 года (у нас тогда появился первый клиент, для которого пришлось разрабатывать решение с использованием ECP), я нашел устойчиво воспроизводимый баг в реализации ECP, приводящий к неустранимой блокировке на одном из серверов. Баг был подтвержден в штаб-квартире и исправлен. Но и в архитектуру нашего решения тоже пришлось внести изменения с учетом этих блокировок.
    7 авг 17, 18:56    [20706451]     Ответить | Цитировать Сообщить модератору
     Re: Медленная работа через ECP  [new]
    Hisbreht Victor
    Member

    Откуда:
    Сообщений: 104
    Всем спасибо за советы. Кое что почерпнул для себя.
    $Sequence действительно дает ускорение, хотя и не всегда приемлемо (в некоторых случаях "дыры" в нумерации, которые она вроде как может создавать, неприемлемы).
    С блокировками никаких проблем. Все по делу.

    И что интересно, одна из причин тормозов оказалась неожиданной.

    Дело было в том, что другое приложение подключалось через ECP к другой базе но на том же компьютере. При этом на клиенте создавалась новая запись для ECP сервера. В результате получалось два канала доступа к одному и тому же компьютеру.
    После перевода удаленных БД на один ECP сервер и удаления лишней записи в "ECP настройках" скорость заметно выросла.

    Интересно, это у меня фазы луны так совпали, или это имеет фундаментальное обоснование?
    18 сен 17, 22:24    [20804724]     Ответить | Цитировать Сообщить модератору
    Все форумы / Caché Ответить