Глава 3 - СВОЙСТВА ТРАНЗАКЦИИ И СИСТЕМЫ   

   

Содержание:


3.1 Свойства ACID (атомарности, непротиворечивости, изолированности, долговечности)

Цель данного раздела – описать в произвольной форме ACID свойства и точно определить серию тестов, которые необходимо выполнить.

3.1.1 Во время выполнения контрольного тестирования ТС, выполняющие транзакцию системы должны поддерживать ACID свойства.

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

Комментарий: Эти тесты предназначены для того, чтобы показать, что ТС во время измерений производительности придерживается принципов ACID. Данные тесты не являются проверкой полного соответствия качеству.

3.1.3 Все описанные методы необходимы для того, чтобы удостовериться, что во время тестирования и 8ми часового стационарного состояния задействованы все ACID свойства. Например, если ТС полагается на логи отмены, то запись в логи должна быть включена для всех транзакций, в том числе и тех, которые, согласно профилю транзакции, не предусматривают отката назад. После того, как на распределенной системе данное контрольное тестирование было выполнено, должны быть проведены дополнительные тестирования, описанные в этой главе. Нужно удостовериться, что домашние и удаленные транзакции, включая те, которые выполняются в двух и более узлах, удовлетворяют ACID свойствам, (понятия домашней и удаленной транзакций описаны 2.4.1.7, 2.4.1.8, 2.5.1.5 и 2.5.1.6).

3.1.4 ACID тесты не проверяют все типы транзакций TPC-C, но все они должны соответствовать ACID свойствам.

3.1.5 Если итоги работы системы не отображены, то лица, составляющие отчет о результатах ТРС тестирования, могут провести дополнительное тестирование системы. При этом необходимо предусмотреть, чтобы данные системы использовали одно и то же программное обеспечение (например, ОС, СУБД или программу транзакций). Например, данный пункт применим для множества систем одной и той же производственной линии. Тем не менее, тест на долговечность, описанный в пунктах 3.5.3.2 и 3.5.3.3, должен быть выполнен для всех без исключения систем. Все Отчеты о полном описании деталей тестирования должны содержать сведения о системах, использованных при проверке ACID требований, а так же информацию о выполненных ACID тестах, включая полученные в ходе выполнения результаты.

Комментарий: Все требуемые ACID тесты должны выполняться только на заново настроенных устройствах с двумя устойчивыми состояниями, даже если они не имеют каких либо изменений в коде.

3.2 Требования Атомарности

3.2.1 Определение свойства Атомарности

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

3.2.2 Тесты на Атомарность

3.2.2.1 Выполните транзакцию Оплата для случайных склада, точки продаж и заказчика (выбранному по номеру, как сказано в пункте 2.5.1.2), и проверьте, что записи в таблицах СКЛАД, ТОЧКА ПРОДАЖИ и ЗАКАЗЧИК изменились соответствующим образом.

3.2.2.2 Выполните транзакцию Оплата для случайных склада, точки продаж и заказчика (выбранному по номеру, как сказано в пункте 2.5.1.2) и вместо ВЫПОЛНИТЬ транзакцию, нажмите ОТМЕНИТЬ транзакцию. Проверьте, что записи в таблицах СКЛАД, ТОЧКА ПРОДАЖИ и ЗАКАЗЧИК НЕ изменились.

3.3 Требования Непротиворечивости

3.3.1 Определение свойства Непротиворечивости

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

3.3.2 Условия Непротиворечивости

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

При заполнении базы данных должны соблюдаться некоторые условия (см. параграф 4.3) , тогда она считается непрерывной. Если создаются копии данных, то этим условиям должна соответствовать каждая из них. Однако, в ходе выполнения теста нужно показать соблюдение только первых 4 условий. В связи с ростом затрачиваемого на тестирование времени для остальных 8ми условий этого делать не обязательно.

Комментарий 1: Данные 4 условия отобраны таким образом, чтобы они применялись в отношении более объемных приложений, которые включают в себя 5 TPC-C транзакций (см. параграф 1.1). Выполнение условия не зависит от времени работы программы. Например, условие I_PRICE не входит в этот список, т.к. оно может меняться в больших прикладных программах.

Комментарий 2: Для условий Непрерывности 2 и 4 (пункты 3.3.2.2 и 3.3.2.4) достаточно выбрать первый, последний и два случайных склада.

3.3.2.1 Условие Непрерывности 1.

Для каждого склада, определяемого значением W_ID = D_W_ID, содержимое таблиц СКЛАД и ТОЧКА ПРОДАЖ, должно удовлетворять соотношению:

