.
В процессе эволюции технологий обработки в памяти была разработана технология столбчатых индексов, реализованная в системе SQL Server 2012. В отличие от исходной технологии Veritpak, которой оснастили свой продукт разработчики Excel, технология столбчатых индексов воплощена собственно в экземпляре системы SQL Server 2012. Эта технология, предназначенная для организации информационных хранилищ большого объема, обеспечила возможность сжатия данных столбцов и их перемещения в память, что позволило реализовать от 10 до 100 усовершенствований, обеспечивающих повышение производительности. В версии SQL Server 2014 корпорация Microsoft продолжила работу над технологиями обработки в памяти, применив их для решения проблемы повышения быстродействия при оперативной обработке транзакций online transaction processing (OLTP). Система управления базами данных SQL Server 2014, в которой было реализовано размещаемое в оперативной памяти ядро базы данных OLTP с кодовым названием Hekaton, получила в результате абсолютно новый модуль обработки.
В качестве движущих сил революции технологий обработки в памяти выступают несколько факторов. Во-первых, память стала намного дешевле. Компании имеют возможность оснащать свои серверы емкими модулями оперативной памяти, а современные 64-разрядные процессоры могут обращаться к памяти емкостью до 4 Тбайт. Во-вторых, резко увеличилось число процессорных ядер. Сегодня нормой стали четырехъядерные процессоры, причем восьмиядерные и двенадцатиядерные процессоры уже не являются редкостью. А благодаря увеличению числа ядер выросло и число потоков, которые система может задействовать в любой момент. В-третьих, номинальная тактовая частота современных процессоров держится на одном уровне. Резкое повышение скорости обработки процессоров, отмечавшееся еще десять лет назад, сошло на нет. Да, количество ядер увеличилось, но максимальная тактовая частота процессоров остается прежней — и это справедливо для нескольких последних поколений процессоров. Учтите названные факторы, и вы поймете, почему специалисты Microsoft пришли к выводу: максимального повышения быстродействия можно добиться за счет памяти.
Не все так просто, как кажется
Для того чтобы воспользоваться потенциалом памяти, недостаточно просто переместить базы данных в оперативную память. Как указал в основном докладе на конференции PASS Summit 2013 ведущий технический эксперт Microsoft Дэвид Девитт, вследствие применения меток и блокировок, которые ядро базы данных должно использовать для сохранения целостности данных, сокращаются объемы данных и число потоков, которые может обрабатывать ядро. Простое перемещение базы данных в память не может изменить механизмы, используемые для сохранения целостности данных. Чтобы получить максимальную отдачу от технологии обработки в памяти, необходима абсолютно новая конструкция «безблокировочного» ядра. Именно на этой основе строится новое размещаемое в памяти ядро базы данных OLTP. Новое ядро базы данных SQL Server 2014 In-memory OLTP размещается внутри экземпляра SQL Server — точно так же, как классическое реляционное ядро и более современный модуль хранения столбчатых данных (ранее известный как Apollo). В результате SQL Server 2014 получает по сути три отдельных ядра баз данных.
Подход специалистов Microsoft
Ядро баз данных In-memory OLTP было перепроектировано, что называется, «с нуля», с использованием абсолютно новой конструкции, не предусматривающей применения блокировок. В ней нет не только блокировок, но и внутренних меток. Вместо этого в ядре обработки в памяти баз данных OLTP реализован новый механизм оптимизации управления конкурентным доступом с помощью многоверсионности. При внесении изменений в строку, входящую в совместно используемый буфер, ядро создает новую версию этой строки и проставляет на ней отметку времени. Этот процесс занимает очень мало времени, потому что он от начала до конца осуществляется в памяти. Затем ядро анализирует и подтверждает правильность всех обновленных строк — и только после этого фиксирует их.
Данная схема организации обеспечивает более высокое быстродействие и большую степень масштабируемости, поскольку не допускает применения блокировок или других процессов, препятствующих функционированию процессора с максимальной скоростью. Однако при использовании рассматриваемого процесса в памяти остается некоторое число аннулированных строк. Для решения этой проблемы инженеры Microsoft реализовали новый процесс «сбора мусора» без блокировок, который периодически удаляет все ненужные строки.
Наряду с упомянутой новой схемой без блокировок Microsoft реализовала процесс компиляции, который компилирует интерпретируемый код SQL в собственный код. Цель данного процесса состоит в том, чтобы сократить число команд, которые процессор должен выполнить в ходе выполнения запроса. Ведь чем компактней код, тем быстрее он выполняется. В своем докладе Дэвид Девитт заявил, что благодаря реализации упомянутого процесса компиляции код, который должно выполнить ядро обработки в памяти, сокращается примерно в два с половиной раза. Ядра обработки в памяти баз данных OLTP также могут выполнять интерпретируемые запросы к таблицам Hekaton, но быстродействие при этом будет ниже, чем в случае применения компилированного кода. По оценке Дэвида, ядро обработки в памяти базы данных OLTP может обеспечить повышение производительности от 10 до 30 раз. В комплект поставки SQL Server 2014 будут включены мастера, которые укажут пользователю, какие таблицы следует конвертировать в ядро базы данных для обработки в памяти OLTP и какие хранимые процедуры нужно компилировать.
Перспективы
Сегодня уже ясно, что повышение производительности баз данных в дальнейшем будет достигаться за счет использования технологий размещения баз данных в оперативной памяти. С появлением нового ядра In-memory OLTP система SQL Server 2014 несомненно выходит на позиции лидера рынка в сфере технологий обработки в памяти.