powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выполнение запросов в БД не нагружая сервер
4 сообщений из 4, страница 1 из 1
Выполнение запросов в БД не нагружая сервер
    #38105334
qizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Суть вопроса вот в чём. Есть сервер, подробности его мне неизвестны (придётся работать с разными серверами, поэтому не думаю, что данные о сервере что-либо прояснят). На сервере есть база IBM DB2 (пока предполагается работа с DB2). К серверу периодически приходят запросы, на которые он должен быстро реагировать и делает это.

Мне надо сделать так, чтобы мои запросы сервер обрабатывал без ущерба другим запросам. Т.к. запросы у меня вполне могут быть большими, надо сохранить стабильное функционирование сервера без ущерба для других запросов, не от меня. Дабы они могли выполняться всё так же быстро. Скорость ответа на мои запросы мне не принципиальна.

Буду благодарен за любую помощь.
...
Рейтинг: 0 / 0
Выполнение запросов в БД не нагружая сервер
    #38105929
Посмотрите на WLM (workload management).
...
Рейтинг: 0 / 0
Выполнение запросов в БД не нагружая сервер
    #38106803
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qizer,

В общем виде _в_такой_ постановке задача не решается.

Как Константин подсказал, можно посмотреть в сторону Workload Managementa, но его эффективность - вопрос. Никакой раздачей приоритетов не справиться с кардинально неэффективным запросом (запросами) или серьёзной нагрузкой, существенно отличающейся от назначения сервера. Помогут только ограничителные меры, а они, в свою очередь, уже требуют долгой вдумчивой настройки.

"В лоб" - завести сервисный класс с пониженными приоритетами:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE SERVICE CLASS LOWPRIORITY_CLASS
  AGENT PRIORITY 20    -- "-6" for Window servers
  PREFETCH PRIORITY LOW
  BUFFERPOOL PRIORITY LOW;

CREATE WORKLOAD MY_COOL_LOWPRIORITY_WORKLOAD
  APPLNAME('MyApplication')
  SYSTEM_USER('myusername')
  SERVICE CLASS LOWPRIORITY_CLASS;


Но проверить, на сколько это изменит влияние ваших запросов на текущую нагрузку сервера можно только экспериментальным путём, для чего хорошо бы уже иметь настроенную систему workload managementa просто для того, чтобы получить картину нагрузки/производительности, разбитую по разным классам работ по отдельности. А это уже большой и долгий процесс.

Тут есть ещё важный дополнительный фатор:
В целом на приоритет I/O повлиять нельзя (по крайней мере пока в AIX/Linux WLM не добавили возможность контролировать приоритет I/O ну уровне threads). Можно повлиять только на приоритет чтения в режиме PREFETCH (чтобы оно в очереди таких запросов задвигалось в конец) - три уровня (LOW, MEDIUM, HIGH).
Если остальная нагрузка идёт в основном не в PREFETCH режиме (OLTP система, что похоже на ваш случай - "К серверу периодически приходят запросы, на которые он должен быстро реагировать и делает это."), то они будут просто идти в параллель, и мы никак не сможем повлиять на их взаимную приоритезацию, и, соответственно, остальная I/O активность будет проседать. На сколько - вопрос мониторинга и конкретной нагрузки.


Два серьёзных дополнительных момента:
1. Как только мы запихиваем нагрузку в отличный от дефолтового сервисный класс, он сразу перестаёт быть предметом рассмотрения DB2 governor'а и Query Patroller'а.
Т.е. если они используются для контроля активностей, использование WLM не подойдёт.

2. На OLTP системах с большим количеством запросов на изменения можно "в лёт" переполнить журналы транзакций просто заблокировав их на часик/другой.
Картина примерно следующая:
- наш запрос открывает транзакцию, что-то изменяет в данных, и это попадает в журнал;
- пока наш большой запрос с низким приоритетом долго-долго выполняется, журнал остаётся "активным" (содержащим данные активной транзакции);
- пока журнал активен, ни он, _ни_последующие_ (для соблюдения целостности архива журналов) в архив не отправляются;
- количество журналов "текущих" транзакций растёт, пока не упираемся в заданное ограничение;
- все встаёт колом, приложения на любые действия получают отлуп "log is full" (и, если не умеют действовать по принципу "попробовать чуть позже", отваливаются), пока СУБД не разберётся с проблемой (автоматически отстрелит и откатит виновника).
Если "виновник" успел к этому времени много "наколбасить" (в случае больших запросов на изменения), то откатываться может _очень_ долго.


В общем, чтобы "всё было хорошо", надо
а) чётко представлять текущую нагрузку, как запросы будут работать, и придерживаться некоторых правил;
б) работать в тесном контакте с админами тех баз.
...
Рейтинг: 0 / 0
Выполнение запросов в БД не нагружая сервер
    #38108039
qizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Константин КрасновПосмотрите на WLM (workload management).
Спасибо. Для меня это новая информация, буду вникать в это.

to CawaSPb
Спасибо за подробный ответ, рад был его увидеть ( :

По поводу нагрузки - запросы будут примитивными, в основном. Такие как получение списка схем/таблиц/данных из базы/схемы/таблицы. Основной нагрузкой, думаю, будет получение содержимого самих таблиц, которые могут содержать в себе более тысячи записей.
Была идея _подобрать_ подобрать количество получаемых данных, через fetch , тем самым снизив нагрузку, но появляются новые вопросы и, поэтому, в поисках ещё возможных решений, которые будут лучше.
Про работу через PREFETCH уточню, может и используют. Тогда, как я понимаю, это облегчит задачу, выставляя на свои запросы меньший приоритет(? правильно ли я понял).
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выполнение запросов в БД не нагружая сервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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