СИСТЕМА И СПОСОБ ДЛЯ СОЗДАНИЯ ВЫБОРОЧНЫХ МОМЕНТАЛЬНЫХ СНИМКОВ БАЗЫ ДАННЫХ
SYSTEM AND METHOD FOR CREATING SELECTIVE SNAPSHOTS OF DATABASE

Область техники
Настоящее изобретение относится к системе и способу для создания выборочных моментальных снимков базы данных, хранящейся в виде одного или более сегментов, причем сегмент содержит одну или несколько страниц памяти.
Настоящее изобретение также относится к компьютерно-читаемому носителю, на котором хранится программный код, содержащий команды для реализации способа для создания выборочных моментальных снимков базы данных, хранящейся в виде одного или более сегментов, причем сегмент содержит одну или несколько страниц памяти.
Уровень техники
Чтобы создать моментальный снимок (snapshot) базы данных, некоторые операции баз данных задействуют порождение (fork - порождение дочернего процесса) процесса моментального снимка. Например, база данных с гибридом оперативной транзакционной обработки и оперативной аналитической обработки (OLTP-OLAP) может использовать системный вызов, чтобы породить процесс моментального снимка, создающий согласованный моментальный снимок для OLAP, на период длительного выполнения запроса.
Аналогичный механизм может быть использован для копирования базы данных в контрольных точках. Копирование в контрольных точках сбрасывает согласованный моментальный снимок базы данных в процессе моментального снимка в постоянную память. Данный процесс моментального снимка также может быть длительным ввиду зависимости от размера моментального снимка и скорости ввода/вывода. Для отслеживания небольших изменений состояния приложения базы данных между последовательными контрольными точками и для сохранения лишь этих небольших изменений могут применяться различные оптимизации, например, инкрементное копирование в контрольных точках.
Как правило, моментальный снимок или копирование в определенных временных точках в дочернем процессе поддерживается динамически средствами оптимизации копирования при записи (CoW): системный вызов порождения процесса отображает общие страничные кадры в обоих процессах как неизменяемые, и лишь при изменении страницы процессом ядро выделяет новый страничный кадр и копирует в него данные соответствующей страницы. Это приводит к дополнительным затратам и снижению производительности. В частности, в вышеуказанных и подобных приложениях затраты на поддержание процесса моментального снимка оказывают на производительность решающее влияние.
Проблема снижения затрат на поддержание моментального снимка, в частности за счет обращений к копированию при записи, активно исследуется научным сообществом в целях повышения масштабируемости систем. Однако ни одной доступной системы промышленного уровня, основанной на этих исследованиях, до сих пор неизвестно.
Сущность изобретения
Цель настоящего изобретения состоит в том, чтобы обеспечить систему и способ для создания выборочных моментальных снимков базы данных, хранящейся в виде одного или более сегментов, причем сегмент содержит одну или несколько страниц памяти, и чтобы указанные система и способ преодолевали одну или более из вышеупомянутых проблем известного уровня техники.
Первый аспект настоящего изобретения обеспечивает систему для создания выборочных моментальных снимков базы данных, хранящейся в виде одного или более сегментов, причем сегмент содержит одну или несколько страниц памяти, причем данная система содержит:
- блок определения для определения, будет ли процесс моментального снимка обращаться к выбранному сегменту из одного или более сегментов,
- блок присвоения для присвоения положительного статуса отображения вызываемому сегменту, для которого блок определения определил, что к нему обращается процесс моментального снимка, и для присвоения отрицательного статуса отображения невызываемому сегменту, для которого блок определения определил, что к нему не обращается процесс моментального снимка,
- блок моментального снимка для создания моментального снимка, в котором создание моментального снимка содержит этап порождения процесса моментального снимка, адресное пространство которого содержит подмножество одного или более сегментов, причем сегмент, которому был присвоен отрицательный статус отображения, в это адресное пространство не отображается.
Система в соответствии с первым аспектом выгодно использует информацию о том, к каким подмножествам памяти процессу моментального снимка потребуется обращаться. В некоторых вариантах осуществления настоящего изобретения благодаря наличию такой информации блок присвоения может быть выполнен с возможностью установки лишь необходимых сегментов в качестве отображаемых в процесс моментального снимка. В ходе своего выполнения процесс моментального снимка находит лишь те сегменты, которые были отображены в его адресное пространство. В других вариантах осуществления процесс моментального снимка наследует все сегменты родительского процесса, но после завершения использования некоторого сегмента он может снять отображение этого сегмента. В то же время операция записи в родительском процессе вызывает операцию копирования при записи только на сегменте, который является отображенным в процесс моментального снимка в это время.
Поскольку все остальные сегменты имеют отрицательный статус отображения, т. е. не установлены в качестве отображаемых в адресное пространство процесса моментального снимка, они не являются частью адресного пространства этого моментального снимка вовсе и, следовательно, не подлежат копированию при записи в случае своей записи в родительском процессе. Операция записи изменяет эти сегменты на месте, как если бы процесса моментального снимка не существовало. В результате количество операций копирования при записи, которым подвергается родительский процесс, может быть уменьшено на несколько порядков.
Система в соответствии с первым аспектом может использовать информацию о том, какие области памяти базы данных считываются потребителем моментальных снимков, и создавать моментальные снимки этих и только этих областей памяти. Кроме того, потребитель моментальных снимков может отказаться от удержания его областей моментальных снимков или их части с целью уменьшения затрат на динамическое обслуживание моментальных снимков, т. е. на копирование при записи.
В случае метода моментальных снимков на основе порождения, для каждой области памяти с целью установления ее статуса отображения в процессе моментального снимка может быть использован системный вызов madvise(), а для отказа от удержания области в процессе моментального снимка может быть использован системный вызов munmap(). В частности, статус отображения может быть статусом наследования, т. е. таким статусом, который указывает, будет ли сегмент отображаться в адресное пространство вновь созданного процесса.
В вариантах осуществления настоящего изобретения сегмент содержит одну или несколько страниц памяти, расположенных в смежных участках памяти.
Система в соответствии с первым аспектом позволяет достичь значительного сокращения числа операций копирования при записи, встречающихся в родительском процессе, благодаря копированию лишь тех страниц в случае их изменения родительским процессом, к которым процессу моментального снимка требуется обращаться.
Использование системы в соответствии с первым аспектом также позволяет достичь сокращения времени порождения, поскольку значительно меньшая часть записей таблицы страниц должна быть скопирована в таблицу страниц процесса моментального снимка.
Благодаря меньшему числу операций копирования при записи варианты осуществления системы в соответствии с первым аспектом позволяют обеспечивать короткие и одинаковые периоды ожидания обновления строк.
В других вариантах осуществления использование системы в соответствии с первым аспектом позволяет достичь уменьшения размера пулов зарезервированных страничных кадров с целью поддержки необходимых вариантов использования, а также значительного снижения дефицита памяти в системе. Таким образом, в некоторых вариантах осуществления благодаря сниженному дефициту памяти и возможности создания более легких моментальных снимков база данных может позволить себе более частые и длительные процессы моментального снимка.
В первой реализации системы в соответствии с первым аспектом блок определения выполнен с возможностью определения, будет ли процесс моментального снимка обращаться к выбранному сегменту, до начала выполнения процесса моментального снимка.
В соответствии с первой реализацией блок присвоения может принимать решение о том, какие сегменты должны быть наследуемыми, т. е. отображаемыми в адресное пространство вновь создаваемого процесса моментального снимка. Таким образом, процесс моментального снимка может быть запущен только с необходимыми во время выполнения этого процесса сегментами, отображенными в его адресное пространство. Определение требуемых процессу моментального снимка сегментов до начала самого процесса моментального снимка может обладать тем преимуществом, что позволяет избежать снятие отображения ненужных сегментов во время выполнения процесса моментального снимка.
Во второй реализации системы в соответствии с первым аспектом блок определения выполнен с возможностью определения во время выполнения активного процесса моментального снимка, будет ли активный процесс моментального снимка обращаться к выбранному сегменту в течение оставшегося времени своего выполнения.
Первая и вторая реализации могут быть объединены, т. е. перед выполнением процесса моментального снимка может происходить определение того, к каким сегментам процессу моментального снимка потребуется обращаться вообще, а во время выполнения - определение того, обращение к каким сегментам все еще потребуется в течение оставшегося времени выполнения. Например, может оказаться так, что к некоторому сегменту процессу моментального снимка потребуется обращаться лишь единожды за время своего выполнения. Следовательно, после осуществления этого единственного обращения блок определения может определить, что к данному сегменту больше не потребуется обращаться снова, и блок присвоения может присвоить этому сегменту отрицательный статус отображения, даже если ранее (до начала выполнения процесса моментального снимка) этому сегменту был присвоен положительный статус отображения.
В вариантах осуществления второй реализации блок присвоения может быть выполнен с возможностью снятия отображения одного или более сегментов, для которых блок определения определил, что к ним не будет обращаться процесс моментального снимка в течение оставшегося времени своего выполнения, из адресного пространства процесса моментального снимка.
В третьей реализации системы в соответствии с первым аспектом блок присвоения содержит блок компиляции, выполненный с возможностью компиляции физического плана выполнения, предназначенного для выполнения процессом моментального снимка, при этом предпочтительно, чтобы скомпилированный физический план выполнения содержал команду снятия отображения сегмента в той позиции физического плана выполнения, начиная с которой к данному сегменту уже не потребуется обращаться в течение оставшегося времени выполнения физического плана выполнения. Преимуществом является то, что с сегмента может быть снято отображение сразу же после определения того, что он больше не потребуется в процессе моментального снимка.
В четвертой реализации системы в соответствии с первым аспектом присвоение положительного статуса отображения вызываемому сегменту содержит этап вызова функции madvise операционной системы с аргументами, содержащими адрес и размер вызываемого сегмента и параметр MADV_NORMAL, и/или присвоение отрицательного статуса отображения невызываемому сегменту содержит этап вызова функции madvise операционной системы с аргументами, содержащими адрес и размер невызываемого сегмента и параметр MADV_DONTFORK.
В вариантах осуществления настоящего изобретения установка положительного или отрицательного статуса отображения может содержать установку «внутренней» переменной в значение, соответствующее положительному или отрицательному статусу отображения, а также вызов функции операционной системы, например madvise(), для установки положительного или отрицательного статуса отображения на уровне операционной системы.
Функция madvise() операционной системы используется для выдачи ядру рекомендаций или указаний об использовании страниц памяти определенного диапазона адресов. Некоторые предварительно заданные параметры, такие как MADV_NORMAL, MADV_DOFORK или MADV_DONTFORK, позволяют приложениям уведомлять ядро об ожидаемом использовании некоторых отображенных или общих областей памяти, с тем чтобы ядро само могло выбрать надлежащие методы упреждающего чтения и кэширования. В частности, в соответствии с четвертой реализацией описываемой системы вызов функции madvise() с параметром MADV_NORMAL приводит к обращению с данным сегментом по умолчанию. Например, при создании процесса моментального снимка этот сегмент включается в его адресное пространство.
Если сегмент содержит более одной страницы памяти, то функция madvise() может быть вызвана со страницами памяти сегмента в качестве аргументов.
Второй аспект настоящего изобретения относится к способу для создания выборочных моментальных снимков базы данных, хранящейся в виде одного или более сегментов, причем сегмент содержит одну или несколько страниц памяти, причем данный способ содержит следующие этапы:
- определение родительским процессом, будет ли процесс моментального снимка обращаться к выбранному сегменту из одного или более сегментов,
- присвоение родительским процессом положительного статуса отображения сегменту, если определено, что к сегменту обращается процесс моментального снимка, и/или присвоение родительским процессом отрицательного статуса отображения сегменту, если определено, что к сегменту не обращается процесс моментального снимка,
- создание родительским процессом моментального снимка, где создание моментального снимка содержит этап порождения процесса моментального снимка и где сегмент, которому был присвоен отрицательный статус отображения, в адресное пространство этого процесса моментального снимка не отображается.
Способы в соответствии со вторым аспектом настоящего изобретения могут быть выполнены системой в соответствии с первым аспектом настоящего изобретения. Другие особенности или реализации способа в соответствии со вторым аспектом настоящего изобретения могут выполнять функции системы в соответствии с первым аспектом настоящего изобретения и функции ее различных форм реализаций.
В первой реализации способа в соответствии со вторым аспектом присвоение положительного статуса отображения вызываемому сегменту содержит:
- установку переменной статуса вызываемого сегмента в переменную статуса, объединенную с переменной маски оператором ИЛИ,
- вставку указателя на вызываемый сегмент в хэш-таблицу, и
- при вновь осуществляемой вставке указателя в хэш-таблицу - установку положительного статуса отображения,
при этом создание родительским процессом моментального снимка содержит этап обновления переменной маски, который, в свою очередь, содержит этап циклического сдвига значений битов переменной маски.
Благодаря своевременному обновлению хэш-таблицы в отношении всех вызываемых сегментов и определению того, является ли указатель на вызываемый сегмент вновь вставленным, можно избежать ненужных обновлений статуса отображения. Например, системную команду, связанную с отображением или снятием отображения сегмента, необходимо вызывать лишь при изменении статуса отображения этого сегмента.
В вариантах осуществления настоящего изобретения переменная маски является двухбитной переменной. Таким образом, один бит может соответствовать текущему временному интервалу, а другой бит может соответствовать предыдущему временному интервалу.
Путем обновления переменной маски при создании нового процесса моментального снимка и путем использования переменной маски при установке переменной статуса сегмента описываемый способ в соответствии с первой реализацией может вести запись текущего и предыдущего статусов отображения каждого сегмента. Благодаря этому можно избежать ненужных вызовов функции операционной системы, связанной со статусом отображения.
Во второй реализации способа в соответствии со вторым аспектом создание моментального снимка дополнительно содержит этап установки отрицательного статуса отображения для каждого сегмента из хэш-таблицы, переменная статуса которого дает значение 0 в объединении с переменной маски оператором И.
В частности, может быть определено, принимает ли переменная статуса сегмента, объединенная с переменной маски оператором И, значение 0 для всех битов результата объединения оператором И.
Обращение к переменной статуса отображения сегментов посредством ее объединения с переменной маски оператором И обеспечивает эффективный способ обращения лишь к тому биту статуса отображения, который соответствует текущему положению.
В третьей реализации способа в соответствии со вторым аспектом описываемый способ представляет собой способ копирования в контрольных точках, при этом процесс моментального снимка выполнен с возможностью записи выборочного моментального снимка базы данных, который содержит подмножество одного или более сегментов, в постоянную память. В способе копирования в контрольных точках процесс моментального снимка записывает в постоянную память, как правило, только те сегменты базы данных, которые были изменены за последний интервал между контрольными точками («дельту»). В связи с этим в некоторых вариантах осуществления процессу моментального снимка необходимо лишь единожды прочесть каждый из измененных сегментов. После того как доступ на чтение к некоторому сегменту был осуществлен, процесс моментального снимка уже не будет обращаться к этому сегменту в дальнейшем, и ему может быть присвоен отрицательный статус отображения.
Например, в тех случаях, когда за последний интервал между контрольными точками было изменено большое количество сегментов, описываемый способ в соответствии с третьей реализацией может обеспечить существенное сокращение числа операций копирования при записи.
В четвертой реализации способа в соответствии со вторым аспектом, определение родительским процессом, будет ли процесс моментального снимка обращаться к выбранному сегменту из одного или более сегментов, содержит этап определения, был ли выбранный сегмент изменен за предыдущий интервал между контрольными точками. Это обеспечивает простое правило для определения того, что процессу моментального снимка не потребуется обращаться к соответствующему сегменту. Поскольку данное правило является относительно простым, вычислительные затраты, необходимые для определения невызываемых сегментов и для присвоения им отрицательного статуса отображения, являются довольно низкими.
В пятой реализации способа в соответствии со вторым аспектом описываемый способ представляет собой способ для поддержания системы базы данных с гибридом оперативной транзакционной обработки (OLTP) и оперативной аналитической обработки (OLAP), причем данный способ содержит следующие этапы:
- получение родительским процессом OLAP-запроса, и
- выполнение процессом моментального снимка соответствующего OLAP-запроса.
Системы баз данных с гибридной обработкой OLTP и OLAP позволяют обрабатывать аналитические запросы непосредственно на транзакционных данных. Предлагая текущие моментальные снимки транзакционных данных для OLAP произвольным образом, эти системы позволяют осуществлять бизнес-аналитику в режиме реального времени. Однако, в связи с тем, что выполнение OLAP-запроса в гибридной системе требует создания процесса моментального снимка, возможность избежать ненужных операций копирования при записи при создании процесса моментального снимка приобретает в этом случае особое значение.
В шестой реализации способа в соответствии со вторым аспектом описываемый способ дополнительно содержит этап компиляции родительским процессом процесса моментального снимка на основе OLAP-запроса. Компиляция процесса моментального снимка может быть частично основана на информации о том, к каким сегментам процессу моментального снимка потребуется обращаться. Благодаря чему достигается возможность вставки команд снятия отображения в надлежащие места компилируемого процесса моментального снимка.
В седьмой реализации способа в соответствии со вторым аспектом определение родительским процессом того, будет ли процесс моментального снимка обращаться к выбранному сегменту, содержит этап создания родительским процессом физического плана выполнения, в котором, в частности, упоминаемому в этом физическом плане сегменту родительский процесс присваивает положительный статус отображения.
Физический план выполнения может содержать упорядоченный набор этапов, используемых для обращения к данным в системе управления реляционной базой данных SQL. Благодаря этому можно определить, когда и к каким сегментам процессу моментального снимка потребуется обращаться, и в соответствии с этим разместить команды снятия отображения, которые снимают отображение ненужных сегментов на адресное пространство процесса моментального снимка.
Для обычного SQL-запроса существует большое количество альтернативных способов выполнения запроса, каждый из которых соответствует своему плану выполнения запроса. Как правило, системы управления базами данных выбирают предпочтительный физический план выполнения, основываясь на некотором критерии эффективности. В вариантах осуществления настоящего изобретения предпочтительный физический план выполнения выбирается из множества доступных физических планов выполнения на основе информации о том, когда для сегментов процесса моментального снимка может быть установлен отрицательный статус отображения. Например, физическое выполнение может быть выбрано в качестве предпочтительного плана выполнения, если может быть определено, что сегменты уже не являются нужными на более ранних позициях этого физического плана выполнения, благодаря чему команды снятия отображения могут быть вызваны ранее.
В восьмой реализации способа в соответствии со вторым аспектом описываемый способ дополнительно содержит следующие этапы
- определение невызываемого сегмента, к которому процессу моментального снимка больше не потребуется обращаться, и
- снятия отображения невызываемого сегмента.
Как указывалось выше, снятие отображения невызываемого сегмента может быть выполнено с помощью системной команды для снятия отображения страниц памяти.
Третий аспект настоящего изобретения относится к компьютерно-читаемому носителю, на котором хранится программный код, содержащий команды для реализации способа в соответствии со вторым аспектом или одной из его реализаций.
Краткое описание чертежей
Чтобы более ясно проиллюстрировать технические особенности вариантов осуществления настоящего изобретения, далее кратко представлены прилагаемые чертежи, обеспеченные для дополнительного описания вариантов осуществления. Прилагаемые чертежи в последующем описании представляют лишь некоторые варианты осуществления настоящего изобретения, но модификации этих вариантов осуществления возможны без отступления от объема настоящего изобретения, определяемого формулой изобретения.
На фиг.1 показано схематическое изображение таблицы страниц родительского процесса и таблицы страниц дочернего процесса, которые содержат указатели на одни и те же физические страницы,
На фиг.2 показано схематическое изображение таблицы страниц родительского процесса и таблицы страниц дочернего процесса, которые содержат указатели на одни и те же физические страницы, с демонстрацией операции копирования при записи,
На фиг.3 показано схематическое изображение таблицы страниц родительского процесса и таблицы страниц дочернего процесса, которые содержат указатели на одни и те же физические страницы, с демонстрацией операции копирования при записи в соответствии с одним из вариантов осуществления настоящего изобретения,
На фиг.4 показано схематическое изображение примера физического плана выполнения двух соединений трех таблиц базы данных в соответствии с настоящим изобретением,
На фиг.5 показано схематическое изображение способа определения сегментов, к которым потребуется обращаться процессу моментального снимка в способе копирования в контрольных точках в соответствии с настоящим изобретением,
На фиг.6 показано схематическое изображение системы для создания выборочных моментальных снимков базы данных в соответствии с настоящим изобретением,
На фиг.7A показана блок-схема последовательности операций подпрограммы для начала инициализации нового процесса моментального снимка,
На фиг.7B показана блок-схема последовательности операций подпрограммы для добавления сегментов с положительным статусом отображения, и
На фиг.7C показана блок-схема последовательности операций подпрограммы для завершения инициализации нового процесса моментального снимка.
Подробное описание вариантов осуществления
На фиг.1 показано схематическое изображение таблицы 10 страниц родительского процесса и таблицы 20 страниц дочернего процесса, являющейся таблицей страниц процесса моментального снимка, который был порожден родительским процессом. Таблица 10 страниц родительского процесса содержит первый элемент 12, который содержит указатель 14 на физическую страницу 32 памяти. Таблица 20 страниц дочернего процесса содержит второй элемент 22, который содержит второй указатель 24 на ту же физическую страницу 32 памяти. При вызове системной команды fork() все адресное пространство 30 родительского процесса устанавливается наследуемым, что обозначено серой штриховкой, и в связи с этим оно полностью отображается в адресное пространство процесса моментального снимка. После выполнения команды fork() таблица страниц дочернего процесса указывает на те же физические страницы, что и таблица страниц родительского процесса. Пунктирные линии 40 указывают, сколько адресного пространства необходимо скопировать.
Когда при вызове fork() адресное пространство родительского процесса наследуется полностью, каждая из его страниц подлежит копированию при записи, независимо от обращения к ним дочерним процессом.
Фиг.2 иллюстрирует сценарий осуществления записи родительским процессом в физическую страницу 32 памяти. Когда адресное пространство родительского процесса наследуется полностью, операция записи в страницу родительского процесса, независимо от обращения к ней дочерним процессом, вызывает операцию копирования при записи в вновь выделенную страницу 42 памяти. После того как соответствующая страница памяти была скопирована в новое место 42, указатель 14 в первой записи 12 в таблице 10 страниц родительского процесса обновляется на новый указатель 16, который указывает на вновь выделенную страницу памяти.
На протяжении дальнейшего времени выполнения родительского процесса последующие операции записи родительского процесса будут вызывать все больше и больше операций копирования при записи с выделением новых страниц памяти. Эти новые страницы памяти обозначены ссылочной позицией 40 на фиг.2. При равномерном распределении записи и длительном выполнении дочернего процесса большинство страниц родительского процесса будет скопировано с соответствующими затратами.
Продолжительность системного вызова порождения процесса пропорциональна количеству PTE (элементов таблицы страниц) в таблице страниц родительского процесса, которые копируются в таблицу страниц дочернего процесса. Таким образом, большой набор данных оперативной памяти приводит к резкому скачку времени отклика системы в ходе порождения процесса, ввиду чего обработку OLTP на время выполнения системного вызова порождения процесса, как правило, необходимо приостанавливать.
Кроме того, вызов fork() требует подачи достаточного количества свободных страничных кадров. Например, если большой обработчик ошибок страниц в ходе копирования при записи в буфере быстрой переадресации (TLB) системы Linux не находит новый страничный кадр, то он тихо отмечает соответствующую страницу дочернего процесса как неотображенную, и последующее обращение к данной странице завершает процесс. Предвидеть и предотвратить такую ситуацию довольно трудно.
Множество этапов копирования при записи влекут за собой существенные прямые и косвенные затраты, как изложено далее.
Как правило, затраты на обработку ошибок страниц в ходе копирования при записи не являются масштабируемыми, поскольку они возрастают с увеличением числа ядер в связи с необходимостью очищать буферы быстрой переадресации на всех ядрах, см., например, процедуру отключения буфера быстрой переадресации. Это противоречит утверждению о том, что производительность OLTP может быть дополнительно увеличена за счет использования большего количества потоков на пропорционально разделенном состоянии приложения.
Число операций копирования при записи, встречающихся в родительском процессе, пропорционально распределению записей в родительский процесс в течение всей жизни дочернего процесса, независимо от того, обращается дочерний процесс к страницам или нет. Например, в случае достаточно длительного дочернего процесса и равномерного распределения записей в родительский процесс адресное пространство родительского процесса будет скопировано полностью.
Обновление строки в колоночной базе данных предполагает осуществление записи в несколько страниц, подлежащих копированию при записи, число которых может равняться числу измененных столбцов в строке. Таким образом, период ожидания операции обновления/вставки является дорогостоящим и весьма неоднородным.
Фиг.3 иллюстрирует, каким образом система и способ в соответствии с настоящим изобретением преодолевают вышеуказанные недостатки. При своем порождении дочерний процесс наследует только часть адресного пространства родительского процесса (где дочерним процессом может быть, например, процесс моментального снимка). Лишь заштрихованная область 34 в адресном пространстве родительского процесса устанавливается в качестве наследуемой в соответствии с информацией о том, какие наборы данных потребуются дочернему процессу для своего выполнения. Таким образом, операция копирования при записи выполняется только для тех записей, которые происходят со страницами памяти в заштрихованной области 34, если происходят вообще. Остальная часть страниц в адресном пространстве 30 родительского процесса не подлежит копированию при записи. Это соответствует гораздо меньшей площади всей памяти 44, которую может понадобиться скопировать в ходе операций копирования при записи.
Фиг.4 иллюстрирует пример физического плана выполнения двух соединений трех таблиц R, S и U. Физический план выполнения включает в себя выделение тех сегментов, на которых будет работать запрос.
В частности, физический план выполнения включает в себя этап S16 выполнения сканирования сегментов таблицы R и этап S18 выполнения сканирования сегментов таблицы S. Затем на этапе S12 выполняется хэш-соединение на материализованном результате этапов S16 и S18, а на этапе S14 выполняется сканирование сегментов таблицы U. Наконец, на результатах двухпроходного хэш-соединения этапа S12 на этапе 10 выполняется сканирование на материализованном результате этапов S14 и S12.
Перед созданием процесса моментального снимка, предназначенного для выполнения запроса, планировщик запросов запрашивает диспетчер моментального снимка об установке упоминаемых в физическом плане сегментов в качестве наследуемых для процесса моментального снимка.
В одном из вариантов осуществления настоящего изобретения описываемая система содержит модуль планировщика OLAP-запросов, который определяет, какие сегменты потребуются в процессе моментального снимка, который будет выполнять соответствующий запрос. Аналогично модуль копирования в контрольных точках определяет те сегменты, которые будут необходимы в алгоритме инкрементного копирования в контрольных точках, выполняемом в дочернем процессе копирования в контрольных точках.
При инициализации все сегменты базы данных устанавливаются как ненаследуемые. То же самое верно и для нового сегмента, вставляемого в базу данных.
Модуль планировщика OLAP-запросов принимает SQL-выражения OLAP-запросов, которые он разбирает, анализирует и переписывает, превращая дерево разбора запросов с использованием метаданных базы данных в физический план выполнения, например, в дерево вызовов операторных функций и их аргументов.
Модуль копирования в контрольных точках запускает алгоритм инкрементного копирования в контрольных точках. Все время делится на интервалы между контрольными точками, где на каждом конце интервала производится моментальный снимок, состоящий из тех сегментов памяти, что были изменены на протяжении данного интервала, путем запрашивания диспетчера моментального снимка об установки сегментов в качестве наследуемых и вызова fork(). Дочерний процесс копирования в контрольных точках выводит эти сегменты на диск. Дочерний процесс возвращает статус успеха, если все сегменты были успешно сохранены. В противном случае модуль копирования в контрольных точках будет аккумулировать сегменты, которые не удалось сохранить в предыдущих интервалах, с теми сегментами, которые были изменены на протяжении текущего интервала в том же моментальном снимке для того, чтобы сохранить сегмент в конце текущего интервала.
Фиг.5 иллюстрирует способ копирования в контрольных точках для нескольких интервалов между контрольными точками. Множество из четырех объектов 131, 132, 133 и 134 отслеживается на протяжении четырех временных интервалов. Первый, второй и третий временные интервалы обозначены ссылочными позициями 111, 112 и 113 на фиг.5. Первый временной интервал 111 предшествует первой контрольной точке 121. Второй и третий временные интервалы 112, 113 определяются как интервалы между первой, второй и третьей контрольными точками 121, 122, 123. Четвертый временной интервал 114 начинается после третьей контрольной точки 123. Первый и четвертый объекты 131, 134 изменяются (как указано ссылочными позициями 141, 142) в первом интервале 111. Четвертый объект изменяется 143 снова во втором интервале 112. В третьем интервале 113 изменяются 144, 145 второй и третий объекты 132, 133.
В первом временном интервале 111 (который заканчивается в момент времени первой контрольной точки 121), набор изменений состоит из первого и четвертого объекта 131, 134, т. е. из тех объектов, которые были изменены до первой контрольной точки 121. В момент времени первой контрольной точки, т. е. в начальной точке второго временного интервала, соответствующие объекты отмечаются как измененные относительно первой контрольной точки. Набор изменений, состоящий из первого и четвертого объектов 131, 134, успешно сохраняется в течение второго временного интервала.
В начальной точке третьего временного интервала обнаруживается набор изменений, состоящий из четвертого объекта, т. е. обнаруживается, что четвертый объект был изменен между первой и второй контрольными точками 121, 122. Осуществляется попытка сбросить второй набор изменений на диск. Она приводит (по неизвестной причине) к отказу записи на диск. В четвертом временном интервале 114 вычисленный набор изменений состоит из второго, третьего и четвертого объектов 132, 133, 134. Данный набор изменений получается в результате объединения четвертого объекта 134, который не удалось сохранить в третьем временном интервале 113, и набора изменений, состоящего из второго и третьего объекта 132, 133, которые были обнаружены как измененные в третьем временном интервале 113.
В общем случае в соответствии с принципом «разделения ответственности» способ получения моментального снимка должен находиться под ответственностью способа копирования в контрольных точках до тех пор, пока не будет создана согласованная неизменяемая копия состояния соответствующих объектов.
Начиная с новой контрольной точки переменные статуса объектов, которые изменились относительно последней контрольной точки, должны быть сохранены вместе с маркировкой всех объектов как неизмененных на протяжении интервала до предстоящей контрольной точки, и все это в присутствии множества параллельных обновлений.
В предпочтительном варианте осуществления настоящего изобретения система для создания выборочных моментальных снимков базы данных в соответствии с настоящим изобретением содержит диспетчер моментального снимка, который отвечает за организацию моментального снимка как для модуля планировщика OLAP-запросов, так и для модуля копирования в контрольных точках.
Фиг.6 иллюстрирует систему 200, содержащую модуль 202 планировщика запросов, модуль 204 копирования в контрольных точках и диспетчер 220 моментального снимка. Модуль 202 планировщика запросов содержит первый блок 203 определения для определения, к каким сегментам потребуется обращаться процессу 230 выполнения запроса. Модуль 202 планировщика запросов выполнен с возможностью передачи этих сегментов 210 диспетчеру 220 моментального снимка. Аналогично модуль 204 копирования в контрольных точках содержит второй блок определения 203 для определения того, к каким сегментам потребуется обращаться процессу 232 копирования в контрольных точках. Модуль 204 копирования в контрольных точках выполнен с возможностью передачи этих сегментов 212 диспетчеру 220 моментального снимка. Процесс 230 выполнения запроса и процесс 232 копирования в контрольных точках являются процессами моментального снимка.
Диспетчер 220 моментального снимка содержит блок 222 присвоения и блок 224 моментального снимка.
Чтобы избежать установки статуса наследования сегмента с помощью системного вызова madvise(), если он уже установлен правильно, данный вариант осуществления дополнительно применяет в диспетчере 220 моментального снимка следующую оптимизацию.
Модуль 202 планировщика запросов выполнен с возможностью определения сегментов, возникающих в физическом плане. Модуль 204 копирования в контрольных точках отслеживает те сегменты, которые были изменены в интервале между контрольными точками. Каждый из этих модулей передает соответствующие сегменты диспетчеру 220 моментального снимка.
n
0
n+1
n
n+1
n+1
n
Диспетчер 220 моментального снимка хранит набор A, чтобы помнить о том, какие сегменты были установлены в качестве наследуемых на n-м порождении процесса. Изначально A={}, и все сегменты памяти в базе данных устанавливаются ненаследуемыми. Если на начало нового дочернего процесса n+1 множество A является множеством сегментов, необходимых в новом дочернем процессе, то множество A-A содержит те сегменты, которым уже нет необходимости быть наследуемыми, и поэтому для каждого из них вызывается madvise() с флагом MADV_DONTFORK. Множество A-A включает в себя новые требуемые сегменты, которые должны быть установлены наследуемыми, и для каждого из них вызывается madvise() с флагом MADV_NORMAL. Наконец, осуществляется системный вызов fork().
В предпочтительном варианте осуществления структура сегмента включает в себя следующие элементы: элемент адреса, который содержит адрес выделенного диапазона страниц, элемент размера, который содержит размер сегмента, и переменную статуса с именем inheritable_status, которая представляет собой 32-битное целое число, инициализированное нулем. Диспетчер моментального снимка хранит 32-битную целочисленную переменную маски с именем inheritable_mask, используемую для выделения и тестирования переменных статуса inheritable_status сегментов. При инициализации переменная inheritable_mask устанавливается в единицу. Диспетчер моментального снимка экспортирует интерфейсы, через которые сегменты могут быть установлены как наследуемые, после чего вызывается fork(). В частности, диспетчер моментального снимка экспортирует snapshot_init_begin(), который осуществляет циклический сдвиг inheritable_mask влево и используется для выделения сегментов в моментальном снимке, snapshot_init_segment(segment) для установки сегмента в качестве наследуемого и, наконец, snapshot_init_end(), который фактически вызывает fork().
В вариантах осуществления настоящего изобретения структура данных, реализующая множество A, может быть хэш-таблицей.
В вариантах осуществления настоящего изобретения диспетчер 220 моментального снимка может обеспечивать интерфейс с функцией инициализации создания нового процесса моментального снимка, функцией для добавления сегментов и/или функцией для завершения создания процесса моментального снимка.
На фиг.7A-7C показаны блок-схемы, иллюстрирующие начало создания нового моментального снимка (фиг.7A), добавление сегмента в хэш-таблицу (фиг.7B) и завершение создания нового моментального снимка (фиг.7C).
При инициализации хэш-таблица является пустой. При порождении нового дочернего процесса вызывается функция snapshot_init_begin() (этап S10), в результате чего осуществляется циклический сдвиг переменной inheritable_mask на один бит влево (этап S12).
Необходимый дочернему процессу сегмент может быть добавлен к моментальному снимку с помощью вызова shot_init_segment(segment) на этапе S20. На первом этапе S22 этой функции происходит выделение сегмента путем установки его переменной статуса inheritable_status в значение inheritable_mask. После чего данный сегмент ищется в хэш-таблице (этап S24), и в случае своего отсутствия в этой таблице он вставляется туда с последующим вызовом madvise() с MADV_NORMAL для области памяти этого сегмента (этап S28). В противном случае, если данный сегмент уже имеется в хэш-таблице, никаких дальнейших действий на этом сегменте не требуется.
После того, как все требуемые сегменты помещены в хэш-таблицу, может быть вызвана функция snapshot_init_end() (этап S30). Затем в ходе просмотра (этап S32) хэш-таблицы осуществляется тестирование (этап S34) переменной статуса inheritable_status каждого сегмента с использованием операции побитового И с inheritable_mask. Если результат равен нулю, то сегмент удаляется вместе с очисткой его переменной статуса inheritable_status и вызовом madvise с MD_DONTFORK для его области памяти. В целях дополнительной оптимизации удаление ненужных сегментов может осуществляться во время их встречи при поиске требуемого сегмента.
Вышеприведенные описания представляют собой лишь некоторые варианты реализации настоящего изобретения, и объем защиты настоящего изобретения не ограничивается ими. Специалистом в данной области техники могут быть легко сделаны любые изменения или замены. В связи с этим объем защиты настоящего изобретения должен быть предметом объема защиты прилагаемой формулы изобретения.