解决方法
>始终使用固定大小,而不是动态虚拟磁盘,并确保底层驱动器/阵列足够.动态虚拟磁盘的性能低于固定大小的虚拟磁盘.
>如果虚拟机中的数据不是关键任务,请打开虚拟机解决方案缓存写入的能力(有效地向客户操作系统说明物理写入磁盘的时间)以获得额外的性能.这对于可以轻松更换数据的开发和测试机器,或者主机本地的只读副本(如果遇到任何问题都可以重新创建)非常有用,但建议将此类选项保留为生产和备份系统.如果机器意外断电,它们会增加数据丢失的可能性(或更糟糕的是,损坏).
>确保每个VM都有足够的专用RAM,以便每个数据库的正常工作集适合内存,并有足够的空间来避免不必要的IO.此外,确保虚拟机管理程序不会在任何时候将虚拟机RAM分页(例如,大多数VMWare产品都可以执行此操作,这使您可以运行比在同一硬件上更多的虚拟机,但性能下降可以大规模 – 有一个选项可以调整或关闭此行为).
>如果主机使用RAID5阵列,请考虑迁移到RAID10.这将减少可用空间,但会消除RAID5(或6)可能出现的写入性能问题.
>对于可能会看到大量IO活动的VM,请考虑为它们提供自己的驱动器或阵列,或者只让它们与看到低活动的数据共享其驱动器/阵列.
当然,如果您的整个数据库(以及VM运行的所有其他内容)都适合分配给VM的RAM,并且它看到的写入活动非常少,那么IO性能就不那么重要了.
编辑:还有几点:
>如果使用虚拟磁盘,请确保使用最佳控制器类型来提高性能.一些虚拟化解决方案提供了多种虚拟控制器类型以提高客户端兼容性,并且由于其模拟的设计中的协议限制以及来宾操作系统驱动程序的限制,您可能会发现其效率低于其他虚拟控制器.>如果您的虚拟化解决方案为虚拟驱动器控制器提供特定驱动程序,请确保您的客户操作系统正在使用它们 – 这些可以通过减少内存到内存副本和主机< - >虚拟机监控程序< - >来加速批量IO ; guest操作上下文切换涉及某些操作.>如果您使用简单SMB共享或iSCSI等网络存储,则上述两点适用:确保您使用的是最有效的虚拟网络控制器,并且您的客户操作系统正在使用推荐的驱动程序,否则两者都有延迟和带宽可能比虚拟化层的需求更受限制.