2010-04-14 1 views
1

У меня есть high-end архитектура, которая получает много запросов каждую секунду (на самом деле, она может получать много запросов каждые миллисекунды). Архитектура спроектирована таким образом, что некоторые элементы управления полагаются на определенный уникальный идентификатор, назначенный каждому запросу.Стратегии использования последовательностей базы данных?

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

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

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

ответ

1

Использование последовательности обязательно приведет к сериализации вашего приложения. Тем не менее, эти вещи оптимизированы для минимального воздействия. Конечно, мы всегда можем делить вещи сами, объявляя вещи бесполезным образом. Итак, как определяется эта последовательность? У него большой CACHE? Вы указали NO ORDER?

Сказав который ....

Дело в том, что выпрыгивает из вашего вопроса не фраза жирным шрифтом, это предложение перед ним:

«Моя команда только что узнал, увеличение почти 1000% за истекшее время для каждой транзакции, которая составляет , предполагая, что это произошло из-за последовательности . "

Мы все знаем, что делает ASSUME (ну не в этом случае, потому что я ничего не принимаю). Было ли последнее изменение, влияющее на эту последовательность? Если нет, то почему вы все думаете, что это отвечает за внезапный спад в производительности на 1000%? Вместо того, чтобы предполагать (т. Е. Угадывать), возможно, было бы лучше собрать некоторые доказательства. Это время идет куда-то, и вам нужно выяснить, где. Нет смысла настраивать вашу последовательность, если у вас есть условие гонки где-то в вашем коде, или вы сжигаете процессор, ожидающий блокировки, или у вас плохое соединение, которое замедляет запись в SAN и т. Д. И т. Д.

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

+0

Существует команда, посвященная анализу производительности приложения. Мы собрали некоторые данные из профилирования базы данных и профилирования среды. Однако мы не можем быть уверены, что это действительно введение последовательности, которая вызывает большое влияние, потому что инструменты профилирования несколько ограничены. Тем не менее, я попытаюсь удостовериться, что увеличение времени связано с последовательностью. О параметрах последовательности, какие из них следует настроить в параллельном приложении, таком как это? –

0

Одним из возможных подходов к получению идентификаторов, которые могут иметь значение, является использование UUID/GUID. Хотя я не знаю, как требовать, чтобы эти данные генерировались, он определенно не страдает от проблемы сериализации, о которой вы беспокоитесь.