Make directories and subdirectories simultaneously

Here’s a review of the mkdir command and the often overlooked -p option from Easy Linux Commands by Terry Clark and I.

Creating New Directories

The mkdir (make directory) command is used to create a new directory. The directory to be created can be referenced via an absolute path or via a relative path starting with the current working directory.

Make a directory using an absolute path:

$ ls
$ mkdir /home/tclark/new_dir1
$ ls
examples new_dir1

Make a directory using a relative path:

$ mkdir new_dir2
$ ls
examples new_dir1 new_dir2

The –p (parent) option allows creation of a complete directory branch when parent directories do not yet exist. This will actually create both the parent directory and subdirectory specified. In our example that means the new_dir3 and sub_dir3 are both created with a single command.

Make a new directory with a subdirectory using the –p option:

$ mkdir -p new_dir3/sub_dir3
$ ls
examples new_dir1 new_dir2 new_dir3
$ ls new_dir3

Of course you can also list more than one directory to create with a single mkdir command.

Easy Linux CommandsFor more tips like this check out my book Easy Linux Commands, only $19.95 from Rampant TechPress.

Buy it now!

unix, linux, system administration, sysadmin

RAID 5 and Oracle Databases

While researching the effect of RAID 5 disk configuration on Oracle databases I came accrost more than I thought I expected on the topic.

With disk as cheap as it is today there is no reason to ever use RAID 5 on an Oracle database. Even for a database which sees only a moderate amount of updates the performance loss incurred by using RAID 5 is too high. RAID 1 or some combination of RAID 1 and RAID 0 should be used when high availability is required. Database 10g users should also consider allowing Oracle’s new Automatic Storage Management to handle redundancy on un-mirrored disks (or even raw partitions.)

But don’t take my word for it. Here are some opinions from some notable Oracle administrators:

Oracle Database RAID 5
Mark Rittman

No RAID5. Use RAW whenever possible and consider RAID10 or 0+1. RAID 5 can severely affect performance on highly updated databases.

Oracle Database Administration: The Essential Reference
David Kreines & Brian Laskey

RAID-5 is, in fact, very powerful and inexpensive. It is also a technology to be avoided in most cases when configuring your Oracle database! This may seem a harsh statement, but the reality is that although RAID-5 provides good levels of data protection at a low monetary cost, this comes at a very high cost for disk I/O. In particular, write operations on RAID-5 arrays can be orders of magnitude slower than the same operations on a single disk.

Oracle and RAID usage
Mike Ault

Use RAID10 when possible, RAID5 if it is not. Size the array based on IO needs first, then storage capacity and you can’t go wrong.

Disk Management for Oracle
Donald Burleson

Oracle recommends using (SAME) Stripe And Mirror Everywhere (a.k.a., RAID 1+0) for all systems that experience significant updates. This is because of the update penalty with RAID 5 architectures.

Using RAID 5 for a high-update Oracle system can be disastrous to performance, yet many disk vendors continue to push RAID 5 as a viable solution for highly updated systems.

RAID 5 is not recommended for high-update Oracle systems. The performance penalty from the parity checking will clobber Oracle performance.

If you’re still not convinced check out This site is committed to the Battle Against Any Raid Five (or four or free, uh, three.) The site has links to several more articles exposing the perils of RAID 5.

oracle, rdbms, dba, systems administration, sysadmin, raid, raid 5

Thank You Oracle

Yesterday Scott Maziarz got this error in the log of an Oracle Application Server instance:

[Tue May 16 13:27:52 2006] [warn] long lost child came home! (pid 8134)

I can’t decide if this is a good thing or a bad thing.

funny, fun, error, error message, oracle, oracle application server, oas, dba, system administration, sysadmin, database administration

UNIX Find And Execute

Zach tells me I need to post how to find files and execute a command on those files. While the man pages are always the definitive reference, these are the options I use frequently. As usual, anything in italics should be replaced with the details for your search.

Note: WordPress loves to convert quotes into fancy quotes (pointing in from each side) so these commands may not work too well if copied and pasted. On the bright side, there’s no time like the present to start commiting these to muscle memory.

Find a file and execute a specific command:

find path conditions -exec command {} \;

find ./ -name "*.php" -exec cat {} \;

