powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оптимизация интерактивного 3-звенника
25 сообщений из 40, страница 1 из 2
Оптимизация интерактивного 3-звенника
    #40006647
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скоро буду участвовать в проекте ускорения работы кастом клиента-терминала.
Архитектура традиционная 3-звенная: Win32 клиент на стареньком Дельфи - Вин32 сервер на нем же - Оракл 11.2
Сотни интерактивных Windows клиентов на медленном железе через один апп сервер доступаются к одной базе.

За терминалами сидят живые люди, которых раздражают задержки и подвисания. Нажатие кнопки может привести к 10-секундному ожиданию, что неприемлемо. Клиенты (виртуально) находятся в одном дата центре с серверами, поэтому сеть между клиентами и серверами считается очень быстрой.

С задачами оптимизаций я знаком, но по совсем другим ситуациям (интел железо, спутники связи, дизайн файловых систем), про базы знаю очень мало, про оптимизацию Оракла - вообще ничего. Должно быть интересно и познавательно.

Для разминки, выбрал конкретный сценарий и сделал несколько замеров скорости, а также написал немного предварительного кода.

Сценарий: список заказчика, который выскакивает по кнопке "выбрать заказчика".
Лучшее время: 300-500 строк за 3-5 секунд (если уже выбран фильтр)
Худшее время: десятки тысяч строк за 30-60 секунд (если фильтр отключен)

Для интерактивных приложений, UI считается "мгновенным" если укладывается в 200 миллисекунд, и "быстрым" если < 500мс.
При длительности ожидания более 200мс принято показывать индикатор занятости, обычно курсор, это уже делается.
При длительности ожидания более секунды (это уже плохо) желательно показывать индикатор прогресса

Начальная цель: уложиться в одну-две секунды для всех значений фильтра.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006649
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где тут "Архитектура традиционная 3-звенная" ?
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006650
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

А при чем тут Оракл?
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006651
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

НеофитSQL
десятки тысяч строк за 30-60 секунд (если фильтр отключен)

Какой сакральный смысл в передаче десятков тысяч строк на клиента?

Начните с редизайна приложения, если оно постоянно таскает десятки тысяч строк в фильтры, то его явно надо менять.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006653
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

Начальная цель: уложиться в одну-две секунды для всех значений фильтра.

Невозможно фактически

Т.к. фильтров может быть бесконечно много, то уложится можно только в бесконечно-многое кол-во секунд. По определению. Так же по определению, время выполнения работы (и зарплата) приблежается к бесконечности.

Готов сделать данную работу за Вас. Даже не требую бесконечной оплаты, хватит сотни тысяч рублей в месяц. Но сделаю, разумеется, за бесконечно большое время. Тестирование на совести заказчика, но так как работа мною никогда не будет закончена - то это не проблема )))
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006655
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае без изменения приложения не получится. Либо кэшировать такие справочники на клиенте сервере приложений, заливая при запуске и время от времени синхронизируя дифф, либо менять подход и не тащить на клиента больше полусотни строк.

Можно сделать "умный" фильтр + пейджинг, который будет подтягивать только нужную страницу.

Если приложение трогать нельзя, то бегите оттуда посмотрите в сторону result cache, но это надо уметь готовить не панацея.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006657
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал с замеров, чтобы понять где и что тормозит.

Замер 1: исключить сеть как фактор.
Ранее упоминалось что сеть считается очень быстрой и не потребует оптимизации.
Предположения полагается проверять, поэтому мой сотрудник, системный администратор исключительных талантов, помог сделать замеры объема сетевого трафика. Получилось около 50 байтов на строку (используется сжатие между клиентом и сервером).
Вывод 1 : сеть не является фактором, т.к. в один мегабайт помещается 20 тыс строчек, а мегабайт по гигабитам летает быстро.

Замер 2: скорость железа клиента как фактор
Замеры показали что скорость сценария зависит от скорости железа. Разница между "стандартным" и "самым быстрым" примерно вдвое.
Вывод 2 : оптимизация кода на клиенте имеет смысл, и скорее всего будет необходимой.

Замер 3: скорость исполнения запроса на сервере.
Запрос достаточно сложный, сотни строк и десяток таблиц. Немного поломал голову, как исполнить запрос без вывода данных на экран, наконец нашел "set autotrace traceonly". Получил пять секунд для полного запроса на все имеющиеся строчки.
Вывод 3 : для достижения цели будет необходимо изменить запрос.