W_YTD = sum(D_YTD)

3.3.2.2 Условие Непрерывности 2

Для каждой точки продаж, определяемой значениями D_W_ID = O_W_ID = NO_W_ID и D_ID = O_D_ID = NO_D_ID, содержимое таблиц ТОЧКА ПРОДАЖИ, ЗАКАЗ и НОВЫЙ ЗАКАЗ должно удовлетворять соотношению:

D_NEXT_O_ID - 1 = max(O_ID) = max(NO_O_ID)

Это условие не применяется к таблице НОВЫЙ ЗАКАЗ для любой из точек продаж, у которой нет ни одного невыполненного заказа (т.е., число рядов равно нулю).

3.3.2.3 Условие Непрерывности 3

Для каждой точки продаж, определяемой значениями NO_W_ID и NO_D_ID, содержимое таблицы НОВЫЙ ЗАКАЗ должно удовлетворять соотношению:

Max (NO_O_ID) - min(NO_O_ID) + 1 = [число рядов в таблице НОВЫЙ ЗАКАЗ для данной точки продаж]

Это условие не применяется к точкам продаж, у которых нет ни одного невыполненного заказа (т.е., число рядов равно нулю).

3.3.2.4 Условие Непрерывности 4

Для каждой точки продаж, определяемой значениями O_W_ID = OL_W_ID и O_D_ID = OL_D_ID, содержимое таблиц ЗАКАЗ и ПОЗИЦИЯ В ЗАКАЗЕ должно удовлетворять соотношению:

sum(O_OL_CNT) = [число рядов в таблице ПОЗИЦИЯ В ЗАКАЗЕ для данной точки продаж]

3.3.2.5 Условие Непрерывности 5

Если в таблице НОВЫЙ ЗАКАЗ есть соответствующий ряд, определяемый значением (O_W_ID, O_D_ID, O_ID) = (NO_W_ID, NO_D_ID, NO_O_ID), то для каждого ряда таблицы ЗАКАЗ значение O_CARRIER_ID устанавливается равным нулю.

3.3.2.6 Условие Непрерывности 6

Для соответствующего заказа, определяемого значениями (O_W_ID, O_D_ID, O_ID) = (OL_W_ID, OL_D_ID, OL_O_ID), в каждом ряду таблицы ЗАКАЗ величина O_OL_CNT должна быть равна числу рядов в таблице ПОЗИЦИЯ В ЗАКАЗЕ.

3.3.2.7 Условие Непрерывности 7

Если в соответствующем ряду таблицы ЗАКАЗ, определяемом значением (O_W_ID, O_D_ID, O_ID) = (OL_W_ID, OL_D_ID, OL_O_ID), величина O_CARRIER_ID равна нулю, то для всех рядов таблицы ПОЗИЦИЯ В ЗАКАЗЕ значение OL_DELIVERY_D устанавливается в нулевую дату/время.

3.3.2.8 Условие Непрерывности 8

Для каждого склада, определяемого значением W_ID = H_W_ID, содержимое таблиц СКЛАД и ИСТОРИЯ должно удовлетворять соотношению:

W_YTD = sum(H_AMOUNT)

3.3.2.9 Условие Непрерывности 9

Для каждой точки продаж, определяемой значениями (D_W_ID, D_ID) = (H_W_ID, H_D_ID), содержимое таблиц ТОЧКА ПРОДАЖ и ИСТОРИЯ должно удовлетворять соотношению:

D_YTD = sum(H_AMOUNT)

3.3.2.10 Условие Непрерывности 10

Содержимое таблиц ЗАКАЗЧИК, ИСТОРИЯ, ЗАКАЗ и ПОЗИЦИЯ В ЗАКАЗЕ должно удовлетворять соотношению:

C_BALANCE = sum(OL_AMOUNT) - sum(H_AMOUNT)

где:

H_AMOUNT выбирается значениями (C_W_ID, C_D_ID, C_ID) = (H_C_W_ID, H_C_D_ID, H_C_ID)

и

OL_AMOUNT выбирается значениями:

(OL_W_ID, OL_D_ID, OL_O_ID) = (O_W_ID, O_D_ID, O_ID) и

(O_W_ID, O_D_ID, O_C_ID) = (C_W_ID, C_D_ID, C_ID) и

(OL_DELIVERY_D – не нулевое значение)

3.3.2.11 Условие Непрерывности 11

