Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выполнение запросов в БД не нагружая сервер
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Суть вопроса вот в чём. Есть сервер, подробности его мне неизвестны (придётся работать с разными серверами, поэтому не думаю, что данные о сервере что-либо прояснят). На сервере есть база IBM DB2 (пока предполагается работа с DB2). К серверу периодически приходят запросы, на которые он должен быстро реагировать и делает это. Мне надо сделать так, чтобы мои запросы сервер обрабатывал без ущерба другим запросам. Т.к. запросы у меня вполне могут быть большими, надо сохранить стабильное функционирование сервера без ущерба для других запросов, не от меня. Дабы они могли выполняться всё так же быстро. Скорость ответа на мои запросы мне не принципиальна. Буду благодарен за любую помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2013, 18:05 |
|
||
|
Выполнение запросов в БД не нагружая сервер
|
|||
|---|---|---|---|
|
#18+
Посмотрите на WLM (workload management). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2013, 10:28 |
|
||
|
Выполнение запросов в БД не нагружая сервер
|
|||
|---|---|---|---|
|
#18+
qizer, В общем виде _в_такой_ постановке задача не решается. Как Константин подсказал, можно посмотреть в сторону Workload Managementa, но его эффективность - вопрос. Никакой раздачей приоритетов не справиться с кардинально неэффективным запросом (запросами) или серьёзной нагрузкой, существенно отличающейся от назначения сервера. Помогут только ограничителные меры, а они, в свою очередь, уже требуют долгой вдумчивой настройки. "В лоб" - завести сервисный класс с пониженными приоритетами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Но проверить, на сколько это изменит влияние ваших запросов на текущую нагрузку сервера можно только экспериментальным путём, для чего хорошо бы уже иметь настроенную систему 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" (и, если не умеют действовать по принципу "попробовать чуть позже", отваливаются), пока СУБД не разберётся с проблемой (автоматически отстрелит и откатит виновника). Если "виновник" успел к этому времени много "наколбасить" (в случае больших запросов на изменения), то откатываться может _очень_ долго. В общем, чтобы "всё было хорошо", надо а) чётко представлять текущую нагрузку, как запросы будут работать, и придерживаться некоторых правил; б) работать в тесном контакте с админами тех баз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2013, 17:18 |
|
||
|
Выполнение запросов в БД не нагружая сервер
|
|||
|---|---|---|---|
|
#18+
Константин КрасновПосмотрите на WLM (workload management). Спасибо. Для меня это новая информация, буду вникать в это. to CawaSPb Спасибо за подробный ответ, рад был его увидеть ( : По поводу нагрузки - запросы будут примитивными, в основном. Такие как получение списка схем/таблиц/данных из базы/схемы/таблицы. Основной нагрузкой, думаю, будет получение содержимого самих таблиц, которые могут содержать в себе более тысячи записей. Была идея _подобрать_ подобрать количество получаемых данных, через fetch , тем самым снизив нагрузку, но появляются новые вопросы и, поэтому, в поисках ещё возможных решений, которые будут лучше. Про работу через PREFETCH уточню, может и используют. Тогда, как я понимаю, это облегчит задачу, выставляя на свои запросы меньший приоритет(? правильно ли я понял). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2013, 00:58 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=43&tid=1601567]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
144ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 245ms |

| 0 / 0 |
