Do I create a fixed size or expandable VHD if I know the contents size in advance?

Solution 1:

The "catch" isn't increased file size, in fact the very purpose of a Thin Provisioned/Dynamically Expandable disk is that you decrease their size on disk.

The [major] tradeoffs are performance in all cases, and the risk of over commitment (running out of space as the volumes grow) in most cases. If you monitor your disk usage and are careful to avoid letting your expandable VHDs grow past the size of your storage, you can avoid the over-commitment issue relatively easily (but that depends on how many you have and the complexity of your virtual environment), and you can mitigate the performance issue somewhat with certain disk settings.

(MS article on VHD architecture which may be useful.)

Read performance is slower for dynamically sized VHDs, and you may need to consider other performance factors as well - like what happens on your host and/or storage if you have a bunch of your VHDs growing at the same time, because you'll take a performance hit there as well. Add to that other storage-related considerations, like your dynamically sized VHDs becoming fragmented/non-contiguous, and interactions with deduplication and snapshotting, your environmental constraints may dictate whether or not they're a good idea at all.

As a general rule, if you know what size you need, and have the space to allocate it all now, the fixed-size/thick provisioned disk is a better choice. At a minimum, you get slightly better performance and one less thing to worry about. But if you're pressed for space, and keep those few things in mind, there's nothing wrong with going the Dynamic/Thin route either. And in fact, one could make the argument that dynamic disks are not a horrible default choice, because expandable virtual disks allow you a lot more flexibility when the requirements change and someone needs to cram a couple dozen gigs of extra stuff onto your disk. As with everything else, it depends on your environment.