A friend has a lightly used Magento-based ecommerce site that delivers pages more slowly than he would like. He reported that there were only about 100,000 page views per day, i.e., an average of about one per second. I said “Are you sure that you have enough RAM to keep the database in memory?” This was not an issue that his team of developers had considered. After some digging I found out that he was paying for two servers, each with 32 GB of RAM. On these two physical machines he was running three virtual machines, one for the MySQL database management system, one for the Web server, and one for a staging server. These VMs were allocated 16 GB of RAM for each production VM and 4 GB for the staging server. In other words, he was paying for 64 GB of physical RAM but the Gods of virtualization had set things up so that his production site could not possibly use more than 32 GB of RAM. The database VM ran on a physical machine by itself, leaving 16 GB of RAM entirely idle except for whatever the hypervisor was using.
Requests for the site and server documentation were answered with “What’s documentation?” (I pointed to “Software Design Review” for examples, but still not a single document was found for a site in which at least several developer-years have been invested.)
Does virtualization really make sense for people who aren’t going to do basic design work or write down simple documents that say (1) how much data there is, (2) where the data will be stored, (3) how much memory will be required at each point where data are stored? This particular site would almost surely have run better if the people who set up MySQL had never heard of VMware.