Thursday Sep 30, 2010

Oracle Database Single Instance на ZFS: учимся готовить.

Oracle Database Single Instance на ZFS: учимся готовить.

Очень полезный и хороший обзор различных методов хранения для Oracle Database сделал Дмитрий Волков. Однако есть некоторые неточности касательно ZFS и здесь я приведу правильные значения. Отдельно коснусь и проблемы фрагментации. Я предполагаю, что концепции ZFS вам хорошо знакомы.

Если ваш выбор уже пал на ZFS, то готовим ее так:

Для начала, крайне рекомедую начитаться документации, прежде чем начать использовать ZFS (как, впрочем, и что-либо еще). Ищем whitepaper: «Configuring Oracle Solaris ZFS for an Oracle Database» и внимательно читаем. Сейчас ее можно взять здесь. Еще читаем http://www.solarisinternals.com/wiki/index.php/ZFS_for_Databases. В итоге имеем, что:

  • Необходимо установить параметр recordzise каждой файловой системы (ФС) еще до создания на ней файлов данных. Recordsize ФС должен быть равен db_block_size базы данных. В общем случае, данные и индексы могут лежать на одной ФС с recordsize=8k; redo, undo, temp и archivelog на других ФС с recordsize=128k. Пул дисков может быть общим для всех ФС.

  • Необходимо установть параметр logbias ФС в значение throughput для файлов данных и в значение latency для redo.

  • Желательно установить параметр primarycache в значение metadata для ФС с undo и archivelog. Таким образом отключить излишнее кеширование данных.

  • Желательно ограничить размер кэша ФС в оперативной памяти установив в файле /etc/system: set zfs:zfs_arc_max = 10737418240 (например 10GB). Желательное значение выбирается исходя из:

    • общего размера оперативной памяти

    • общего размера оперативной памяти минус размер SGA

    • желательного минимума в ~2-4GB

  • Наличие снимков (snapshots) и их количество в ZFS никак не влияет на производительность, так как каждый снимок это всего лишь пространство на диске, занятое старыми версиями блоков данных. При обновлении данных, снимки ни коим образом не трогаются.

  • Необходимо отключать проверку целостности блока базой данных, так как это делает ZFS. Целостность данных это фундаментальное свойство ZFS.

О фрагментации в ZFS и скорости чтения и записи.

Фрагментация данных приводит к большему времени, необходимому для чтения данных – увеличивается latency. Это происходит из-за того, что для чтения блоков, разбросанных по поверхности диска, необходимо дождаться перемещения головок диска. Для ускорения операций чтения в ZFS есть возможность подключения кэша на чтение (L2ARC). Sun Storage F5100 Flash Array позволяет держать в кэше до 2TB данных и таким образом полностью нивелировать задержку, возникающую из за фрагментации (описание ZFS L2ARC и тесты).

Кроме того, ZFS пишет данные на диск группами (или транзакциями ZFS, не путать с транзакциями Oracle). Это означает, что группа одновременно записываемых блоков будет записaнa, по возможности, максимально плотно, а не хаотично поблоково разбросана. Что гораздо быстрее выполнить, чем положить каждый блок на свое место, при этом каждый раз перемещая головки диска. Для увеличения скорости записи так же желательно использовать Sun Flash Accelerator F20 PCIe Card. Это внутренняя PCI карта позволяющая иметь 96GB кэша на запись (ZFS ZIL).

+ Дополнительные преимущества того, что запись в ZFS производится всегда на новое неиспользуемое место заключается в том, что физический износ поверхности диска распределяется более равномерно. В случае же когда запись производится всегда на одно и то же место приводит к быстрому физическому износу поверхности диска.

+ Для тех кто не готов переходить на Oracle Database 11g R2, ZFS + F5100 + F20 является единственным способом получить подобие Oracle FlashCache.

За последний год совместно с несколькими российскими ISV было проведено тестирование Oracle Database на ZFS + F5100 + F20. Ни в одном случае эффект фрагментации не был существеннен и хоть сколько бы заметен. Если ваша компания является ISV (производителем тиражируемого программного обеспечения) и хотите проверить работу вашего приложения на Solaris10/ZFS/S7000, обращайтесь ко мне — сделаем проект и проверим.

Thursday Dec 03, 2009

OpenSolaris build 128 now availble - zfs dedup in it

I've being waiting for this update to try deduplication of zfs. Being knowing that a lot of files will be written as result of image update I set zfs compression including rpool file system (except swap and dump) before doing update. Zfs compression on my home files already being for one month and proved to save space/time/power.[Read More]

Saturday Apr 25, 2009

Oracle database 10gR2 is certified with Solaris 10 ZFS

Oracle Database 10gR2 (10.2.0.3 and higher patches) Single Instance (not RAC) is certified with Solaris 10 ZFS on SPARC 64-bit. Please read Solaris ZFS_Best_Practices_Guide. You may need to limit ARC cache.


Thursday Dec 11, 2008