Замер 4: влияние среднего звена на общую задержку
Этот замер отложил, т.к. код сервера законсервирован. Влияние возможно есть, оно будет известно лучше после оптимизации кода клиента и запроса. Уточнил у своего гуру, что архитектура "store and forward", т.е без пайплайнинга (результат запроса отдается серверу одним куском, а потом тот отдает его клиенту). Без пайплайнинга время исполнения SQL запроса и время получения/рендеринга текста на экране складываются в общую паузу ожидания, и эффект оптимизаций тоже складывается.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006658
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Какой сакральный смысл в передаче десятков тысяч строк на клиента?

Если допустима binary сортировка, и клиент не делает fetch all, то проблемой не является.

Иногда уже на первом экране (когда еще фильтр не выбран, by default ), пользователь хочет что нибудь видеть... смысла вроде нет, но пользователю так проще сориентироваться, что он на нужной форме и по каким полям нужно/можно искать (иногда из названия полей не очень очевидно, что же туда реально забивают).

IMHO & AFAIK
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006659
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Да тут сразу понятно что дело труба, на древнем 32-х разрядном сервере крутится сервер приложений на Дельфях и Оракл, пытаться что то выкрутить тюнингом запросов или кешированием на стороне Оракла (кешировать все равно некуда будет, памяти то на древнем сервере нет) бессмысленно занятие, совет "бегите оттуда" реально самый здравый))
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006660
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Судя по замерам - фетч там полный
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006661
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вщте ауув екщдд :)
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006662
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Судя по замерам - фетч там полный

или Order by
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006664
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Запрос достаточно сложный, сотни строк и десяток таблиц.

Это всё ещё про

НеофитSQL

Сценарий: список заказчика, который выскакивает по кнопке "выбрать заказчика".
?

Материализовать возможности нет?
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006666
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
результат запроса отдается серверу одним куском, а потом тот отдает его клиенту)

Поменять на более ленивый вариант возможность есть? Тогда первые строки можно будет отдать быстро, а остальные подгрузить по скроллу. Как раз пока клиент пялится в экран - сервер приложений дофетчит уже.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006668
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу столько комментариев! Спасибо.

Попробую ответить на все.

Leonid Kudryavtsev> А где тут "Архитектура традиционная 3-звенная" ?
(Оракл) --- (Апп сервер) ---- (Клиент)
Апп сервер обслуживает все сотни клиентов, разговаривает с ораклом через 10-20 сессий.
Я понимаю, такая архитектура называется 3-звенкой, хотя термин чаще используется для вэбсайтов. Верно?

graycode> А при чем тут Оракл?
Я описываю задачу в целом для полноты контекста, и чтобы было интересно.
Вопросы оптимизации клиента довольно простые, на мой первый взгляд.
У меня будут вопросы по оптимизации, которые затронут Оракл, с которыми мне возможно помогут местные эксперты.

env> Какой сакральный смысл в передаче десятков тысяч строк на клиента?
Это очень правильный вопрос, один из тех что я собираюсь задать. Ответ на этот вопрос может значительно повлиять на объем работ и результат. Леонид частично на него ответил. Обычно "всех" хотят видеть руководители, а они жалуются громче рядовых сотрудников.

Leonid Kudryavtsev> Т.к. фильтров может быть бесконечно много,
Фильтр ограниченной сложности. Когда я написал "при всех возможных значениях фильтрА", я имел в виду самое неблагоприятную для скорости комбинацию значений. На данный момент это пустой фильтр.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006670
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте на время отложим комментарии "дело труба, беги оттуда".
Я очень уважаю моих сотрудников и учредителей, и эта задача мне интересна.

На данный момент я собрал прототип который показывает полный список за 1.5-2 секунды.
Это лучшее что мне удалось сделать без внесения изменений в архитектуру. Через пару минут расскажу что уже сделал.

Дальше будет труднее, и наверное интереснее как вам, так и мне.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006671
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLАрхитектура традиционная 3-звенная: Win32 клиент на стареньком Дельфи - Вин32 сервер на нем же

И то и другое вероятнее всего сляпано мышкой из готовых компонент. Для достижения
поставленной цели придётся переписать чуть менее чем полностью. В морг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006673
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLя имел в виду самое неблагоприятную для скорости комбинацию значений. На данный момент это
пустой фильтр.

Как раз пустой фильтр для стандартных дельфийских компонент практически идеальный случай.
Если даже его вы сумели вытянуть только на секунду... См сообщение выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006674
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
результат запроса отдается серверу одним куском, а потом тот отдает его клиенту)

Поменять на более ленивый вариант возможность есть? Тогда первые строки можно будет отдать быстро, а остальные подгрузить по скроллу. Как раз пока клиент пялится в экран - сервер приложений дофетчит уже.


Это один из вариантов.

