Monday, March 19, 2012

Какие приложения буду "взлетать" на Экзадате ?


Exadata
All cores
DB
Storage
% Storage
Nodes
Cores
Nodes
Cores
1/4
60
2
24
3
36
60
1/2
132
4
48
7
84
64
FULL
264
8
96
14
168
64





Экзадата построена в соответствии с определенной пропорцией 4 к 7, между количеством серверов БД и серверов хранения.

Серверы системы хранения составляют около 60-64% вычислительной мощности Экзадаты.

В серверах системы хранения, работает часть большой СУБД 11.2, способная в основном выполнять только Select и немножко другой работы.

Если Вы планируете в полной мере задействовать Экзадату, то Вам необходимо в первую очередь перенести нагрузку на систему хранения.

А это означает, что доля Select в Вашем приложении должна быть как минимум 64%.

Причем, 64% - это доля тех Select, которые не требуют read consistency.

Если к тому же, доля DML-операций в приложении составляет еще процентов 15-20%, то доля SQL в вашем приложении должна составлять 64+20 = т.е. около 80-85%. Т.е. доля всех остальных рабочих модулей:  PL/SQL, Java, Apex и т.д. должна составлять не более 15%.

Friday, March 16, 2012

INSERT INTO wrh$_tempstatxs () - is pseudo AWR bug

In addition to my previous AWR bugs post.

The new database in Exadata. No any workload.
This Insert was executed on both nodes of cluster during 3 minutes each (history from bottom to top):


DBControl shows one Insert into WRH$-tempstatxs, which is the part of AWR:


I decided to gather some add statistics - for dictionary and for fixed views as I did it last time, but bad Insert appears soon after my statistics gathering. You see it in both screenshots.

The solution was found by chance - after db restart bad Insert disappeared forever.

Wednesday, March 14, 2012

srvctl add scan_listener: Сквозь чащу цветного леса




Так случилось, что при инсталляции кластера был прописан только один IP в качестве SCAN:

[oracle@ed01db01 ~]$ srvctl config scan
SCAN name: ed01-scan, Network: 1/172.24.0.0/255.255.0.0/eth1
SCAN VIP name: scan1, IP: /ed01-scan/172.24.1.16

Однако, в DNS были прописаны все три адреса:

[oracle@ed01db01 ~]$ nslookup ed01-scan
Server:         172.27.100.1
Address:        172.27.100.1#53
Name:   ed01-scan.fors.ru
Address: 172.24.1.17
Name:   ed01-scan.fors.ru
Address: 172.24.1.18
Name:   ed01-scan.fors.ru
Address: 172.24.1.16

[oracle@ed01db01 ~]$ host ed01-scan
ed01-scan.fors.ru has address 172.24.1.17
ed01-scan.fors.ru has address 172.24.1.16
ed01-scan.fors.ru has address 172.24.1.18

Поэтому в один прекрасный день возникло непреодолимое желание воспользоваться всеми тремя адресами в полном объеме.

Прямые попытки добавить руками новые IP оказались безуспешными:

[oracle@ed01db01 ~]$ srvctl add scan -n ed01-scan
PRCS-1037 : Single Client Access Name VIPs already exist

[oracle@ed01db01 ~]$ srvctl config scan
SCAN name: ed01-scan, Network: 1/172.24.0.0/255.255.0.0/eth1
SCAN VIP name: scan1, IP: /ed01-scan/172.24.1.16

[oracle@ed01db01 ~]$ srvctl add scan -n scan2
PRCS-1016 : Failed to resolve Single Client Access Name scan2

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

[oracle@ed01db01 ~]$ which srvctl
/u01/app/oracle/product/11.2.0.3/dbhome_1/bin/srvctl
[oracle@ed01db01 ~]$ srvctl modify scan -n ed01-scan
PRCS-1034 : Failed to modify Single Client Access Name ed01-scan
PRCR-1071 : Failed to register or update resource type ora.scan_vip.type
CRS-0245:  User doesn't have enough privilege to perform the operation
[oracle@ed01db01 ~]$ cd /u01/app/11.2.0.3/grid/bin/
[oracle@ed01db01 bin]$ ./srvctl modify scan -n ed01-scan
PRCS-1034 : Failed to modify Single Client Access Name ed01-scan
PRCR-1071 : Failed to register or update resource type ora.scan_vip.type
CRS-0245:  User doesn't have enough privilege to perform the operation

Как выяснилось: ни пользователь grid ни oracle не обладают достаточными правами. Только root.

В результате упорных поисков был найден замечательный документ
How to update the IP address of the SCAN VIP resources (ora.scan.vip) [ID 952903.1]
который казалось бы окончательно открыл нам глаза на магию смены адресов,
но чуда опять не произошло:

[root@ed01db01 ~]# which srvctl
/u01/app/11.2.0.3/grid/bin/srvctl
[root@ed01db01 ~]# srvctl modify scan -n ed01-scan
[root@ed01db01 ~]# srvctl config scan
SCAN name: ed01-scan, Network: 1/172.24.0.0/255.255.0.0/eth1
SCAN VIP name: scan1, IP: /ed01-scan/172.24.1.16