Для каждой точки продаж, определяемой значениями (O_W_ID, O_D_ID) = (NO_W_ID, NO_D_ID) = (C_W_ID, C_D_ID), содержимое таблиц ЗАКАЗЧИК, ЗАКАЗ и НОВЫЙ ЗАКАЗ должно удовлетворять соотношению:

(count(*) from ORDER) - (count(*) from NEW-ORDER) = 2100

3.3.2.12 Условие Непрерывности 12

Для любого случайно выбранного заказчика содержимое таблиц ЗАКАЗЧИК и ПОЗИЦИЯ В ЗАКАЗЕ должно удовлетворять соотношению:

C_BALANCE + C_YTD_PAYMENT = sum(OL_AMOUNT)

где OL_DELIVERY_D – это не нулевое значение даты/времени.

3.3.3 Тесты на Непрерывность

3.3.3.1 Путем проверки соответствия базы данных условиям непрерывности, описанным в пунктах от 3.3.2.1 до 3.3.2.4, нужно удостовериться, что она изначально непрерывна. Следует достаточно подробно описать используемые действия.

3.3.3.2 Сразу же после того, как процесс проверки, описанный в пункте 3.3.3.1, завершится, нужно сделать следующее:

  1. Чтобы передать транзакцию в ТС воспользуйтесь стандартной процедурой передачи. Скорость выполнения транзакции должна составлять, по крайней мере, 90% от заявленной величины, а также соответствовать всем остальным требованиям заявленного интервала измерений (см. параграф 5.5). Лицо, проводящее тест, должно включить в этот интервал хотя бы одну контрольную точку (как сказано в пункте 5.5.2.2). Тестируемая система должна работать при такой скорости как минимум 5 минут.

  2. Остановите передачу транзакции в ТС и повторите этапы проверки, описанные в пункте 3.3.3.1. После применения этих транзакций база данных все еще должна быть непрерывной. Условие Непрерывности 4 должно быть проверено только для добавленных в таблицы ЗАКАЗ и ПОЗИЦИЯ В ЗАКАЗЕ рядов (с момента предыдущей проверки).

3.4 Требования Изолированности

3.4.1 Определение Свойства Изолированности

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

Р0 ("Грязная запись"): Транзакция базы данных Т1 считывает элемент базы и изменяет его. Затем транзакция базы данных Т2 изменяет или удаляет этот элемент, и выполняет операцию СОВЕРШИТЬ. Если бы теперь Т1 попыталась заново считать этот элемент, то она могла бы получить его измененное значение или же обнаружить, что этот элемент был удален.

Р1 ("Грязное чтение"): Транзакция Т1 изменяет элемент данных. Затем, прежде, чем Т1 выполнит операцию СОВЕРШИТЬ, транзакция Т2 считывает его. Если бы Т1 выполнила операцию ОТМЕНИТЬ, то Т2 считала бы значение, которое никогда не передавалось либо вообще не существовало.

Р2 ("Неповторяемое Чтение"): Транзакция Т1 считывает элемент данных. Затем транзакция Т2 изменяет или удаляет этот элемент, выполняя операцию СОВЕРШИТЬ. Если бы теперь Т1 попыталась прочесть этот элемент заново, то она могла бы получить либо измененное значение, либо обнаружить, что этот элемент удален.

Р3 ("Фантом"): Транзакция Т1 считывает набор значений N, которые удовлетворяют некоторому "условию поиска". Затем транзакция Т2 выполняет действия по генерации одного или более элементов, удовлетворяющих "условию поиска", используемому транзакцией Т1. Если бы теперь транзакция Т1 повторила изначальное считывание с тем же самым "условием поиска", она бы получила набор совершенно других значений.

Каждая из выше упомянутых транзакций Т1 и Т2 должна быть либо выполнена до конца, либо вообще не должна выполняться.

Следующая таблица описывает 4 уровня изолированности, при учете явлений Р0, Р1, Р2 и Р3.

Следующие термины означают:

T1 = Транзакция Новый Заказ
T2 = Транзакция Оплата
T3 = Транзакция Доставка
T4 = Транзакция Состояние Заказа
T5 = Транзакция Уровень Запасов
Tn = Любая произвольная транзакция

Даже если произвольная транзакция Tn не выполняет "грязной записи".

Следующая таблица описывает требования изолированности, которые должны быть соблюдены TPC-C транзакциями.

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

3.4.2 Тесты на Изолированность

Проверка на изолированность для условно блокирующих систем должна проводиться согласно приведенной ниже инструкции. Системам, использующим другие схемы изоляции, могут потребоваться иные технологии проверки. Ответственность за описание этих технологий и тестирование на их основе полностью лежит на том, кто их проводит. Если используются схемы изоляции, отличные от условно блокирующей, то все детали тестирования на их основе должны быть подробно изложены. (Примеры других технологий проверки представлены в Тесте на Изолированность 7, пункт 3.4.2.7).

