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.
Skip to content, navigation.
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.
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.
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.
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.
Log in to the First guest domain Console and do 'sys-unconfig' in the domain.
# 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
Wait for the system to come down and answer h — halt.
svc.startd: The system is down.
syncing file systems... done
Program terminated
r)eboot, o)k prompt, h)alt? h
From Control domain verify that guest domain ldg1 is stopped.
# 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
Unbind domain
# ldm unbind ldg1
Create a ZFS snapshot of the First Guest Domain's disk image:
# zfs snapshot data/demo/ldg1@install
Bind and Start domain back
# ldm bind ldg1 # ldm start ldg1
Clone the snapshot using the name ldg2 as the target volume
# zfs clone data/demo/ldg1@install data/demo/ldg2
Setup 2 nd Guest domain by using newly created ZFS clone data/demo/ldg2 as back-end to system disk.
Repeat steps 8 and 9 for each next domain.
This blog copyright 2009 by Roman Ivanov