Оказалось, что в нашем случае файл /etc/hosts содержал очевидную особенность, в результате которой возрождался только один адрес:
### Compute Node Client Access SCAN
172.24.1.16   ed01-scan.fors.ru       ed01-scan
# 172.24.1.17   ed01-scan.fors.ru       ed01-scan
# 172.24.1.18   ed01-scan.fors.ru       ed01-scan

После безжалостной правки
### Compute Node Client Access SCAN
# 172.24.1.16   ed01-scan.fors.ru       ed01-scan
# 172.24.1.17   ed01-scan.fors.ru       ed01-scan
# 172.24.1.18   ed01-scan.fors.ru       ed01-scan


Все пошло как по-маслу:

[root@ed01db01 ~]# srvctl modify scan -n ed01-scan.fors.ru

[root@ed01db01 ~]# srvctl config scan
SCAN name: ed01-scan.fors.ru, Network: 1/172.24.0.0/255.255.0.0/eth1
SCAN VIP name: scan1, IP: /ed01-scan.fors.ru/172.24.1.16
SCAN VIP name: scan2, IP: /ed01-scan.fors.ru/172.24.1.17
SCAN VIP name: scan3, IP: /ed01-scan.fors.ru/172.24.1.18

[root@ed01db01 ~]# srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node ed01db02
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node ed01db01
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node ed01db01

 

Monday, March 12, 2012

Какие приложения будут успешно "взлетать" на Экзадате ?

В дополнение к моему предыдущему посту "Какие приложения будут успешно "взлетать" на Экзадате ?" .

Появился еще один критерий для отброса плохих приложений: Какую долю в Вашем приложении занимает SQL ?


Как известно, в состав СУБД Oracle входят SQL-машина и PL/SQL-машина.
SQL машина выполняет Select, Insert,Update,Delete.
PL/SQL-машина выполняет конструкции языка PL/SQL, например, циклы и условные переходы.
Есть еще Java-машина. Она выполняет java-код.

В ряде случаев не удается всю логику приложения реализовать только на SQL.
Поэтому разработчики реализуют ее в PL/SQL. Например, создают свои массивы, очереди AQ и пишут свои процедуры-функции для их обработки.

Фактически, таким образом, разработчики реализуют свою СУБД внутри Оракла.

Такие приложения плохо экзадатятся.

Во, первых, для таких приложений не работают основные фичи: smart scan, storage index.  Т.е. Экзадате попросту нечего смарт-сканить, поскольку в приложении очень мало SQL. Типичный сценарий: приложение запрашивает строку с диска, сервер хранения ее отдает целиком и дальше обработка данных происходит в PL/SQL-процедурах (= только на сервере БД ).
В качестве варианта - прикладной код выносится на отдельный сервер, который реализует обработку данных.

Во-вторых, такие приложения плохо распараллеливаются Ораклом и админом-эксплуатационщиком, потому что для запуска нескольких параллельных сессий необходимо знакомство с архитектурой приложения. Идеальное железо для такого приложения - один очень быстрый процессор. Но поскольку таких быстрых процессоров еще в природе не существует, то приходится изобретать параллельность. Поэтому для увеличения производительности разработчики создают свои структуры с помощью которых управляют количеством параллельных процессов. В результате, СУБД Оракл не может извлечь пользу из automatic DOP или установить степень параллельности на уровне объектов, потому что  процесс все равно продолжает выполняться в один поток. Иными словами, регулировать степень параллельности может только разработчик.

В третьих, таким приложениям как правило становится плохо от RAC. Для улучшения производительности надо отключить один узел, тогда приложению становится легче. 



Рекомендации:
Если Вы узнали в описанных выше симптомах свое приложение, то переносить его на Экзадату не имеет смысла. Показать результаты близкие к Экзадате сможет даже простая персоналка. Из 60 физических ядер, способных выполнять SQL такое приложение обычно задействует 12 (одну DB ноду), потому что от RAC его тошнит, и обычная Оракловая параллельность на два узла не распределяется. Smart scan отсутствует, поэтому 36 физических ядер также простаивают.
В результате сравнения с персоналкой заказчик делая разумный выбор, должен предпочесть персоналку. Идеальное железо для такого приложения - один очень быстрый процессор.

Вот пример одного приложения, которое не получит пользы от перехода на Экзадату.
В AWR-отчете Оракл показывает долю SQL и PL/SQL за отчетный период:




В общем, прежде, чем переходить на Экзадату смотрим на соотношение статстистик на продуктиве:
sql execute elapsed time, DB CPU,
PL/SQL execution elapsed time
Java execution elapsed time.

Если в Вашей системе не-SQL занимает значительную долю времени, то зачем Вам вообще нужна СУБД ?


# ocrconfig -add +DATA PROT-30: The Oracle Cluster Registry location to be added is not usable. PROC-50: The Oracle Cluster Registry locatio...