Объемы баз данных и сложность запросов к ним всегда росли быстрее скорости их обработки.
Поэтому лучшие умы человечества уже много лет думают о том, что будет, когда оперативной памяти станет столько, что можно будет взять всю базу данных и поместить ее в кэш ОЗУ.
В последние годы, кажется, наступил логический момент для этого.
Стоимость оперативной памяти падала, падала и упала совсем.
Еще в начале века казалось, что 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 из таблицы с четырьмя столбцами.
Для этого вам придется полностью просканировать всю эту пластину в оперативной памяти:
Что произойдет, если та же таблица будет храниться в столбчатом формате? Весь четвертый столбец нашей таблицы находится в одном экстенте, т.е.
в одном блоке памяти.
Мы можем сразу его выбрать, тут же прочитать и вернуть в приложение.
Снижаются затраты на сканирование и отправку этих данных в процессор, а также снижается нагрузка на процессор.
Все работает гораздо быстрее.
Подобные операции сканирования очень типичны для ERP-приложений и хранилищ данных в аналитических системах.
Согласитесь, это необходимая вещь для прогресса человечества.
Технически, чтобы это запустить, нужно включить кеширование нужных столбцов таблицы.
Для этой цели существует специальное расширение синтаксиса команды ALTER TABLE:
SQL> ALTER TABLE citiesТеги: #oracle #база данных Oracle #SBD #база данных #oracle
-
Речь
19 Oct, 24 -
Ubuntu И Debian Linux Для Продвинутых
19 Oct, 24 -
Черный Чемодан Чубайса
19 Oct, 24