Я вчера в первый раз ковырялся в DB контролях Дельфи (они какие-то кастом).
Я заметил что ленивый фетч присутствует в настройках, но не используется нигде в приложении.
Есть ньюанс, что поиск по Ctrl-F (вместо настройки фильтра) это самый ходовая команда у пользователей, ее нужно сохранить.
Также, при ленивой подкачке возникнет дополнительная работа по обработке сортировок по колонкам с сохранением позиции выбранной строки. Это задача чревата большим количеством тестирования. Поскольку тестера мы не предусмотрели, я пока откладываю варианты связанные с повышенной тестовой нагрузкой.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006675
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

НеофитSQLя имел в виду самое неблагоприятную для скорости комбинацию значений. На данный момент это
пустой фильтр.

Как раз пустой фильтр для стандартных дельфийских компонент практически идеальный случай.
Если даже его вы сумели вытянуть только на секунду... См сообщение выше.


Мы оба говорим про сервер-сайд фильтр, который передается на сервер, и уменьшает количество строк, так?

Пустой фильтр сегодня дает максимальное количество строк, а задержка в исполнении операции показа заказчиков растет с числом строк. На этом основании я заключил что пустой фильтр на сегодня самый медленный. (ну и прямых измерений, конечно)
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006683
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLМы оба говорим про сервер-сайд фильтр, который передается на сервер, и уменьшает
количество строк, так?

Да.

НеофитSQLПустой фильтр сегодня дает максимальное количество строк, а задержка в исполнении операции
показа заказчиков растет с числом строк.

Это бред левых компонент. Стандартные фетчат ровно столько записей, сколько отображается
на экране. Для стратегии first row fast с навигацией по индексу это идеальный случай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006684
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что я напрототипил, и какие нашел грабли:

Скорость рендеринга.
У меня не было ясности что старая дельфовая обертка грида позволяет показать 20тыс строк за секунду в моей среде.
Небольшой тест позволил это проверить, результаты были обнадеживающие - грид достаточно быстрый

Конфигурация списка
По умолчанию выводится 6 колонок, разрешается добавить еще 70, самых эзотерических)
Резалт сет всегда содержит все колонки, многие из которых вычисляемые.

Изолированность изменений
Это был первый большой сюрприз. Оказалось, поп-ап список заказчиков (как адресная книга в аутлуке) использует не только запрос, но и всю дельфи инфраструктуру от большого экрана просмотра/добавления/изменения заказчиков. Я не разобрался все, что она тянет, но там немало. Имя SQL запроса - атрибут типа, поэтому если я хочу менять запрос под свои цели, надо отделять поп-ап выбора заказчика от кода "большого экрана" который позволяет редактирование и подробный анализ.

Испытал пару подходов.
1) склонировал экран редактирования заказчиков, начал выбрасывать все ненужное. Походу рассмотрел архитектуру клиента, довольно умный хлопец его писал. В (теперь отдельном) запросе удалил опциональные колонки. Получил примерно 3 секунды.

2) собрал "с нуля" минимальную форму базового класса с базовыми виджетами позволяющий показать список, но еще отвечающий параметрам архитектуры клиента, чтоб его можно было обозначить как "попап". С тем же запросом получил 1.5-2 секунды. Это около 10К строк в секунду без "ручного кода" в клиенте - только виджеты на форме. Ctrl-F работает.

На этом пока остановился - ограничение скорости заполнения грид контроля в моей среде. На более быстром компе это в 2-3 раза быстрее.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006688
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Это бред левых компонент. Стандартные фетчат ровно столько записей, сколько отображается
на экране. Для стратегии first row fast с навигацией по индексу это идеальный случай.


Левые компоненты вроде бы умеют, хотя еще не проверял, а в проекте они только используются в режиме целиком.

У меня есть требование сохранить поиск по Ctrl-F (это наверное можно извернуться, передав в фильтр и ре-фетч, сообщив серверу критерий поиска, номер выбраной строки и критерий сортировки),

и мне не совсем понятно как будет работать сортировка по колонкам с сохранением текущей строки, я предполагаю компоненты все это сами умеют делать, если им известен PK?
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006689
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Замер 1: исключить сеть как фактор.
...
Вывод 1 : сеть не является фактором, т.к. в один мегабайт помещается 20 тыс строчек, а мегабайт по гигабитам летает быстро.
Феерическая бредятина, полностью игнорирующая задержки. В том числе - задержки (прикладного) протокола.
А ещё есть пропускная способность, измеряемая пакетами в секунду. И которая не зависит от размера пакета.
...
Рейтинг: 0 / 0
Оптимизация интерактивного 3-звенника
    #40006692
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оптимизация интерактивного 3-звенника
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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