У нас есть база данных аудита (oracle), которая содержит информацию о мониторинге всех операций, выполняемых службами (около 100), развернутых на серверах приложений. Как вы можете себе представить, база данных аудита действительно огромна из-за большого количества запросов, которые обслуживают службы. И единственная транзакция записи, которая происходит в этой базе данных, это сервисы, записывающие информацию аудита в режиме реального времени.
Поскольку база данных аудита начала расти (более миллиона записей в день), запрос необходимых данных (например, select all errors occurred with service A for requests between start date and end date
) быстро стал почти невозможным.
Чтобы решить эту проблему, некоторые «умные дети» решили создать пакетное задание, которое будет копировать данные из базы данных в другую базу данных (скажем, audit_archives) и удалять записи, так что данные аудита только за 2 дня сохраняются в аудите базы данных.
Изначально это выглядело аккуратно, но всякий раз, когда запускается «пакетный» процесс, процесс аудита, который вставляет данные в базу данных аудита, начинает становиться очень медленным - и иногда «пакетный» процесс также завершается неудачей из-за конфликта базы данных.
Как лучше спроектировать этот сценарий так, чтобы вышеупомянутая архивация выполнялась наиболее эффективным образом, чтобы обеспечить минимальное влияние на процесс аудита и пакет?