Что именно вы имеете в виду под «заказал» в этом контексте?
По умолчанию каждый узел кластера имеет отдельный кэш порядковых номеров. Таким образом, узел 1 может выдавать значения 1-100, тогда как узел 2 передает значения 101-200. Значения, возвращаемые с одного узла, являются последовательными, но сеанс A на узле 1 может получить значение 15, тогда как сеанс B на узле 2 получает значение 107, поэтому значения, возвращаемые через сеансы, выглядят не по порядку.
Если вы укажете, что последовательность должна быть заказана, вы в основном побеждаете цель кеша последовательности, так как Oracle теперь должна связываться между узлами каждый раз, когда вы запрашиваете новое значение последовательности. Это может создать достойный объем служебных расходов. Если вы используете последовательность как своего рода метку времени, это может быть необходимо, но это обычно нежелательно.
Разница накладных расходов в практическом плане будет очень зависимой от приложения - она будет неизмеримо малой для некоторых приложений и значительной проблемой для других. Также будет способствовать количество узлов RAC, скорость межсоединения и количество трафика межсетевого соединения. И поскольку это прежде всего проблема масштабируемости, практический эффект будет ограничивать, насколько хорошо масштабируется ваше приложение, которое по своей сути является нелинейным. Удвоение объема транзакции, обрабатываемого вашим приложением, будет намного больше, чем удвоить накладные расходы.
Если вы укажете NOCACHE, выбор ORDER или NOORDER в основном не имеет значения. Если вы укажете ORDER, выбор CACHE или NOCACHE в основном не имеет значения. Таким образом, CACHE NOORDER является наиболее эффективным, остальные три относительно взаимозаменяемы. Все они будут включать координацию между узлами и сетевой трафик каждый раз, когда вы запрашиваете значение последовательности, которое, очевидно, является потенциальным узким местом.
Обычно желательно добавить столбец TIMESTAMP в таблицу, чтобы сохранить фактическую метку времени, а не полагаться на последовательность, чтобы обеспечить порядок метки времени.
Спасибо, Джастин, мне нужно поддерживать порядок последовательности в соответствии с запросом. Из Oracle: ORDER Укажите ORDER, чтобы гарантировать, что порядковые номера сгенерированы в порядке запроса. Этот раздел полезен, если вы используете порядковые номера как временные метки. Гарантийный заказ обычно не важен для последовательностей, используемых для генерации первичных ключей. – odew
Тогда указание кеша, скорее всего, бессмысленно: я бы просто пошел вперед и задал NOCACHE и согласился с тем, что вы добавите накладные расходы для генерации последовательности. Вы захотите проверить, как ваше приложение ведет себя под нагрузкой на RAC, чтобы гарантировать, что эти дополнительные накладные расходы приемлемы. –
У меня есть приложение, которое использует последовательности как своего рода отметки времени. Я хочу знать, есть ли у кого-то опыт работы с параметрами NOCAHCE, CACHE, ORDER, NOORDER и служебными различиями в каждом случае? – odew