The guestbook is open.
http://users.skynet.be/binabik
External memory from my trainings. I used to teach Business Objects, Internet Development and Hardware at Xylos NV (http://www.xylos.com)
I put a small website online for our son Jarne. There are some pictures from his birthcard there, plus a photogallery. Enjoy.
So as it turns out, Raid 5 is a very good Raidlevel, but it is not very good at writing. Raid 1+0 is very good, but it is rather expensive. Is that all there is to it ? No. If you have read one of my previous articles, you might have read that a harddrive’s speed is influenced by Latency and Seek. If you combine that story with this particular story, then you might find out there is more to it.
The two main ways of communicating with a disk are Sequential and Random. In a sequential environment, large chunks of data are being transferred (e.g. : 64K or 128K or bigger) This occurs most on file and print servers. In a random environment, larege amounts of small chunks of data are being transferred to the disk (e.g. 4k) This occurs most on a database server. If you think a little further on this, you might consider that Raid 5 has to do about twice the work for writing a chunk of data compared to Raid 1+0 (Raid 5 has to read existing data, read existing parity, calculate the parity, write new data, write new parity).
In that case you might come to the same conclusion as Database manufacturers and database gurus. Raid 5 is not a good thing to combine with a database. It will flood the Raid 5 with small chunks of data and that poor Raid 5 has to do twice the work a Raid 1+0 has to do at writing.
A clear conclusion is : Avoid Raid 5 in a database environment. But most people forget that Exchange is also a database.
My recommendation : If you are going to install a server, and you are considering to install 3 disks in Raid 5 and put your exchange server on it — why not consider a little further, add 1 extra disk, use Raid 1+0 in stead. The result is remarkable : Twice the speed, Twice the fault tollerance, twice the speed at reconstruction, more than twice the speed during a disk failure.
So you want to use popups ? Of course you do, opening a window is a right for everybody — but you might have discovered, that there are things around called popup blockers.
Both Internet Explorer and Mozilla Firefox include tools to block popups, furthermore, software exists that blocks all popups. As a programmer, it is impossible to take these last into account.
So, what is the difference between good and bad popups.
When an html document is opened in the browser, much depends on the zone where a page is opened. If a document is opened in the zone of the local computer, there is a small difference between Internet Explorer and Firefox. Internet Explorer will consider all scripting in a page that is launched in the Local Computer Zone as a potential hazard, and will show a warning.
Firefox does not do this. Once the page is put on the internet, this problem does not exist (example).
A good popup, is launched by a click-event. or a doubleClick event
A bad popup is launched by an onLoad event, onMouseOver event, onContextMenu event or onMouseOut event
This means that most “accidental” calls of popups are blocked. The only one that surprised me somewhat is the onContextMenu. But then again, right clicking a link is something we do to force
the opening of a link in a different target window, so it makes sense.
Ask 10 system engineers, which is the best Raid level and 8 will answer : Raid 5. The other two will ask the smart question :“for which application ?”
This is the start of a somewhat long article I think. The discussion is long and interesting.
When you try to evaluate the different Raid levels, you should be concerned with the kind of data transfers that will occur on it. Is it going to be a system with mostly Sequential transfers like a File-Server ? or is it going to be a system with mostly Random transfers like a Database Server ? Or is it going to be a mixture, and in that mixture, which kind of transfer occurs most ?
First, lets assume we are going to perform 400 Writes and 600 reads on a series of Raidsets. This means that the system will be working with mostly Reads, but still quite some Writes to deal with as well.
What would be the result for a Raid 0 ? (afterwards we can compare with Raid 1+0 and Raid 5
Let’s assume we have three Raid 0 Raidsets. each totalling in 72 GB Net Storage
In a Raidset with 2 disks, the total number of Reads and Writes gives you the number of IO’s so in this case, the number of IO’s (for 400 writes and 600 reads) is 1000 IO’s
When you only have 2 disks, you split those IO’s across the 2 disks, giving a total of 500 IO’s /disk
When we have 3 disks, we gain some speed because the total number of IO’s can be split across more disks. This gives you now 250 IO’s / disk
With 8 disks, the result will be 125 IO’s / disk
2 disks of 36GB = 1000/2 = 500 IO’s per disk
4 disks of 18GB = 1000/4 = 250 IO’s per disk
8 disks of 9GB = 1000/8 = 125 IO’s per disk
And what about Raid 1+0 ?
In a Raid 1+0, everything that has to be written has to be written twice. Reads can be performed across all disks.
Since we now have to take into account the writing, the number of IO’s to process is (400*2)+600 = 1400 IO’s / 4 = 350 IO’s /disk.
With 8 disks, this will give you 175 IO’s /disk With 16 disks : 87 IO’s /disk
4 disks of 36GB = 1400 /4 = 350 IO’s per disk
8 disks of 18GB = 1400/8 = 175 IO’s per disk
16 disks of 9GB = 1400/16 = 87 IO’s per disk
And Raid 5 ?
Raid 5 is a different story. In raid 5, each time you write something, the parity has to be calculated and written to the disks. But more importantly, to be able to write the parity and the data, a Raid 5 has
to read the data and parity that exists on the disk already – change it and write the data. The result is that the number of IO’s on Raid 5 for this same writing is much higher.
For 600 Reads and 400 writes, Raid 5 will take (4 * 400) + 600 = 2200 IO’s
3 disks of 36GB = 2200 / 3 = 733 IO’s / disk
5 disks of 18GB = 2200/5 = 440 IO’s / disk
9 disks of 9 GB = 2200/9 = 244 IO’s / disk
So, it is true, that 3 disks in Raid 5 is not as expensive to have fault tollerance… but is it really cheap ? If I add 1 extra disk to it and create a Raid 1+0 in stead of a Raid 5, I get the same capacity – I double my speed and I double my fault tollerance. (in a Raid 1+0 with 4 disks, when you have a second disk failing, you still have a 2/3 chance your system is up and running. With Raid 5, your system is down.
More on a next issue.
For years I’ve been trying to explain the difference between these two, only to find a lot of people thinking it is the same thing. Here is the difference:
In a Raid 0+1 system, first a Raid 0 is applied on the disks. The result of this operation is speed. Next, on top of the Raid 0 (usualy done by software) a second Raid is applied, which is a Raid 1. The result of this second Raid is for security. When you look at this configuration, you might think everything is nice and dandy, but this is actually the worst kind of config, and is never put on hardware Raid controllers. This is very bad. First : Security – When one disk fails, the system has 2 disks down (both halves of a Raid 0) this means that only the remaining Raid 0 is still on-line. If a disk fails in that Raid 0 you are in SH.T. This means that only the second disk of the failed Raid 0 can fail (1 chance out of 3) and your system is still working. Second : Speed. Again, if the system goes bad, and a disk fails, you are working at half the speed. And when you restore, the system has to copy the RaidSet from one Raid 0 onto the other Raid 0 (all disks have to work).
A much cleaner way to do this is Raid 1 + 0 :
Two Raid 1 are created. Across those two Raid 1, a Raid 0 is created. The result may not be obvious at first, but if you fail a disk, the system still works on 3 disks(faster) if a disk fails, 2 chances out of 3, your system is still ok. When you are rebuilding, it just copies 1 disk (of the failed mirror) to the other.
This is the kind of Raidset which is usually implemented in hardware Raid controllers (if yours does not… get another).
HP (Compaq) has been advertising for years that they were using 0+1 whereas they were really using 1+0 which is far superior.
You can tell very easily if your system is using 0+1 or 1+0 .. if you remove a disk and put it back.. if only 2 disks are working to perform the restore : 1+0 .. otherwise 0+1.
In Body and In Report.
A nice quirk in Business Objects, is the calculation in %. It adds an extra column to your table, which contains a formula :
=<Sales revenue>/Sum(<Sales revenue>) ForAll <Year>
which is based on the ForAll operator. The result is the following table :
When you add a dimension to this table (let’s say the Quarter)
I don’t know, but I think my counting still works.. it now says 100 % where it should be closer to 450 %. This is due to the fact that the context operator is still the same. It should now be
=<Sales revenue>/Sum(<Sales revenue>) ForAll (<Year> , <Quarter>). But Business Objects does not update the formula. What you can do now is remove the column with the calculation and reinsert it. But hey, there is a better way :
Insert the following formula :
=<Sales revenue> In Body /Sum(<Sales revenue>) In Report
This means that BO will now take the sales revenue in the Body of the table which is 2.6 million for the first, 2,27 million for the second item etc. and divides that number by the total Sales Revenue. I wonder why the people who built this program did not use this particular formula. I found it in their own documentation. Oh.. before I forget..here is the result.
More on a next item !
Foreach and Forall allow you to add or remove dimensions to or from a calculation.
When you look at the table to the left, you will see that the third column shows the same as the column next to it. The third column contains Min(<Sales revenue>), still it returns the same, which is logical. The context of the calculation is just “Year”. This means that The minimum Sales Revenue based on one number returns only that number.
With the ForEach operator, we can now add a dimension to the context. The formula is now : Min(<Sales revenue> foreach <Quarter>). The minimum is now calculated per Quarter as well. Returning the following table :
This means, that (for the calculation) the quarter has been included in the calculation.
Forall is the exact opposite. If you have a table containing Year, Quarter,Month, Sales Revenue, then min(<Sales Revenue> forall <Month>) will remove Quarter from the equation and return the minimum by year and Quarter only.
Next issue :
In Body and In Report, which are interesting when you use percentages.
What about Raid you might ask ?
Indeed, when you put a harddrive together with a couple of other drives, it
improves the performance. The best way, by far, is Raid. Some Raidlevels will give you better performance, while others improve security above all else.
Raid 0
Raid 0 is of course the most dangerous Raidset, and should be avoided in any situation where the data is critical. But when it comes to performance, it is the best there is. Multiply the speed of one disk, times the number of disks. If that number does not exceed the speed of your scsi bus, then you are smiling.
Raid 1 and 1+0
Raid 1 and 1+0 are often referred to as being the most expensive Raidsets. This is partly true, since you have to buy twice the number of HD's to get half the capacity. But they deliver outstanding performance.
consider this :
1 disk delivers 20MB/s. When configured in a mirror, the system is able to do "Split Seeks" which means that it can read from two disks at the same time. So 2 disks give you 40MB/s when reading. When writing, the speed will not go up, since everything has to be written twice. If your diskset performs 60 writes and 40 Reads, then you get 180 IO's. On a Raid 0 this would have been 100 IO's.. but on Raid 5, it would require 220 IO's -- I will clarify on a next installment. Cheers !
So, what about ATA disks. The thing with ATA disks, is that they are what they call "blocking" devices. This means, that only one disk per channel can communicate with the controller at the one time. Since most computers have two channels, two devices can talk to the controller. (SCSI is also referred to as "Non-Blocking device"). This is the reason why programs like Nero burning rom will recommend you to put your primary CD on one channel and your writer on a different channel.
An average ATA harddrive has a very good latency, but a rather high seek. This means that sequential transfers can be faster than on SCSI disks. But when you run a database on such a thing, it turns bad.
Secondly, ATA harddrives have a very low MTBF (Mean time between/before Failure), which means that the harddrive will not work for very long without critical errors. This is the reason why servers containing ATA harddrives usualy have only 1 year of waranty... and if it says 3 years, usualy this waranty does not include the Harddrive. But as long as you are running sequential transfers... ATA can a good solution. Don't burden your HD with a database though... certainly not on the harddrives used in portables, which have an even higher seek.
I installed DockWare on my Pocketpc, it turns my iPaq into a standing calendar… the freeware is nice, no nag-screens, but you have to start it manualy and it is not as configurable. Fun software, which makes your pocket pc next to your computer actualy serve a purpose.
DockWare is a calendar/clock that you can use while your PPC is cradled. It allows you to use your pictures or drawings as a background and/or as a slide show.
There is a "Pro" version ($9.95) available allowing you to add a time interval to the picture rotation, to manage the text and background colors and to add a password option.
So what does this add up to? When you want to know the speed, you need to know what data transfer type you are using. Sequential ? or Random ? An average fileserver and printservers use Sequential transfer, which occurs most when you transfer big files in one go. Database servers, like Oracle, SQL or Exchange, use Random transfer. They transfer small chunks of data (a zip code being updated, a mail message of 2KB being transferred.
In a sequential environment, only the Latency of the harddisk really counts. So lets imagine, we are going to transfer 64KB Blocks to a harddrive, with a Latency of 3 Milliseconds. The harddrive can have a maximum of 1 I/O (input or output) every 3 Milliseconds, so in 1 second, that is : 1000/3 = 333 IO's/second. 333 * 64KB = 21312 KB/s, which is equal to 20MB /s. This harddrive has a peak transfer rate of 20MB/s. You will need to attach 16 of them to reach 320MB/s (Ultra 4 SCSI).
How fast is a harddisk? Some people will answer the speed of the bus to which the harddrive is attached. Ultra ATA should give you some 133MB/s, Wide Ultra 4 or Ultra 320 SCSI should give you
320MB/s, but never in your life will you get that kind of speed from only one harddisk. So, what is the speed then.
To find this, you need to know two things about the harddisk : Latency and Seek.
Latency is the speed at which any next spot on a track of the harddrive is brought to the head. This means, while the head remains passive, Latency is influenced by the rotational speed and determines the speed
with which the harddrive can read consecutive blocks of data. Usualy, SCSI and ATA harddrives score very well at this. Some ATA harddrives will even outperform SCSI harddrives at this.
Seek is the speed at which any spot on the harddrive can be located. Including data that is stored on a different track. This includes moving the head of the harddisk.
This is typically something at which SCSI harddrives are much better then ATA harddrives.
This bug has existed in BO v6 ever since it came out.
When starting a new report, from the data menu, select “New Data Provider”. The screen that now appears, has one radio button.
Why is this radio button here… it does not serve a purpose, since creating a query based on another one, implies that you already created one. If you check it, you cannot uncheck it.
The only thing that works is to click the Begin button.