Exadata Storage Server, part 1

Как я писал, на Open World было объявлено о Database Machine и Exadata Storage Server. Данная заметка, первая из серии, об Exadata.
Отмазка:
Сразу оговорюсь - моя цель написать максимально доступно, а значит, не всегда абсолютно технически верно. Также я сделал массу предположений, которые могут оказаться неправильными.

Благодаря служебному положению, у меня есть доступ к Exadata Storage Software, я потихоньку разбираюсь, как оно все работает.



Идея:
В хранилищах данных при обработке запросов между дисковым массивом и сервером СУБД передается слишком много данных. Даже если мы делаем выборку по определенному региону, нам нужно передать информацию блоками данных (8K или даже 16K) в которых нам полезными могут оказаться 100 или 200 байт. Все эти блоки данных нужно передать через SAN маршрутизаторы, SAN адаптеры, выделить под них память с ОС, отфильтровать не нужные нам записи и колонки. Что если уже на выходе дискового массива к нам придут только нужные записи и колонки ? Было бы неплохо. Но для этого дисковый массив должен знать структуру блока и немного понимать SQL.

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

Реализация:
Аппаратная реализация - мы собираем наш дисковый массив (storage server) из ячеек (cell), в каждой ячейке HP ProLiant DL180 G5, 12 дисков, 2 - 4-x ядерных процессора. Используя SAS диски, получаем 1.5 Tb, SATA - 3,3 Tb. В каждой ячейке 2 InfiniBand порта.



Программная реализация - Oracle Unbkreakable Linux + Oracle Exadata Storage Software. Последнее - это не ASM и не Database. Это некоторое новое ПО. Ниже я попытаюсь пояснить, что оно делает.

Раз Exadata - это дисковый массив, значит его нужно подключить к нашему серверу БД.
На сервере БД у нас есть ASM. Значит ASM должен увидеть нашу Exadata как внешний storage. Чтобы ASM увидел, мы создаем пару конфигурационных файлов в /etc/oracle/network/cell директории. А раз возникает новая функциональность, то поддерживается она только начиная с версии 11.1.0.7.

По пржнему, ASM выполняет всю свою работу - поддержание striping, mirroring, rebalancing и пр. БД выполняет свою - разбор SQL выражений, и определение, нельзя ли попросить storage выполнить ту или иную часть SQL запроса. Чтобы стало совершенно понятно, где что стоит, привожу картинку.



Обратите внимание на специальный уровень libcell & процесс diskmon.

Так что же умеет Oracle Exadata Storage Software ?

По крайне мере 3 вещи:

  • Зная структуру блока, обеспечивает фильтрацию данных и возвращение результата используя протокол iDB. Я думаю, что Exadata умеет фильтровать не сложные условия. Например если в условие влючить pl/sql функцию, то Exadata может вернуть данные, основвывая только на других предикатах, а окончательная фильтрация будет осуществляться на стороне сервера БД
  • Управление правами доступа между серверами БД и управление нагрузкой.
  • Реализует проверку блоков БД при вводе - выводе ( HARD инициатива)

Что же мы видим со стороны сервера БД ?

Вот такой план выполнения со словами TABLE ACCESS STORAGE FULL.


TTDEMO@orcl > select count(*) from cell_accounts;

COUNT(*)
----------
1000000

TTDEMO@orcl > select plan_table_output from table(dbms_xplan.display_cursor(null,null,'BASIC ROWS +NOTE +COST +PEEKED_BINDS'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
EXPLAINED SQL STATEMENT:
------------------------
select count(*) from cell_accounts

Plan hash value: 3481329747

-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)|
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 1504 (100)|
| 1 | SORT AGGREGATE | | 1 | |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 2 | TABLE ACCESS STORAGE FULL| CELL_ACCOUNTS | 808K| 1504 (1)|
-------------------------------------------------------------------------


FAQ:

Q. Поддерживает ли Exadata Advanced Compression ?
A. Поскольку компрессия работает на уровне блока, для того, чтобы посмотреть в блок ничего не надо, достаточно знать как блок устроен. Поэтому, да.

Q. Поддерживает ли Exadata Advanced Security ?
A. Для того, чтобы расшифровать блок, нужно знать ключ. Пока нет описанного метода передачи ключей между серверов БД и Exadata. Поэтому, скорее, нет.


Q. Нужно ли модифицировать приложение, чтобы оно использовало Exadata Storage ?
A. Нет. Любое существующее приложение будет работать с Exadata как с обычным массивом. Для приложения существуют лишь таблицы, расположенные в табличных пространтсвах на группах ASM. Но приложение может получить прирост производительности, если выполняет тяжелые запросы к БД.

Благодарности: Андрею Пивоварову (Andrey.Pivovarov, oraclebi.ru) за мозговой штурм в части как-оно-там-работает-на-самом-деле.

Ссылки:
exadata-technical-whitepaper.pdf (объект «application/pdf»)
Kevin Closson blog

Осталась масса вопросов - какие приложения получат выигрыш, какие нет, как мигрировать, как смотреть планы и так далее.
Продолжение следует...

Комментариев нет:

Отправить комментарий