The open/close curly bracket marks where the name of each file found will be substituted and the backslash-semicolon marks the end of the command to execute.

Here are a few other options I use frequently:

Search for a file by name:

find path -name filename

find ./ -name style.css

Search by name with wildcards:

find path -name "filename"

find ./ -name "*.html"

Search for files modified within the past n days:

find path -mtime -n

find ./ -mtime -7

Search for files modified before the past n days:

find path -mtime +n

find /tmp -mtime +3

These are mostly based on my experience in Solaris using the bash shell. They should work just about everywhere, but check the man pages as mileage will vary.

Easy Linux CommandsFor more tips like this check out my book Easy Linux Commands, only $19.95 from Rampant TechPress.

Buy it now!

unix, solaris, linux, mac osx, osx, sysadmin, systems administration

Sun Fire T2000 vs. Sun Fire V440

SunFireT2000Thanks to the diligence of my coworker Scott Maziarz we have been able to run some practical performance tests on the new Sun Fire T2000 we got on a try and buy program from Sun.

About our environment

While we’re not truly equipped for traditional load testing here at Plymouth State University I decided early on that our daily datamart scripts would be a good test of this system’s capabilities. These scripts are a combination of vendor supplied and homegrown code which create datamarts for reporting. The scripts run separately take between a minute and several hours to complete. They rely heavily on joins and functions so, while there is a fair amount of disk I/O, the speed of the processors and memory should play a large role.

Oracle 9iR2 was used for the testing on both systems. The database configuration was not altered, so despite the point that the T2000 has twice as much memory as our V440s (16GB versus 8GB) Oracle will be using the same amount of memory on both systems. We also unfortunately did not have the opportunity to do any performance tuning on the T2000. As such I consider this a comparison with a straight out of the box T2000. With some careful system tuning the T2000 would probably perform even better.

The two systems

Sun Fire T2000

  • 8 core 1.0GHz UltraSparc T1Processor
  • 16GB memory
  • 2 * 73GB 10K RPM SAS hard disk drives

Sun Fire V440

  • 4 * 1.0GHz UltraSparc IIIi
  • 8GB memory
  • 4 * 73GB 10K RPM Ultra320 SCSI hard disk drives

While these two systems are different in many ways they are comparable in price (the V440s are actually quite a bit more expensive, but this one is around two years old now.) All testing was done on internal disks making the results dependant on the entire system performance.

Oracle was not reconfigured to take advantage of the extra memory in the T2000.

The tests

For the testing we chose a set of 19 datamart creation scripts which we run daily in our production environment. To assure that there is no additional load on the V440 we ran the tests on our reporting instance which is on a relatively idle system.

The first test is to run the 19 datamart scripts staggered. This is how we run them in production. Four scripts are started every half hour to spread out the load on the server. There’s a lot of overlap, but the staggering is enough to keep the system responding normally.

Scripts running staggered

The graph above represents the runtime of each job individually. A shorter line represents a quicker runtime and we can see that the T2000 consistently outperformed the V440 often running n a quarter the time!

The total runtime for all 19 jobs was 2915 minutes on the V440 and 847 on the T2000. On average it took only 29% as long for the jobs to run on the T2000!

For the second test we ran all 19 jobs at once.

Scripts running simultaneous

We still see a significant improvement in performance, but not as high as when these were run staggered. Here the T2000 completed the tasks in 59% of the time of the V440. I attribute this to contention for disk on the T2000.

Thanks to Scott Maziarz for running the bulk of these tests and compiling the results for me.


The Sun Fire T2000 has certainly proven its worth. Some may be put off by the relatively low processor speed (the model tested was a mere 1GHz) but it is clearly not an impediment. The 8 core CPU seems to be up to the challenge and I’m sure with additional tuning I’m sure they’d scream.

With increased performance and higher efficiency than the comparably priced V440, the T2000 will definitely be in our future. The lower energy consumption and lower heat output would be a welcome change in our already taxed data center and the compact 2U size should be an easy fit in any rack.

Check out more details at Sun’s website and if you’re still not convinced apply for your own free 60-day trial!

sun, sun fire t2000, t2000, server, systems administration, database administration, dba, oracle, rdbms, sysadmin, sun microsystems