Отзывчивость тем, связанных с пользователем - PullRequest
0 голосов
/ 18 октября 2011

Наше Java-приложение часто выполняет тяжелые запросы к базам данных.Поскольку Java-процесс и Oracle-процесс выполняются на одном и том же компьютере, эти сложные запросы могут потреблять столько ресурсов ЦП или ввода-вывода, что важные аппликативные потоки, то есть пользовательские запросы, перестают отвечать.(или соединения или пулы соединений) в Oracle.Мне известна функция Oracle Resource Manager, но у нас нет лицензии на ее использование.

Если расстановка приоритетов невозможна, могут ли транзакции быть приостановлены или даже убиты в середине?

Мыработают на Linux, J2EE, hibernate / sql

Ответы [ 3 ]

1 голос
/ 18 октября 2011

Я верю, что вы не пытаетесь выполнить эти операции с БД из потока диспетчеризации событий пользовательского интерфейса:)

Вы можете попробовать связываться с приоритетами потоков;используйте более низкий приоритет для потоков БД, чтобы пользовательский интерфейс оставался отзывчивым.Однако это может быть неэффективно и может иметь другие проблемы, такие как инверсия приоритетов.

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

1 голос
/ 18 октября 2011

Мои 2 цента стоит: старайтесь контролировать приоритеты на уровне Java (т.е. приложения), а не полагаться на Oracle. Это можно сделать с помощью PriorityBlockingQueue, из которого потоки потребляют запросы к базе данных.

0 голосов
/ 18 октября 2011

На стороне Oracle я бы определенно не рекомендовал возиться с приоритетами процессов сервера Oracle. Основная причина в том, что в любой момент процесс Oracle может удерживать блокировку или защелку на каком-либо элементе SGA. Если вы снизите приоритет процесса, и он удерживает блокировки и / или защелки, вы можете в конечном итоге повлиять на производительность других процессов сервера Oracle, поскольку они стоят в очереди за держателем блокировки / защелки, который имеет низкий приоритет, и теперь может нет процессора.

Сам Oracle позволяет некоторым фоновым процессам запускаться с более высоким приоритетом, но это благодаря своей конструкции и функциональности, встроенной в Oracle. Я бы не стал связываться с приоритетами отдельных серверных процессов.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...