Это То, Что Вы Никогда Не Забудете — Oracle Database In-Memory

Объемы баз данных и сложность запросов к ним всегда росли быстрее скорости их обработки.

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

В последние годы, кажется, наступил логический момент для этого.

Стоимость оперативной памяти падала, падала и упала совсем.

Еще в начале века казалось, что 256 МБ памяти для сервера — это нормально и даже много.

Сегодня нас не удивишь параметром в 256 ГБ ОЗУ на сервере начального уровня, а с промышленными серверами вообще наступил полный коммунизм; любой благородный дон может добавить на сервер хотя бы терабайт оперативной памяти, если захочет. Но дело не только в этом – появились новые технологии индексации данных, появились новые технологии сжатия данных – OLTP-сжатие, сжатие неструктурированных данных.

(LOB-сжатие).

В Oracle Database 11g, например, появилась технология Result Cache, которая позволяет кэшировать не только строки или индексы таблиц, но и сами результаты запросов и подзапросов.

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

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

Устанавливаешь больше памяти, увеличиваешь размер кэша, и система работает медленнее, и это, в общем-то, логично, ведь алгоритмы управления памятью, разработанные в раннем средневековье нашими прапрадедами, для эпохи Возрождения просто не подходят. , и это все.

Что делать? Вот что.

Напомним, что существует, по сути, две категории баз данных: строковые базы данных, которые хранят информацию в строковой форме как в буферном кеше в оперативной памяти, так и на диске — Oracle Database, Microsoft SQL Server, IBM DB/2, MySQL и т. д. ; и столбчатые СУБД, в которых информация хранится в столбцах и которые, к сожалению, не получили широкого распространения в отрасли.

Строковые базы данных хорошо справляются с OLTP-операциями, но для обработки аналитики, вы будете смеяться, больше подходят столбчатые базы данных — но операции DML для них являются проблемой, ну вы понимаете, почему.

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

И вот появилась технология Oracle Database In-Memory, которая наконец-то объединила в себе преимущества обоих подходов.



И что происходит?

Получается фантастически.

Обработка транзакций происходит в два раза быстрее, вставка строк — в 3-4 раза быстрее, запросы аналитики выполняются в реальном времени, практически мгновенно! Маркетологи говорят, что аналитика стала в сто раз быстрее, но скромничают, чтобы не пугать рынок; реальные результаты гораздо более впечатляющие.

Теперь давайте разберемся, как и почему это работает. Итак, технология появилась в версии Oracle Database 12.1.0.2, а смысл ее в том, что рядом с нашим привычным буферным кешем, в котором хранятся строки таблиц и индексные блоки, появился новый кеш, а точнее новая общая область для данных в оперативной памяти, в котором данные из таблиц хранятся в столбчатом формате! Вы понимаете, да? Форматы хранения строк и столбцов в памяти для одних и тех же данных и таблиц! Более того, данные активны и транзакционно согласованы.

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

Несколько важных деталей.

Во-первых, в столбчатом кэше отражаются только таблицы, то есть индексы не кэшируются — это первое.

Во-вторых, технологии не выполняют лишней работы.

Если данные читаются, но не изменяются, то нет необходимости хранить их в обычном, то есть строковом буферном кэше.

Но если данные изменяются, то их необходимо хранить в обоих кэшах, буфере и столбце.

Ну и соответственно аналитика работает быстрее, потому что для нее более эффективно столбчатое представление информации.

Это второй.

И в-третьих – еще раз, чтобы было понятно.

Столбчатый кэш не хранит блоки данных с диска.

В блоках на диске информация хранится в строках.

В столбчатом кэше информация хранится в столбцах в своем собственном представлении, в так называемых «единицах сжатия» в памяти.

Это третий.



А теперь подробности

Мы поняли, что аналитика работает в сотни раз быстрее, потому что столбчатое представление для нее более эффективно — и, собственно, почему? В обычном буферном кэше информация хранится построчно.

Вот пример: вам нужно извлечь столбец №4 из таблицы с четырьмя столбцами.

Для этого вам придется полностью просканировать всю эту пластину в оперативной памяти:

Это то, что вы никогда не забудете — Oracle Database In-Memory

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

в одном блоке памяти.

Мы можем сразу его выбрать, тут же прочитать и вернуть в приложение.

Снижаются затраты на сканирование и отправку этих данных в процессор, а также снижается нагрузка на процессор.

Все работает гораздо быстрее.



Это то, что вы никогда не забудете — Oracle Database In-Memory

Подобные операции сканирования очень типичны для ERP-приложений и хранилищ данных в аналитических системах.

Согласитесь, это необходимая вещь для прогресса человечества.

Технически, чтобы это запустить, нужно включить кеширование нужных столбцов таблицы.

Для этой цели существует специальное расширение синтаксиса команды ALTER TABLE:

 
 SQL> ALTER TABLE cities
  
Теги: #oracle #база данных Oracle #SBD #база данных #oracle
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.