There are times when you have to take at face value what you are told.
There are 1.31 billion people living in China. This according to several sources (that all probably go back to the same official document from the Chinese government.) I’m willing to believe that number. I’m certainly not going to go to China and start counting heads. For one, I don’t have the time, for another, I might look awfully weird doing so. It’s also accurate enough for any discussions I might have about China. But if I were going to knit caps for every person in China I might want a more accurate number.
That said, sometimes one shouldn’t take facts at face value. A case in point is given below. Let me start out with saying the person who gave me this fact, wasn’t wrong. At least they’re no more wrong than the person who tells me that the acceleration due to gravity is 9.8m/s². No, they are at worst inaccurate and more likely imprecise. Acceleration due to gravity here on Earth IS roughly 9.8m/s². But it varies depending where on the surface I am. And if I’m on the Moon it’s a completely different value.
Sometimes it is in fact possible to actually test and often worth it. I work with SQL Server and this very true here. If a DBA tells you with absolute certainty that a specific setting should be set, or a query must be written a specific way or an index rebuilt automatically at certain times, ask why. The worst answer they can give is, “I read it some place.” (Please note, this is a bit different from saying, “Generally it’s best practice to do X”. Now we’re back to saying 9.8m/s², which is good enough for most things, but may not be good enough if say you want to precisely calibrate a piece of laboratory equipment.)
The best answer is “because I tested it and found that it works best”.
So, last night I had the pleasure of listening to Thomas Grohser speak on the SQL IO engine at local SQL Server User Group meeting. As always it was a great talk. At one point he was talking about backups and various ways to optimize them. He made a comment about setting the maxtransfersize to 4MB being ideal. Now, I’m sure he’d be the first to add the caveat, “it depends”. He also mentioned how much compression can help.
But I was curious and wanted to test it. Fortunately I had access to a database that was approximately 15GB in size. This seemed liked the perfect size with which to test things.
I started with:
backup database TESTDB to disk=’Z:\backups\TESTDB_4MB.BAK’ with maxtransfersize=4194304
This took approximately 470 seconds and had a transfer rate of 31.151 MB/sec.
backup database TESTDB to disk=’Z:\backups\TESTDB_4MB_COMP.BAK’ with maxtransfersize=4194304, compression
This took approximately 237 seconds and a transfer rate of 61.681 MB/sec.
This is almost twice as fast. While we’re chewing up a few more CPU cycles, we’re writing a lot less data. So this makes a lot of sense. And of course now I can fit more backups on my disk. So compression is a nice win.
But what about the maxtransfersize?
backup database TESTDB to disk=’Z:\backups\TESTDB.BAK’
This took approximately 515 seconds and a transfer rate of 28.410 MB/sec. So far, it looks like changing the maxtransfersize does help a bit (about 8%) over the default.
backup database TESTDB to disk=’Z:\backups\TESTDB_comp.BAK’ with compression
This took approximately 184 seconds with a transfer rate of 79.651 MB/sec. This is the fastest of the 4 tests and by a noticeable amount.
Why? I honestly, don’t know. If I was really trying to optimize my backups, most likely I’d run each of these tests 5-10 more times and take an average. This may be an outlier. Or perhaps the 4MB test with compression ran slower than normal. Or there may be something about the disk setup in this particular case that makes it the fastest method.
The point is, this is something that is easy to setup and test. The entire testing took me about 30 minutes and was done while I was watching tv last night.
So before you simply read something on some blog someplace about “you should do X to SQL Server” take the time to test it. Perhaps it’s a great solution in your case. Perhaps it’s not. Perhaps you can end up finding an even better solution.