3.4.2.1 Тест на Изолированность 1

Данный тест демонстрирует изолированность для конфликтов чтение-запись транзакций Состояние Заказа и Новый Заказ. Выполните следующее:

  1. Запустите транзакцию Новый Заказ Т1.

  2. Немедленно остановите транзакцию Т1 до выполнения операции СОВЕРШИТЬ.

  3. Для того же заказчика, что и в Т1, запустите транзакцию Состояние Заказа Т2. Транзакция Т2 попытается считать данные о заказе, созданном транзакцией Т1.

  4. Убедитесь, что транзакция Т2 находится в состоянии ожидания.

  5. Позвольте транзакции Т1 завершиться. Т2 также должна завершиться.

  6. Убедитесь, что результаты Т2 соответствуют данным, введенным в Т1.

3.4.2.2 Тест на Изолированность 2

Данный тест демонстрирует изолированность для конфликтов чтение-запись транзакций Состояние Заказа и Новый Заказ при условии, что транзакция Новый Заказ отменена. Выполните следующее:

  1. Для случайно выбранного заказчика выполните транзакцию Состояние Заказа Т0. Пусть Т0 завершится.

  2. Для того же заказчика, что и в Т0, запустите транзакцию Новый Заказ Т1.

  3. Немедленно, до выполнения операции СОВЕРШИТЬ, остановите транзакцию Т1.

  4. Для того же заказчика, что и в Т0, запустите транзакцию Новый Заказ Т2. Транзакция Т2 попытается считать данные о заказе, созданные Т1.

  5. Убедитесь, что транзакция Т2 находится в состоянии ожидания.

  6. Отмените транзакцию Т1. Теперь Т2 должна завершиться.

  7. Убедитесь, что данные, возвращенные из Т2, соответствуют данным, возвращенным Т0.

3.4.2.3 Тест на Изолированность 3

Данный тест демонстрирует изолированность для конфликтов чтение-запись транзакций Новый Заказ. Выполните следующее:

  1. Запустите транзакцию Новый Заказ Т1.

  2. До выполнения операции СОВЕРШИТЬ остановите транзакцию Т1.

  3. Для того же заказчика, что и в Т1, запустите новую транзакцию Новый Заказ Т2

  4. Убедитесь, что транзакция Т2 находится в состоянии ожидания.

  5. Позвольте транзакции Т1 завершиться. Т2 также должна завершиться.

  6. Убедитесь, что номер заказа, возвращенный для Т2, больше, чем для Т1. Убедитесь, что значение of D_NEXT_O_ID отражает результаты и Т1, и Т2, т.е., оно было увеличено на 2 и на единицу больше, чем номер заказа для Т2.

3.4.2.4 Тест на Изолированность 4

Данный тест демонстрирует изолированность для конфликтов чтение-запись 2х транзакций Новый Заказ, при условии, что одна из них отменена. Выполните следующее:

  1. Запустите транзакцию Новый Заказ Т1, в которой имеется неправильный номер товара.

  2. Еще до выполнения операции ОТМЕНА, остановите транзакцию Т1.

  3. Для заказчика, использованного в Т1 запустите новую транзакцию Новый Заказ Т2.

  4. Убедитесь, что транзакция Т2 находится в состоянии ожидания.

  5. Позвольте транзакции Т1 завершиться. Сразу должна завершиться и транзакция Т2.

  6. Убедитесь, что номер заказа для Т2 на единицу больше, чем номер предыдущего заказа. Убедитесь, что значение D_NEXT_O_ID отражает только результат Т2, т.е., увеличено на 1 и больше, чем для Т2 на единицу.

3.4.2.5 Тест на Изолированность 5

Данный тест демонстрирует изолированность для конфликтов чтение-запись транзакций Оплата и Доставка. Выполните следующее:

  1. Запустите транзакцию Доставка Т1.

  2. До выполнения операции СОВЕРШИТЬ остановите транзакцию Т1.

  3. Для заказчика из Т1, для которого заказ выполняется, запустите транзакцию Оплата Т2.

  4. Убедитесь, что транзакция Т2 находится в состоянии ожидания.

  5. Позвольте транзакции Т1 завершиться. Сразу транзакция Т2 должна завершиться.

  6. Убедитесь, что C_BALANCE отражает результат и Т1, и Т2.

