1. www.partner.fors.ru 1
Новая опция
Oracle Database 12c
In-Memory
Валерий Юринский
Директор отделения технологического консалтинга
vyourinsky@fors.ru
14 октября 2015 г.
4. www.partner.fors.ru 4
Оперативная память: тренды и влияние
Сегодня память быстрее, дешевле и ее объем больше
Объемы памяти растут
2002 256 MB/DIMM
2012 16 GB/DIMM
Стоимость памяти падает
2002 $0.2/MB
2012 $0.009/MB
Память становится
значительно быстрее
Disk
5ms – скорость
доступа
DRAM
100ns – скорость
доступа
64x больше емкости 25x дешевле 50,000х быстрее
Ускорение OLTP и DW приложений, больше пользователей, больше данных
DRAM:
2012 $0.0005/MB2012 100 GB/DOM Flash 0.25ms – скорость
доступа
400x больше емкости 400x дешевле 20x быстрееFlash:
5. www.partner.fors.ru 5
Oracle In-Memory Database
Лучшие технологии для обработки данных в памяти
12c Release 1
• Big Memory Cluster
& 2x more index compression
on Exadata
• Rowset Processing
• In-Memory Column Store
for Unstructured Data
• OLTP Wide Table
Compression
• HCC Row Level Locking
Приложение
работает с
памятью без
изменений!
Комбинация DRAM, Flash и HDD
Быстрой памяти и стоимости дисков
Без ограничений на размер БД
2007 2012До 2007 20092008
• 20+ years of scale-up
optimizations
• 10+ years of scale-out
optimizations
• Prefix Index Compression
• Bitmap Index Compression
• Basic & IOT Table
Compression
• And much more
• In-Memory Parallel Query
• OLTP Compression
• Unstructured Data
Compression
• Client SQL/PL/SQL Result
Cache
• Server SQL/PL/SQL Result
Cache
• In-Memory Column Store for
DW
• Columnar Compression
• Columnar Processing
• Cache Fusion Optimizations
• In-Memory Parallel Query
Optimizations
• In-Memory Storage Index on
Exadata Storage
6. www.partner.fors.ru 6
Приходилось выбирать один формат и идти на компромиссы
Давнее противоречие
Строчный формат и поколоночный формат
Row
OLTP-операции работают быстрее со построчным форматом
– Пример: Выборка или добавление заказа
– Быстрая обработка немного строк, много столбцов
Column
Аналитика работает быстрее с поколоночным форматом
– Пример: Отчет о сумме продаж по штату
– Быстрый доступ немного столбцов, много строк
ORDER
SALES
SALES
S
T
A
T
E
7. www.partner.fors.ru 7
Давнее противоречие
Строчный формат и поколоночный формат
Row
Выборка одного заказа в построчном формате
- Обращение к одной непрерывной строке
= БЫСТРО
Column
Выборка одного заказа в поколоночном формате
- Обращение к нескольким столбцам
= М Е Д Л Е Н Н О
SALES
StoresSALES
Query
Query
Query
Query
Query
Приходилось выбирать один формат и идти на компромиссы
11. www.partner.fors.ru 11
Задачи Oracle Database In-Memory Option
В 100 раз быстрее запросы для аналитики в
реальном времени
Мгновенное получение результата
Запросы к OLTP базе или хранилищу данных
Актуальные данные в результатах!
В 2 раза ускоряется обработка транзакций
Вставка строк в 3 – 4 раза быстрее
12. www.partner.fors.ru 12
Прорыв: база данных с двойным форматом
• Использует OБA (два) формата
для одной таблицы: строчный и
поколоночный
• Работают совместно,
транзакционно согласованы
• Аналитика и отчетность
используют новый
поколоночный формат In-
Memory
• OLTP использует проверенный
построчный формат
Обычный
Buffer Cache
Новый формат
In-Memory
SALES SALES
Строчный
формат
Поколоночный
формат
SALES
13. www.partner.fors.ru 13
Oracle In-Memory Columnar Technology
Оперативная память
Истинно поколоночный
In-Memory Column Store (IMCS) -
постолбцовое оперативное
хранилище
Истинно поколоночное (pure
columnar) хранение в памяти
изменяемые данные
нет генерации REDO-данных
Минимальные затраты на
изменения – даже для OLTP-
транзакций
Данные загружаются в кэш при
первом обращении
14. www.partner.fors.ru 14
И строчный, и поколоночный
формат хранения в памяти для
одних и тех же данных/таблиц
Данные одновременно активны
и транзакционно согласованы
В 100 раз быстрее аналитика &
отчетность: поколоночный
формат
В 2 раза быстрее OLTP:
строчный формат
In-Memory Option: Оба формата в памяти СУБД
Column
Format
Memory
Row
Format
Memory
AnalyticsOLTP
Sales Sales
15. www.partner.fors.ru 15
Oracle Instance 12c без In-Memory
Instance
SGA
Redo log
buffer cache
Shared pool
Data Dict.
cache
Library
cache
DBWRSMONPMON CKPTLGWR Others
Database
buffer cache
Shared pool
Data Dict.
cache
Library
cache
DBWRSMONPMON CKPTLGWR Others
16. www.partner.fors.ru 16
Oracle In-Memory: отдельный кэш в SGA
Instance
SGA
Redo log
buffer cache
Shared pool
Data Dict.
cache
Library
cache
DBWRSMONPMON CKPTLGWR Others
Database
buffer cache
SQL> ALTER SYSTEM SET inmemory_size=512G SCOPE=SPFILE;
Instance
SGA
Redo log
buffer cache
Shared pool
Data Dict.
cache
Library
cache
DBWRSMONPMON CKPTLGWR Others
In-row
buffer cache
In-Memory
Columnar
Cache
Статический параметр INMEMORY_SIZE
17. www.partner.fors.ru 17
Статический пул в SGA
Соответственно должен быть увеличен параметр SGA_TARGET
SQL> SELECT * FROM V$SGA;
NAME VALUE
------------------ ---------
Fixed Size 2927176
Variable Size 570426808
Database Buffers 4634022912
Redo Buffers 13848576
In-Memory Area 1024483648
19. www.partner.fors.ru 19
SELECT COL4 FROM MYTABLE;
RESULT
Колоночный формат
In-Memory кэш
РЕЗУЛЬТАТ
X
X
X
X
Почему сканирование In-Memory быстрее чем в
буферном кэше?
20. www.partner.fors.ru 20
Включение постолбцового представления для
таблицы или mview
Включение постолбцового представления для группы столбцов
Кэшироваться может не вся таблица, а только часть её столбцов!
SQL> ALTER TABLE cities
INMEMORY
INMEMORY (Id, Name, Country_Id, Time_Zone)
NO INMEMORY (Created, Modified, State);
Table altered.
SQL> ALTER MATERIALIZED VIEW cities_mv INMEMORY;
Materialized view altered.
•Служебные столбцы – не
участвуют в отчетах:
нужны только для бизнес-
логики
21. www.partner.fors.ru 21
Включение постолбцового представления для
табличного пространства и секции
Все таблицы и mview в табличном пространстве будут
представлены в постолбцовом оперативном хранилище (IMCS)
SQL> ALTER TABLESPACE tbs_data DEFAULT INMEMORY
MEMCOMPRESS FOR CAPACITY HIGH
PRIORITY LOW;
Tablespace altered.
То же, на уровне секций таблицы
SQL> CREATE TABLE customers ……
PARTITION BY LIST
(PARTITION p1 …… INMEMORY,
(PARTITION p2 …… NO INMEMORY);
22. www.partner.fors.ru 22
Изменение плана запроса
SQL-оптимизатор перестраивает план запроса
SQL> SELECT count(*) FROM cities;
Execution Plan
----------------------------------------------------------
Plan hash value: 2756775702
---------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)|
---------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 0 (0)|
| 1 | SORT AGGREGATE | | 1 | |
| 2 | TABLE ACCESS INMEMORY FULL| CITIES | 1 | |
---------------------------------------------------------------------
23. www.partner.fors.ru 23
Сканирование миллиарда строк в секунду на
процессорном ядре
SIMD
Compare all
values in 1
cycle
Сравнение
всех
значений за
один цикл
Загрузка
значений
множества
штатов
Vector
Register
In-Memory Column Store
State columnSales
Пример: Найти все продажи в штате CA
“CA”
более
чем в 100
раз
быстрее
• Каждое процессорное ядро
сканирует одну колонку
• При сканировании
используются быстрые
векторные SIMD-
инструкции
• Миллиарды строк в
секунду сканируются
одним ядром
CPU
24. www.partner.fors.ru 24
При первом обращении к сегменту для которого включен атрибут
in-memory начинается наполнение постолбцового оперативного
хранилища (In-Memory Column Store = IMCS)
Oracle In-Memory: “разогрев” IMCS
25. www.partner.fors.ru 25
Сканирование и соединение данных из
нескольких таблиц
Продажи
Магазины
Type=outlet
Пример: Найти все продажи в outlet-магазинах
T
Y
P
E
Storeid
in
15,38,64
S
T
O
R
E
I
D
A
M
O
U
N
T
Преобразует
соединения (joins) в
быстрые фильтры по
столбцам
За счет этого
соединения (joins)
выполняются в 10 раз
быстрее
Sum
27. www.partner.fors.ru 28
Cжатие столбцов в IMCS
Метод сжатия Описание
NO MEMCOPRESS Данные не сжимаются
MEMCOMPRESS FOR DML Метод сжатия оптимизированный для DML-
операций
MEMCOMPRESS FOR QUERY LOW Метод по умолчанию. Наилучший вариант для
выполнения запросов.
MEMCOMPRESS FOR QUERY HIGH Сжатие выше, чем при FOR QUERY LOW, но ниже,
чем при FOR CAPACITY LOW
MEMCOMPRESS FOR CAPACITY LOW Сжатие выше, чем при FOR QUERY HIGH, но ниже,
чем при FOR CAPACITY HIGH
MEMCOMPRESS FOR CAPACITY
HIGH
Сжатие выше, чем при FOR CAPACITY LOW
28. www.partner.fors.ru 29
Cжатие столбцов в IMCS - пример
Сжатие разными методами для группы столбцов
SQL> ALTER TABLE cities
INMEMORY
INMEMORY MEMCOMPRESS FOR CAPACITY HIGH(Country_Id, Time_Zone)
INMEMORY NO MEMCOMPRESS (Id, Name, Name_Eng);
Table altered.
•Уникальные столбцы – не
сжимаются!
29. www.partner.fors.ru 30
Поддержка в Compression Advisor
DECLARE
l_blkcnt_cmp BINARY_INTEGER;
l_blkcnt_uncmp BINARY_INTEGER;
l_row_cmp BINARY_INTEGER;
l_row_uncmp BINARY_INTEGER;
l_cmp_ratio NUMBER;
l_comptype_str VARCHAR2(100);
BEGIN
dbms_compression.get_compression_ratio
--input parameters
scratchtbsname => 'USERS', -- scratch tablespace
ownname => ‘INMEM_DEMO', -- owner of the table
objname => ‘TICKETS', -- table name
subobjname => NULL, -- partition name
comptype => DBMS_COMPRESSION.COMP_INMEMORY_QUERY, -- compression algorithm
--output parameters
blkcnt_cmp => l_blkcnt_cmp, -- number of compressed blocks
blkcnt_uncmp => l_blkcnt_uncmp, -- number of uncompressed blocks
row_cmp => l_row_cmp, -- number of rows in a compressed block
row_uncmp => l_row_uncmp, -- number of rows in an uncompressed block
cmp_ratio => l_cmp_ratio, -- compression ratio
comptype_str => l_comptype_str);-- compression type
END;
30. www.partner.fors.ru 31
Атрибут INMEMORY в *_TABLES
SQL> SELECT table_name,
inmemory
FROM USER_TABLES;
TABLE_NAME INMEMORY
------------ --------
CHANNELS DISABLED
COSTS
CUSTOMERS DISABLED
PRODUCTS ENABLED
SALES
TIMES DISABLED
Новый столбец INMEMORY в
представлениях словаря
*_TABLES
INMEMORY – это атрибут
сегмента
*_TABLES не отображают
атрибуты логических объектов
COST и SALES –
секционированные таблицы
(логические объекты)
Столбец INMEMORY также
появился в *_TAB_PARTITIONS
31. www.partner.fors.ru 32
Системное представление [G]V$IM_SEGMENTS
SQL> SELECT
segment_name,inmemory_size,bytes,bytes_not_populated,populate_status
FROM
v$im_segments;
SEGMENT_NAME INMEMORY_SIZE BYTES BYTES_NOT_POPULATED POPULATE_STATUS
--------------------------------------------------------------------------
COUNTRIES 131072 5242880 425984 STARTED
CITIES 1179648 5242880 0 COMPLETED
COMPANIES 1179648 5242880 0 COMPLETED
AIRPORTS 1179648 5242880 0 COMPLETED
Мониторинг использования кэша
32. www.partner.fors.ru 33
Управление приоритетом загрузки в кэш
Приоритет Синтаксис Описание
• NONE
(default)
PRIORITY NONE • Приоритет загрузки определяется
СУБД. Загрузка может быть
задержана, если память используется
для другого более приоритетного
сегмента. - Запрос переключаетcя на
обычный (in-row) кэш.
• LOW PRIORITY LOW • Низкий приоритет
• MEDIUM PRIORITY MEDIUM • Средний приоритет
• HIGH PRIORITY HIGH • Высокий приоритет
• CRITICAL PRIORITY CRITICAL • Наивысший приоритет
33. www.partner.fors.ru 34
Приоритет загрузки в IMCS - пример
Один приоритет для всей таблицы/секции/мат. представления
SQL> ALTER TABLE cities
INMEMORY
PRIORITY CRITICAL
INMEMORY MEMCOMPRESS FOR CAPACITY HIGH(Country_Id, Time_Zone)
INMEMORY MEMCOMPRESS NO (Id, Name, Name_Eng);
Table altered.
34. www.partner.fors.ru 35
OLTP работает медленно из-за аналитических
индексов
Таблица
1 - 3
OLTP
индекса
10 - 20
аналитических
индексов
Большинство индексов в OLTP
(например, в ERP) базах
строится только для
аналитических запросов
Индексы хорошо подходят для
предсказуемых запросов (и в
памяти, и на диске)
Вставка одной строки в таблицу
приводит к обновлению 10-20
аналитических индексов:
Медленно!
Поколоночное
хранение в памяти
35. www.partner.fors.ru 36
Oracle In-Memory – высокая доступность
Представление по столбцам в
памяти не влияет на формат данных
на диске: datafiles, logging, backup,
recovery, и т.д.
Все технологии, в том числе ASM,
RAC, DG, GG работают прозрачно
для In-Memory Option
Защита от любых видов ошибок
• На уровне железа
• Логические ошибки
приложения (Flashback)
RAC
ASM
RMAN
Data Guard & GoldenGate
36. www.partner.fors.ru 37
Oracle In-Memory в RAC
Управление распределением объектов в кэше между узлами RAC:
– AUTO DISTRIBUTE – синхронизацией кэша управляет СУБД
(поведение по умолчанию)
– DUPLICATE – (ES-only) кэши принудительно синхронизируются между
узлами RAC (2 копии chunk-а кластер)
– DUPLICATE ALL – ( ES-only) кэши одинаковы
на всех узлах RAC
– DISTRIBUTE BY
ROWID RANGE,
PARTITION,
SUBPARTITION
SQL> ALTER TABLE cites INMEMORY
DUPLICATE;
Table altered.
In Memory
Column
Store
In Memory
Column
Store
In Memory
Column
Store
In Memory
Column
Store
37. www.partner.fors.ru 38
Полный синтаксис кэширования таблицы
Мощный и гибкий синтаксис
SQL> ALTER TABLE cities
INMEMORY
PRIORITY CRITICAL
DUPLICATE
INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (Country_Id, Time_Zone)
INMEMORY MEMCOMPRESS NO (Id, Name, Name_Eng)
NO INMEMORY (Created, Modified, State);
Table altered.
38. www.partner.fors.ru 39
Подсказки для оптимизатора
Включение/выключение columnar-кэширования и pruning-а
SQL> SELECT /*+ NO_INMEMORY (mytbs) */
sum(a.amount)
FROM
cities c,
amounts a
WHERE
c.id = a.city_id;
Новые хинты:
– INMEMORY, NO_INMEMORY
– INMEMORY_PRUNING, NO_INMEMORY_PRUNING
39. www.partner.fors.ru 40
Хранит минимальное
и максимальное
значение столбца в
каждом экстенте
памяти кэша
Прозрачно исключает
ненужные
сканирования столбцов,
например:
WHERE prod_id > 14
AND prod_id < 29
Storage Index в In-Memory Columnar Store
40. www.partner.fors.ru 41
DML and the In-Memory Column Store
• Каждый объект помещенный в Column
Store состоит из множества колоночных
элементов (column units=IMCU)
/Each object populated in the Column Store is
actually made up of multiple column units (IMCU)/
• Каждый колоночный элемент содержит
значения столбца для подмножества
(нескольких) строк объекта
/Each column unit contains the column
entries for a subset of rows in the object/
• В зависимости от типа данных и степени
сжатия колоночные элементы могут
быть разного размера
/Column units can vary in size depending
on datatypes used and compression rates/
Memory
SALES
Column
Format
41. www.partner.fors.ru 42
DML and the In-Memory Column Store
Memory
Column
Format
IMCU IMCU
IMCU IMCU
IMCU IMCU
IMCU IMCU
IMCU IMCU
• Каждый объект помещенный в Column
Store состоит из множества колоночных
элементов (column units=IMCU)
/Each object populated in the Column Store is
actually made up of multiple column units (IMCU)/
• Каждый колоночный элемент содержит
значения столбца для подмножества
(нескольких) строк объекта
/Each column unit contains the column
entries for a subset of rows in the object/
• В зависимости от типа данных и степени
сжатия колоночные элементы могут
быть разного размера
/Column units can vary in size depending
on datatypes used and compression rates/
42. www.partner.fors.ru 43
DML and the In-Memory Column Store
• Каждый колоночный элемент (IMCU)
содержит значения столбца для
подмножества (нескольких) строк
объекта
/Each IMCU contains the column entries for a
subset of rows in the object/
• У каждого IMCU имеется связанный с
ним журнал транзакций
/Each IMCU also has a transaction journal
associated with it/
• Журнал транзакций используется для
поддержания транзакционной
согласованности Column Store
/The transaction journal is used to keep the IM
column store transactionally consistent/
Memory
Column
Format
IMCU
JOURNAL
43. www.partner.fors.ru 44
JOURNAL
DML and the In-Memory Column Store
• Операции DML обрабатываются
обычным образом в обычном
строчном хранилище
/DML operations processed in row store
just as they are today/
Memory
Column
Format
• Соответствующие измененным
строкам элементы Column Store
помечаются, Как "устаревшие"
/Corresponding entry in column store
marked stale/
• Копия измененных строк хранятся в
транзакционном журнале
/Copy of changed row stored in the
Transaction Journal/
IMCU
44. www.partner.fors.ru 45
JOURNAL
DML and the In-Memory Column Store
• In-Memory Column Store никогда не
устаревает
/In-Memory Column Store is never out of
date/
• Согласованность по чтению
достигается объединением
актуального содержимого столбцов
и транзакционного журнала
/Read consistency achieved by merging
contents of column and the transaction
journal/
Memory
Column
Format
IMCU
45. www.partner.fors.ru 46
DML and the In-Memory Column Store
• Когда число записей в
транзакционном журнале достигает
определенного порогового
значения, колоночный элемент
автоматически обновляется
/When number of entries in transaction
journal hits an internal threshold CU
automatically refreshed/
• Column Store всегда доступен,
Поскольку обновление
выполняется online
/This is an online operation – column store
always available/
Memory
Column
Format
JOURNAL
IMCU
46. www.partner.fors.ru 47
Space Manager
Управляет памятью в In-
Memory Column Store
(create, extend, drop)
Загружает данные в кэш
Transaction Manager
Обеспечивает
согласованность данных
в In-Memory Column
Store с буферным
кэшем
Обеспечивает
версионность
In-Memory Option - архитектура
48. www.partner.fors.ru 49
Для каких приложений подходит Database In-
Memory Option?
Если в приложении есть много запросов сканирующих много строк
с фильтрами такими как: “=, <, >, и IN”
Запрашивает всего лишь несколько столбцов, напр: 5 столбцов из
100 столбцов таблицы
Приложение часто делает соединение большой таблицы фактов с
таблицами измерений с фильтрами по ним (выборка не по всем
значениям измерений, а по их части)
Типы приложений предпочтительные для использования In-
Memory Option:
– хранилища данных (Data Warehouse)
– cмешанного типа (Mixed Application)
49. www.partner.fors.ru 50
Oracle In-Memory Options не требует изменения
приложений
Полная функциональность - Нет ограничений на SQL
Простота реализации - Не нужна миграция данных
Полная совместимость - Не надо изменять приложения
Полностью Multitenant - Oracle In-Memory готова для cloud
Приложения получают все преимущества In-Memory опции без изменения кода приложения
50. www.partner.fors.ru 51
Oracle Database 12c Runs SAP Applications 2x Faster
Than SAP HANA
По Why Risk Disrupting Your Business with SAP HANA?
Oracle Database In-Memory is 100 percent compatible with all existing
applications, therefore there is no need to rewrite your application to take
advantage of it. No complexity, no compromises, no risks. Modern in-memory
technology that simply and seamlessly works with your business—not the other
way around. In contrast, with SAP HANA, the application will need to be
rewritten, spending precious resources, time, and budget.
Get Analytics 2x Faster Than with SAP HANA
Oracle Database In-Memory implements state-of-the-art technology to
accelerate analytics by orders of magnitude to allow users to get
immediate answers to business questions that previously took hours. This
same Oracle in-memory technology is proven to speed up SAP
applications 2x faster than SAP HANA on SAP's own benchmarks.
Read the Benchmark white paper*
https://www.oracle.com/corporate/features/oracle-powers-sap.html
15-sep-2015
54. www.partner.fors.ru 55
Данные для "тренировочных забегов" в In-Memory
Схема данных Схема типа "Звезда"
Вариация стандартной
схемы теста TPC-H –
производительность
хранилища данных (DWH)
Схема построена для
масштаба 100 ГБ (100 GB
scale factor)
Таблица Объем, МБ Кол-во строк
CUSTOMER 2 309,2 15 000 000
DATE_DIM 0,2 2 556
LINEORDER 42 279,0 600 019 253
PART 1 778,1 20 000 000
SUPPLIER 147,5 1 000 000
Compression BASIC
55. www.partner.fors.ru 56
In-Memory Column Store
Конфигурирование
Sun Server T5-2 – RAM 512 GB
SQL> SHOW SGA
Total System Global Area 498 216 206 336
Fixed Size 7 663 664
Variable Size 147 102 633 936
Database Buffers 243 202 523 136
Redo Buffers 529 203 200
In-Memory Area 107 374 182 400
Размер устанавливается параметром INMEMORY_SIZE
(Minimum IN_MEMORY_SIZE = 100MB)
56. www.partner.fors.ru 57
Заполнение Buffer Cache и In-Memory Column Store
Установка параметров Cache и In-Memory
-- Устанавливается для эксперимента, чтобы не было дисковых операций
ALTER TABLE CUSTOMER CACHE;
ALTER TABLE DATE_DIM CACHE;
ALTER TABLE LINEORDER CACHE STORAGE (BUFFER_POOL KEEP);
ALTER TABLE PART CACHE;
ALTER TABLE SUPPLIER CACHE;
-- Указание на размещение в In-Memory Column Store
ALTER TABLE CUSTOMER INMEMORY;
ALTER TABLE DATE_DIM INMEMORY;
ALTER TABLE LINEORDER INMEMORY;
ALTER TABLE PART INMEMORY;
ALTER TABLE SUPPLIER INMEMORY;
57. www.partner.fors.ru 58
Заполнение Buffer Cache и In-Memory Column Store
In-Memory Column Store
-- Заполнение Buffer Cache
-- и инициирование заполнения In-Memory Column Store
SELECT /*+ FULL(T) NO_PARALLEL */ COUNT(*) FROM CUSTOMER T;
SELECT /*+ FULL(T) NO_PARALLEL */ COUNT(*) FROM DATE_DIM T;
SELECT /*+ FULL(T) NO_PARALLEL */ COUNT(*) FROM LINEORDER T;
SELECT /*+ FULL(T) NO_PARALLEL */ COUNT(*) FROM PART T;
SELECT /*+ FULL(T) NO_PARALLEL */ COUNT(*) FROM SUPPLIER T;
58. www.partner.fors.ru 59
Заполнение Buffer Cache и In-Memory Column Store
100 GB Scale Factor
WITH bh AS (SELECT objd, file#, ROUND(COUNT(block#)*16384/1024/1024, 1) AS mbytes
FROM v$bh group by objd, file#)
SELECT T.table_name, bh.mbytes AS buff_cache_mb
, ROUND(T.blocks*16384/1024/1024,1) AS tab_mb, num_rows
FROM bh, user_objects O, user_tables T
WHERE bh.objd = O.object_id AND T.table_name = O.object_name
AND O.object_name IN ('LINEORDER', 'DATE_DIM', 'CUSTOMER', 'SUPPLIER', 'PART')
ORDER BY O.object_name;
TABLE_NAME BUFF_CACHE_MB TAB_MB NUM_ROWS
CUSTOMER 2303,1 2309,2 15 000 000
DATE_DIM 0,2 0,2 2 556
LINEORDER 42234,1 42279 600 019 253
PART 1772,6 1778,1 20 000 000
SUPPLIER 146,1 147,5 1 000 000
72. www.partner.fors.ru 73
Использование Storage Index
IM scan CUs pruned 125
IM scan CUs columns accessed 935
IM scan segments minmax eligible 1058
Был доступ к 933 IMCU (1058 – 125 = 933)
плюс еще к двум для получения lo_custkey и lo_revenue
933 + 1 + 1 = 935
76. www.partner.fors.ru 77
Index Range Scan
SQL> ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES = TRUE;
Session altered.
SQL> Select /* With index */ lo_orderkey, lo_custkey, lo_revenue
2 From LINEORDER
3 Where lo_orderkey = 5000000;
LO_ORDERKEY LO_CUSTKEY LO_REVENUE
----------- ---------- ----------
5000000 9532031 145267
. . .
Elapsed: 00:00:00.45
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4 | 76 | 7 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| LINEORDER | 4 | 76 | 7 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | LINEORDER#I#LO_ORDERKEY | 4 | | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------
SQL> ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES = FALSE;
Session altered.
77. www.partner.fors.ru 78
In-Memory Scan vs Index Range Scan
SQL> SELECT segment_name, ROUND(bytes/1024/1024) AS mbytes
2 FROM user_segments
3 WHERE segment_name = 'LINEORDER#I#LO_ORDERKEY';
SEGMENT_NAME MBYTES
----------------------- -------
LINEORDER#I#LO_ORDERKEY 11520 <-- 11.5 GB
Время одинаковое, но индекс занимает место, замедляет
DML и его нужно администрировать: наблюдать,
перестраивать, собирать статистику и т.п.
Index range Scan/In-Memory Scan
= 0.44s/0.45s = 1
92. www.partner.fors.ru 93
Database In-Memory
When will an object benefit from being in the IM column store?
Storing a database object in the IM column store can improve
performance significantly for the following types of operations performed
on the database object:
– A query that scans a large number of rows and applies filters that use
operators such as the following: =, <, >, and IN
– A query that selects a small number of columns from a table or materialized
view with a large number of columns, such as a query that selects five
columns from a table with 100 columns
– A query that joins a small table to a large table
– A query that aggregates data
93. www.partner.fors.ru 94
Database In-Memory
When will an object not benefit from being in the IM column store?
– Queries with complex predicates
– Queries that select a large number of columns
– Queries that return a large number of rows
– Queries with multiple large table joins
95. www.partner.fors.ru 96
Наблюдения-выводы
– Database In-Memory – это панацея от многих, но не от всех бед
– При адекватном применении Database In-Memory дает огромный
прирост производительности запросов
– Упразднение индексов для поиска данных в хранилище (DWH)
существенно повышает скорость выполнения операций
запоминания (INSERT, UPDATE, DELETE)
Не снижает скорость выполнения запросов, поскольку выборка
средствами In-Memory, как минимум, не медленнее индексного
доступа
– Не стоит "пихать" In-Memory "во все углы", т.к. некоторые углы могут
"рассыпаться" :-(
– Никогда не забываем: Все проблемы решаемы при вдумчивой
аккуратной работе!
97. www.partner.fors.ru 98
Приходите в наш Центр решений!
Все покрутим, повертим, попробуем!
У нас есть чему и на чём поучиться!
(с) Валерий Юринский и все, все, все ФОРС