Рекомендации Oracle для больших объемов записи и низкого объема чтения - PullRequest
2 голосов
/ 11 октября 2008

Есть ли в Интернете общие рекомендации о том, как настроить оракул для выполнения большого количества вставок и небольшого числа операций чтения?

Все ответы ниже являются довольно хорошими рекомендациями. Я должен уточнить следующие вещи. Я использую 10g, и это абсолютное требование, чтобы мы использовали Oracle. Меня также больше интересуют параметры экземпляра Oracle для настройки (возможно, некоторые другие политики блокировки).

Ответы [ 5 ]

2 голосов
/ 11 октября 2008

Позвольте мне предположить, что вы хотите сделать слишком большое количество вставок, так что вы просто хотите просто игнорировать все другие виды операций, просто чтобы эти вставки завершались без проблем.

Во-первых, вы полностью исключили другие типы баз данных? Существуют такие системы, как промышленные базы данных, которые очень хорошо справляются с огромным количеством вставок, обычно используемых для получения и хранения данных от оборудования, которое измеряет что-то в заводской среде. Oracle - это реляционная база данных, которая может не подходить для ваших нужд.

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

Оптимальный способ сделать это - сделать следующее:

  1. вообще не добавляйте индексы в эту таблицу, если вам нужен первичный ключ, это единственный индекс, который вам нужен
  2. если вам нужно выполнить чтение по этой таблице, подумайте о том, чтобы иметь теневую таблицу с индексами, по которым вы выполняете чтение, поиск и агрегирование. Если это не нужно обновлять с точностью до миллисекунды, рассмотрите периодическое пакетное задание, чтобы обновить его данными из главной таблицы. Это будет как можно меньше мешать главной таблице с блокировками чтения
  3. Убедитесь, что на вашем сервере установлены быстрые диски. Транзакционные операции записи обычно связаны с диском в какой-то момент, поэтому убедитесь, что это небольшое узкое место, которое вы можете получить.
  4. Если ваше приложение собирает данные из многих входящих источников, рассмотрите возможность добавления слоя перед базой данных, который будет сводить к минимуму количество одновременных соединений и, следовательно, транзакций в эту таблицу. Если вы получите большое количество блокировок записи на одну и ту же страницу для базы данных Oracle, в конечном итоге ваша производительность пострадает.

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

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

1 голос
/ 11 октября 2008

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

Отсутствие индексов, очевидно, повредит вашей производительности SELECT, но, похоже, это не ваша главная задача.

0 голосов
/ 22 января 2009

Несколько предложений для вас, чтобы посмотреть дальше: -

  • прямая траектория нагрузки
  • блок сжатия
0 голосов
/ 12 октября 2008

Я собираюсь предложить вам ответить на сайт Тома Кайта, http://asktom.oracle.com. Обычно вы можете найти ответ там. В противном случае попробуйте Форумы Oracle .

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

Я сделал быстрый гугл, настройка сайта: oracle.com напиши, и нашел это Функции оптимизации написания OracleAS TopLink . Я понимаю, что вы, возможно, не используете TopLink, но у него могут быть хорошие советы. Ключевые слова, которые вы хотите использовать: настройка, производительность, вставка (и), улучшение. Также через в технологии, которую вы используете, как Java / C ++ / и т. Д.

Другие советы, которые вы можете попробовать:

  • использование хранимых процедур или более эффективное их использование.
  • настройка оборудования вашего сервера. Более быстрые жесткие диски или определенный RAID-массив, возможно, больше процессоров.
  • Спросите у Тома ветку - здесь есть несколько приятных комментариев, а также ссылки на сайт Фаулера

Вероятно, вам придется начать анализ производительности для ваших запросов / реализаций, чтобы найти подходящее место для каждого из них. Я бы хотел, чтобы у меня был легкий ответ для вас. Удачи!

0 голосов
/ 11 октября 2008

О каком приложении мы говорим? Какая версия Oracle?

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

В зависимости от версии Oracle и типа приложения вы также можете включить сжатие таблицы. Вставки, как правило, дешевы с точки зрения ЦП, поэтому, вероятно, имеется достаточно ЦП, чтобы выполнить сжатие, что может существенно уменьшить количество требуемых операций ввода-вывода, что обычно является вашим узким местом.

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