Комментарий: Если транзакция Доставка выполняется посредством набора различных транзакций базы данных, то Т1 п. 6 может считаться одной из этих транзакций.

3.4.2.6 Тест на Изолированность 6

Данный тест демонстрирует изолированность для конфликтов чтение-запись транзакций Оплата и Доставка, при условии, что транзакция Доставка отменена. Выполните следующее:

  1. Запустите транзакцию Доставка Т1.

  2. Немедленно, до выполнения операции СОВЕРШИТЬ, остановите транзакцию Т1.

  3. Для заказчика из Т1, для которого заказ выполняется, запустите транзакцию Оплата Т2.

  4. Убедитесь, что транзакция Т2 находится в состоянии ожидания.

  5. Отмените транзакцию Т1. Теперь должна завершиться транзакция Т2.

  6. Убедитесь, что C_BALANCE отражает только результат транзакции Т2.

3.4.2.7 Тест на Изолированность 7

Данный тест демонстрирует повторность чтения для транзакции Новый Заказ в момент, когда другая интерактивная транзакция обновляет стоимость товара. Для двух случайных товаров с номерами Х и У выполните следующее:

  1. Запустите транзакцию Т1. Узнайте значение I_PRICE для товаров Х и У. Выполните операцию СОВЕРШИТЬ для транзакции Т1.

  2. Для группы товаров, включая Х (для этого товара дважды) и У, запустите транзакцию Новый Заказ Т2.

  3. Остановите транзакцию Т2 сразу после получения данных о цене товара Х для первого раза, и сразу до получения информации о цене товара У и товара Х для второго раза.

  4. Запустите транзакцию Т3. Увеличьте стоимость товаров Х и У на 10%.

Случай А – если транзакция Т3 прерывается и не отвечает на запросы пользователя, то:

5А. Продолжите выполнение транзакции Т2 и убедитесь, что стоимость товара х (второй раз) и товара у соответствуют значениям, считанным транзакцией Т1. Выполните транзакцию Т2.
6А. Теперь транзакция полная и должна быть совершена.
7А. Запустите транзакцию Т4. Узнайте значение I_PRICE для товаров х и у. Выполните операцию СОВЕРШИТЕ транзакцию Т4.
8А. Убедитесь, что значение цен, считанные транзакцией Т4, соответствуют значениям, полученным транзакцией Т3.

Случай В – если транзакция Т3 прерывается и не отвечает на запросы пользователя, а транзакция Т2 возвращается в первоначальное состояние

5В. Транзакция завершена.
6В. Продолжите транзакцию Т2 и убедитесь, что СУБД выдала ей команду отмены.
7В. Запустите транзакцию Т4. Узнайте I_PRICE для товаров х и у. СОВЕРШИТЕ транзакцию Т4.
8В. Убедитесь, что цены, прочитанные транзакцией Т4, соответствуют значениям, полученным транзакцией Т3.

Случай С – если транзакция Т3 отменяется:

5С. Убедитесь, что СУБД выдала команду отмены транзакции Т3
6С. Продолжите транзакцию Т2 и убедитесь, что цена товара х (второй раз) и товара у соответствуют значениям, считанным транзакцией Т1. Выполните СОВЕРШИТЬ транзакцию Т2.
7С. Запустите транзакцию Т4. Узнайте значения I_PRICE для товаров х и у. Выполните СОВЕРШИТЬ транзакцию Т4.
8С. Убедитесь, что цены, считанные транзакцией Т4, соответствуют значениям, считанным транзакциями Т1 и Т2.

Случай D – Если Т3 не прерывается и никакая другая транзакция не отменяется.

5D. Транзакция Т3 была закончена и СОВЕРШЕНА.
6D. Продолжите транзакцию Т2 и убедитесь, что стоимость товара х (второй раз) и товара у соответствуют значениям, считанным при выполнении транзакции Т1. Выполните СОВЕРШИТЬ транзакцию Т2.
7D. Запустите транзакцию Т4. Узнайте значения I_PRICE для товаров х и у. Выполните СОВЕРШИТЬ транзакцию Т4.
8D. Убедитесь, что цены, считанные транзакцией Т4, соответствуют значениям, установленным транзакцией Т3.

Комментарий 1: Считается, что данный тест успешно выполнен, если выполнено условие А, В или D, описанный выше. Лицо, выполняющее тест, должно сообщить в отчете какой из случаев имел место быть.