Monitoring ZFS Statistic on the system loaded with Oracle database

Nothing happens without a reason. My previous post about Monitoring ZFS Statistic is not exception. This week I had T5240 (128 threads, 64GB memory, Solaris 10 10/08 aka U6) with 6140 attached and not loaded with other my projects. So I decided to load the boxes with Oracle on ZFS (binaries, datafiles, logs) and run some tests. Not a benchmarking. Just to check if this can live and breathe. I also wanted to check the battle for the memory between Oracle SGA (set to 32GB), 3800 processes connecting to database (taking approx. 5MB not shared memory each) and ZFS.

On storage I have made single 1TB RAID1 LUN and put ZFS on it. No data/logs of ZFS separation. Keeping it simple.

root@rac05#zpool list
NAME     SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
oracle  1016G   243G   773G    23%  ONLINE  -
 

Arcstat script was modified a little further (lines 82, 177, 229 and 230) so I don't have too many zeros in statistics by going up from bytes to MB. Download new arcstat script and description file for dimstat.

 81 my $version = "0.1";
 82 my $mega = 1024 \* 1024;
 83 my $cmd = "Usage: arcstat.pl [-hvx] [-f fields] [-o file] [interval [count]]\\n";
...
171 sub prettynum {
172     my @suffix=(' ','K', 'M', 'G', 'T', 'P', 'E', 'Z');
173     my $num = $_[1] || 0;
174     my $sz = $_[0];
175     my $index = 0;
176     return sprintf("%s", $num) if not $num =~ /\^[0-9\\.]+$/;
177     return sprintf("\*%d", $sz, $num);
178     while ($num > 1000 and $index < 8) {
179         $num = $num/1000;
180         $index++;
181     }
182     return sprintf("%\*d", $sz, $num) if ($index == 0);
183     return sprintf("%\*d%s", $sz - 1, $num,$suffix[$index]);
184 }
...
200 sub calculate {
...
229     $v{"arcsz"} = $cur{"size"}/$mega;
230     $v{"c"} = $cur{"c"}/$mega;
...
238 }

On the picture you may see results of monitoring:


At 1:01 test was started. It took 1 hour until all processes become ready (1 process was started each 1 second). Then Oracle database was busy between 2:04 and 2:53.

As you can see ZFS is taking more memory if it can, but it stays "polite" by freeing this memory for other processes when it needed.

I will be glad to hear from you if you have any thoughts and experience running Oracle Database on ZFS.

Thanks to Valery for his Perl Syntax highlighting plugin for Netbeans.


Sunday Dec 07, 2008

Monitoring ZFS Statistic

By combining two great tools arcstat and dimstat you can get ZFS statistics in:

  • table view

  • chart view

  • any date/time interval

  • host to host compare


For example, online table and chart view


[Read More]

Monday Oct 20, 2008

Quick and easy way to setup Guest Logical Domains using ZFS clone.

Question: I want to install more than one guest domain. Is there any way to speedup process.

Answer: Yes, sure.

This instruction can be used as supplimental to «Run your first Logical Domain in 10 minutes» as well as a separate guide.

  1. First setup the Control Domain and install the First Guest Domain ldg1. Use ZFS volume (In example, data/demo/ldg1) as back end drive for the system drive of guest domain. You can install Solaris either through a Network Install or by mounting a DVD or ISO file.

  2. Log in to the First guest domain Console and do 'sys-unconfig' in the domain.

  3. # sys-unconfig
                            
    WARNING
    
    This program will unconfigure your system.  It will cause it
    to revert to a "blank" system - it will not have a name or know
    about other systems or networks.
    
    This program will also halt the system.
    
    Do you want to continue (y/n) ? y
    
    
  4. Wait for the system to come down and answer h — halt.

  5.  svc.startd: The system is down. 
     syncing file systems... done 
     Program terminated 
      r)eboot, o)k prompt, h)alt?  h

  6. From Control domain verify that guest domain ldg1 is stopped.

  7.  # ldm ls 
     NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME 
     primary active -n-cv SP 4 4G 0.5% 1h 30m 
     ldg1 bound ----- 5000 14 1984M 
  8. Unbind domain

  9.  # ldm unbind ldg1 
  10. Create a ZFS snapshot of the First Guest Domain's disk image:

  11. # zfs snapshot data/demo/ldg1@install
    
  12. Bind and Start domain back

  13. # ldm bind ldg1 
    # ldm start ldg1

  14. Clone the snapshot using the name ldg2 as the target volume

  15. # zfs clone data/demo/ldg1@install data/demo/ldg2
    
  16. Setup 2 nd Guest domain by using newly created ZFS clone data/demo/ldg2 as back-end to system disk.

  17. Repeat steps 8 and 9 for each next domain.


About

Roman (pomah) Ivanov, ISV Engineering. Tips how to run Oracle best on Sun. Performance monitoring and tuning for system administrators. OpenSolaris user experience.

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today