Как минимизировать накладные расходы на транзакции в Oracle? - PullRequest
1 голос
/ 04 ноября 2008

Я должен одновременно загружать данные в таблицу и выполнять запросы к ней. Из-за характера данных, я могу обменять целостность на производительность. Как я могу минимизировать накладные расходы на транзакции?

К сожалению, альтернативы, такие как MySQL, не могут быть использованы (по нетехническим причинам).

Ответы [ 5 ]

1 голос
/ 29 июня 2011

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

т.е. изменить ограничения набора сеансов = отложено;

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

1 голос
/ 04 ноября 2008

Возможно, я что-то упускаю, но поскольку в Oracle читатели не блокируют писателей, а писатели не блокируют читателей, какую именно проблему вы пытаетесь решить?

С точки зрения сеансов, которые читают данные, сеансы, которые выполняют вставки, на самом деле не добавляют никаких накладных расходов (обновления могут добавить немного накладных расходов, поскольку читателю придется просматривать данные в табличном пространстве UNDO в порядке восстановить согласованное с прочтением представление данных). С точки зрения сеансов, которые вставляют данные, сеансы, которые выполняют чтение, на самом деле не добавляют никаких накладных расходов. Конечно, ваша система в целом может иметь узкое место, которое заставляет различные сеансы бороться за ресурсы (т. Е. Если ваши вставки используют до 100% доступной пропускной способности ввода / вывода, это приведет к замедлению запросов, которые должны делать физический ввод-вывод), но это не имеет прямого отношения к типу операций, выполняемых различными сеансами - вы можете заполнить подсистему ввода-вывода кучей сообщающих пользователей так же легко, как и кучей вставок .

1 голос
/ 04 ноября 2008

Помимо общих методов оптимизации, которые применяются ко всем базам данных, таких как устранение полного сканирования таблиц, удаление неиспользуемых или неэффективных индексов и т. Д., И т. Д., Вот несколько вещей, которые вы можете сделать.

  1. Запуск в режиме No Archive Log. Это жертвует восстановимостью для скорости.
  2. Для вставок используйте /*+ APPEND */ подсказку . Это помещает данные в таблицу над верхней отметкой, которая не создает отката. Недостатком является то, что существующее свободное пространство не используется.
  3. С аппаратной стороны, RAID 0 на большем количестве дисков меньшего размера даст вам лучшую производительность при вставке, но в зависимости от вашего использования RAID 10 с его лучшим чтением производительность может обеспечить лучшее соответствие.

При этом я не думаю, что вы сильно выиграете от любого из этих изменений.

1 голос
/ 04 ноября 2008

Вы хотите, чтобы изоляция транзакции считалась незафиксированной. Я не рекомендую это, но это то, что вы просили:)

Это позволит вам нарушить изоляцию транзакции и прочитать незафиксированные вставленные данные.

Пожалуйста, прочитайте эту статью Ask Tom: http://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html.

ОБНОВЛЕНИЕ: Я на самом деле ошибался, Oracle на самом деле не поддерживает уровень изоляции чтения без фиксации, они просто упоминают его:).

0 голосов
/ 12 ноября 2008

Какие объемы производительности вы смотрите? Являются ли вкладыши пакетными или многочисленными маленькими?

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

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