Комментарий 2: Если программа использует дубликат таблицы ТОВАР, и все транзакции в Тесте на Изолированность 7 используют ту же копию этой таблицы, то не требуется обновлять данные во всех остальных копиях таблицы. Данное послабление свойств ACID для дубликата таблицы действительно только при условиях, описанных выше, и в контексте Теста на Изолированность 7.

Комментарий 3: Транзакции Т1, Т2 и Т4 используются не для измерения пропускной способности, а в контексте Теста на Изолированность 7.

3.4.2.8 Тест на Изолированность 8

Данный тест демонстрирует изолированность для Уровня 3 (фантом) защиты между транзакциями Доставка и Новый Заказ. Выполните следующее:

  1. В таблице НОВЫЙ ЗАКАЗ для случайных точки продаж и склада удалите все ряды.

  2. Запустите транзакцию Доставка Т1 для выбранного склада.

  3. Остановите транзакцию Т1 сразу же после считывания таблицы НОВЫЙ ЗАКАЗ для выбранной точки продаж. Никакой определенный ряд не должен быть найден.

  4. Для тех же точки продаж и склада запустите транзакцию Новый Заказ Т2.

Случай А – транзакция Т2 прерывается и не отвечает на запросы пользователя:

5А. Продолжите выполнение транзакции Т1, повторив считывания таблицы НОВЫЙ ЗАКАЗ для выбранной точки продаж.
6А. Убедитесь, что все еще никакой определенный ряд не найден.
7А. Завершите транзакцию Т1 и выполните для нее операцию СОВЕРШИТЬ.
8А. Теперь транзакция Т2 должна быть завершена.

Случай В – если транзакция Т2 не зависает:

5В. Завершите транзакцию Т2 и выполните для нее операцию СОВЕРШИТЬ.
6В. Продолжите транзакцию Т1, повторяя считывание таблицы НОВЫЙ ЗАКАЗ для выбранной точки продаж.
7В. Убедитесь, что все еще никакой определенный ряд не найден.
8В. Завершите транзакцию Т1 и выполните для нее операцию СОВЕРШИТЬ.

Комментарий: Заметьте, что кроме случаев А и В возможны и другие случаи. Цель данного теста состоит в том, чтобы продемонстрировать, что во всех случаях, когда Т1 повторно считывает таблицу НОВЫЙ ЗАКАЗ для выбранной точки продаж, никакой определенный ряд не находится.

3.4.2.9 Тест на Изолированность 9

Данный тест демонстрирует изолированность для защиты Уровня 3 (фантом) между транзакциями Состояние Заказа и Новый Заказ. Выполните следующее:

  1. Для выбранного заказчика запустите транзакцию Состояние Заказа Т1.

  2. Сразу, после считывания таблицы ЗАКАЗ для выбранного заказчика, остановите транзакцию Т1. Должен быть найден самый последний заказ этого заказчика (заказчик обязательно нужен).

  3. Для того же заказчика запустите транзакцию Новый Заказ Т2.

Случай А – если транзакция Т2 прерывается и не отвечает на запросы пользователя:

5А. Продолжите транзакцию Т1, повторяя считывания таблицы ЗАКАЗ для данного заказчика.
6А. Убедитесь, что заказ найден, подобно п.3.
7А. Завершите выполнение транзакции Т1 и выполните для нее операцию СОВЕРШИТЬ.
8А. Теперь транзакция Т2 должна завершиться.

Случай В – если транзакция Т2 не прерывается:

5В. Завершите выполнение транзакции Т2 и выполните для нее операцию СОВЕРШИТЬ.
6В. Продолжите транзакцию Т1, повторяя считывания таблицы ЗАКАЗ для данной точки продаж.
7В. Убедитесь, что заказ найден подобно п. 3.
8В. Завершите выполнение транзакции Т1 и выполните для нее операцию СОВЕРШИТЬ.

Комментарий: Заметьте, что кроме случаев А и В, возможны и другие случаи. Цель данного теста состоит в том, чтобы продемонстрировать, что во всех случаях, когда Т1 повторно считывает таблицу НОВЫЙ ЗАКАЗ для выбранного заказчика, заказ находится подобно п. 3.

3.5 Требования Долговечности

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

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

Комментарий 2: Требование долговечности не включает в себя способность сохранять результаты вопреки многочисленным сбоям, описанным в пункте 3.5.3, даже если эти отказы – результат отдельной операции.

3.5.1 Отказоустойчивый носитель информации – это переносной элемент хранения информации, который является либо:

  1. По сути, не зависимым от источника питания носителем информации (например, магнитный диск, магнитная лента, оптический диск и т.д.), или

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

Источник Бесперебойного Питания (ИБП) не считается внешним источником питания.

Комментарий: Отказоустойчивый носитель информации может дать сбой; этого обычно можно избежать путем копирования данных на второй носитель (репликация) или записью на другой надежный носитель информации. Запоминающее устройство может считаться отказоустойчивым носителем информации, если оно способно хранить данные достаточно долго для соблюдения указанных в пункте 2 требований. Например, оно подключено к ИБП, и во время сбоя его содержимое может быть перенесено на независящий от питания носитель информации. Заметьте, нет никакого разделения на ПЗУ и ОЗУ системы (например, кэш контролера диска).

3.5.2 Определение Свойства ВЫПОЛНЕН

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

Комментарий 1: Транзакции могут совершаться без постоянного уведомления пользователя об этом, т.к. для ТРС-С этого не требуется.

Комментарий 2: Несмотря на то, что в профилях транзакции порядок операций не имеет значения, текущая передача выходных данных не может начаться до тех пор, пока операция совершения транзакции не завершится успешно.

3.5.3 Список единичных сбоев

Точечные сбои распространяются на компоненты ТС, которые способствуют выполнению требования долговечности. В конфигурациях, в которых одно и то же контрольное тестирование выполняется более чем одной копией операционной системы, тесты на сбой, приведенные здесь, должны быть выполнены хотя бы на одной из этих копий. Кроме того, если эти многочисленные копии операционной системы управляют данными, которые представлены как один образ для данного контрольного измерения (например, кластер базы данных), то тест Отказ Источника Питания должен быть выполнен для каждой из этих копий ОС.

Комментарий 1: Примером множества систем, выполняющих одинаковую функцию, может служить единичный образ базы данных на кластеризированной системе в ТРС-С.

Комментарий 2: Даже один тест может в достаточной степени удовлетворить требования многократных единичных сбоев (например, единый "тест сбоя системы" может использоваться для пунктов 3.5.3.2, 3.5.3.3 и 3.5.3.4).

Комментарий 3: Термин "одновременно", применительно к сбою источника питания многократных копий в рамках ТС означает – в пределах 3 секунд, которые позволяют выполнять тест для случая, когда используется ручной вариант.

3.5.3.1 Постоянный неисправляемый сбой в любом отказоустойчивом носителе информации во время измерения, содержащем ТРС-С базу данных или данные о восстановлении.

Комментарий: Если ОЗУ используется в качестве надежного носителя информации, то это должно рассматриваться как потенциально уязвимое место для сбоя. Примером способа избежания такого сбоя может служить архивирование базы данных с возможностью переписывания лога, и дублированием носителя информации. Если запоминающее устройство является надежным носителем информации и дублирование используется для обеспечения долговечности, то дублированные запоминающие устройства должны быть независимо подключены к источнику питания.

3.5.3.2 Мгновенное прерывание (сбой системы или ее компонентов/зависание системы) в процессе обработки приводит к полной или частичной остановке выполнения атомарных транзакций.

Комментарий 1: Это может повлечь за собой ненормальное выключение системы, которая требует загрузки свежей копии операционной системы с загрузочного устройства. Это не обязательно приводит к потере информации. Если механизм восстановления информации полагается на содержание памяти на момент сбоя, то, для предотвращения потери данных информации, система должна быть обеспечена ИБП, и его стоимость должна быть учтена при расчете цены системы. Примером технологии, используемой для предотвращения потери данных в результате прерывания процесса обработки, может служить лог "отменить/переделать.

Комментарий 2: В некоторых случаях при обработке атомарной транзакции могут быть задействованы несколько копий операционной системы. Эти копии могут соединяться между собой различными способами, например, через удлинитель шины, высокоскоростным LAN и т.д. Эти соединения весьма неустойчивы и могут привести к разрыву связи между операционными системами. Поэтому в это определение включена возможность подобного сбоя, и способ, которым системы соединены между собой, должен быть протестирован.

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

3.5.3.3 Полный или частичный сбой запоминающего устройства (потеря содержимого).

Комментарий: Это означает, что работа запоминающего устройства полностью или частично прервалась. Это может быть вызвано отключением внешнего источника питания или неисправностью карты памяти.

3.5.3.4 Отказ системы питания

Комментарий 1: Отключение всех внешних источников питания ТС на неопределенное время. Это должно учитывать, по крайней мере, все элементы ТС, которые участвуют в этапах транзакции базы данных.

Комментарий 2: Требования устойчивости к нарушению питания могут быть удовлетворены путем внесения в состав системы надежного ИБП. Это сможет гарантировать наличие доступа ко всем компонентам на протяжении, по крайней мере, 30ти минут. Тем не менее, использование ИБП не должно приводить к возникновению дополнительных точечных сбоев. Требование, которое оговаривает способность системы работать без сбоя на протяжении 30 минут, может быть подтверждено путем измерений либо расчетов. При расчетах используются данные о потребляемой мощности каждого из компонентов системы, умноженные на 1.4.

Комментарий 3: Вклад ИБП при оценке соответствия требованию о продолжительности работы системы без сбоев не проверяется.

3.5.4 Испытания на долговечность

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

Требуется, чтобы тест(ы) на сбой системы и тест(ы) на потерю информации, описанные в пункте 3.5.3.2 и 3.5.3.3, осуществлялись при полной загрузке терминала и полностью масштабируемой базы данных. Величина tpmC данного теста для пунктов 3.5.3.2. и 3.5.3.3 должна составлять как минимум 90% от значения tpmC, заявленного для данного тестирования.

Тест(ы) на сбой надежных носителей информации, описанный в пункте 3.5.3.1, может (гут) быть выполнен одной из компонент ТС и базе данных. Значение tpmC данного теста для пункта 3.5.3.1 должно составлять, как минимум 10% от величины tpmC, заявленной для данного тестирования.

Для подсистемы ТС все многочисленные аппаратные средства, такие, как процессор и диск/контроллеры в полной конфигурации ТС, должны выражаться не более, чем 10% от конфигурации или двумя от каждого из компонентов. База данных должна быть сжата по крайней мере на 10% с двумя складами, как минимум. Все исключения из вышеизложенных требований к конфигурации могут быть допущены ТРС аудитором для того, чтобы понизить уровень выполнения контрольного тестирования. Любое исключение подобного рода должно быть задокументировано в подтверждающем документе аудитора. Кроме того, в этом тесте должна быть использована стандартная процедура передачи. Лицо, выполняющее тест, должно констатировать со всей ответственностью, что данная проверка так же прошла бы все необходимые тесты на долговечность.

Для каждого сбоя, описанного в пункте 3.5.3, выполните следующие операции:

  1. Для того чтобы определить текущее количество общего числа заказов (число 1), посчитайте количество D_NEXT_O_ID для всех рядов таблицы ТОЧКА ПРОДАЖ,.

  2. Запустите ТРС-С транзакцию. Скорость транзакции должна быть такой, как описано выше, и соответствовать всем прочим требованиям для заявленного периода измерений (см. пункт 5.5), за исключением требования, что интервал содержит как минимум четыре контрольных точки (см. пункт 5.5.2.2). ТС должен работать со скоростью по крайней мере 5 минут.

  3. Вызовите сбой, выбранный из списка в пункте 3.5.3.

  4. Перезапустите испытываемую систему, применив обычную процедуру восстановления.

  5. Сравните содержимое "успешного" файла и таблицу ЗАКАЗ, чтобы убедиться, что каждая запись в "успешном" файле для совершенной транзакции Новый Заказ имеет соответствующую запись в таблице ЗАКАЗ, и что для случая отмены транзакции никаких записей нет. Повторите этап 1, чтобы определить общее число заказов (число 2). Убедитесь, что число 2 – число 1 – больше либо равно числу записей в "успешном" файле для совершенной транзакции Новый Заказ. Если есть несоответствие, то таблица ЗАКАЗ должна содержать дополнительные записи и разница должна быть не больше числа эмулируемых терминалов.                                                        Комментарий: Разница должна быть только из-за тех транзакций, которые были переданы в ТС, но в которых выходные данные не были отображены на экране ввода/вывода до сбоя.

  6. Убедитесь в соблюдении Условия о Непротиворечивости 3, указанного в пункте 3.3.2.3.

3.5.5 Дополнительные требования

3.5.5.1 Механизм восстановления не может использовать информацию из таблицы ИСТОРИЯ для поддержки свойства о долговечности.

3.5.5.2 Возвращение в первоначальное состояние по данным архивной копии базы данных (например, копия, взятая до запуска) с использованием лога "переделать" не допускается использовать в качестве метода восстановления данных при возникновениях сбоев, упомянутых в пунктах 3.5.3.2 и 3.5.3.3. Заметьте, что "контрольные цифры", "контрольные точки", "точки непротиворечивости" и т.п. базы данных, используемые во время работы, не считаются архивами.

Статья: Глава 3 - СВОЙСТВА ТРАНЗАКЦИИ И СИСТЕМЫ

Перейти на главную страницу компании "Софтпоинт"