虚拟化数据库服务器设计
内存
对于数据库服务器,你通常要确保分配给虚拟服务器每GB内存,主机就要有1GB无竞争性的物理内存。如果管理程序(hypervisor)允许,如同VMware所做,应该设置预留内存以确保虚拟服务器总能保留分配给它的内存。然而,Windows Server 2008 R2 SP1及以上的版本中的Hyper-V技术提供了动态内存(Dynamic Memory),当探测到低内存的虚拟机时,它能把主机不用的物理内存分配给该虚拟机。通过Hyper-V,虚拟机能够配置启动内存16GB,但上限是32GB。运行过程中虚拟机使用的内存接近初始的16GB时,如果有足够的可用物理内存,Hyper-V管理程序就会增加内存分配给虚拟机。
存储
给虚拟机分配存储是通过附加虚拟硬盘驱动实现的。虚拟驱动仅仅是一个平面文件,由管理程序存放和管理。作为最佳实践,对于活跃且繁忙的服务器,推荐如下存储设计准则:
CPU
配置虚拟机的虚拟CPU,也称为vCPU,是最容易的任务。 vCPU和物理CPU内核之间没有一对一的对应关系。相反,当vCPU要执行任务时,一个vCPU就是放置在物理CPU内核队列中的一个逻辑线程。队列中的请求越多,执行线程就越久。由于CPU访问延迟,通常推荐配置虚拟机时,vCPU要比实际所需少一点。虚拟机自身完全察觉不到延迟,因此这仅能从虚拟机外部去监控。例如,高CPU延迟不会引发SQL Server里SOS_SCHEDULER_YIELD高等待统计信息。最新一代的管理程序目前支持每台虚拟机可以配置大量vCPU。Windows Server 2012支持32个vCPU。尽量确保每个物理CPU内核不超过2个vCPU。
网络
如果你知道数据库服务器需要通过网络转移大量数据,或对网络延迟很敏感,那么要确保主机有足够的网卡。同样,主机SAN存储所需的总线适配器也会变得争夺,所以网卡也会争夺。
高可用性
在运行SQL Server的虚拟机上部署AlwaysOn Failover Clustering Instances和AlwaysOn Availability Groups,建议:
OS增强
当Windows实例部署到虚拟机时,除了确保正确的硬件设备驱动器,OS里没有其他特殊的要配置虚拟化,除了确定管理程序的工具。
SQL Server内存配置
就像Windows,SQL Server也能安装到虚拟机,并能成功运行,没有任何特定的调校或配置。然而,你或许想考虑配置SQL Server的Max Server Memory,尽管你可能在调校好的物理机上做这件事情。在SQL Server 2012中,这项设置现在把工作极限放在SQL Server使用的全部内存上,然而之前的版本中,这仅仅影响缓冲池的大小。在标准或企业版的SQL Server 2012或企业版之前版本上,Hyper-V配置中,Max Server Memory要比Maximum RAM值低大约2GB,以便SQL Server能够增加比分配的内存更多的内存使用。
通常的虚拟化设计误区
下面罗列了一些常见的对SQL Server有负面影响的设计:
监控虚拟化的数据库服务器
如果你使用Hyper-V,可以通过Dynamic Memory功能来查询SQL Server的内存使用。下面的查询返回虚拟机内存使用的百分比。
select (m.total_physical_memory_kb /1024) as 'Physical Memory (MB)', convert(decimal(3,1),(convert(decimal(10,1),m.available_physical_memory_kb / 1024) / convert(decimal(10,1),m.total_physical_memory_kb / 1024)) * 100) as 'Available Memory as % of Physical Memory' from sys.dm_os_sys_memory m,sys.dm_os_sys_info i select convert(decimal(10,1),(convert(decimal(10,1),i.committed_target_kb / 1024) /convert(decimal(10,1),m.total_physical_memory_kb / 1024)) * 100) as 'Committed Target as % of Physical Memory', convert(decimal(3,1),(convert(decimal(10,1),i.committed_kb / 1024) /convert(decimal(10,1),m.total_physical_memory_kb / 1024)) * 100) as 'Total Committed as % of Physical Memory' From sys.dm_os_sys_memory m, sys.dm_os_sys_info i
推荐的性能监控计数器
推荐监视下面的3类Performance Monitor计数器来追踪虚拟数据库服务器的健康:
主机(Host Server):
➤ Percentage of physical CPU utilization
➤ Percentage of physical memory utilization
➤ Any CPU latency experienced by the hypervisor (VMware calls this CPU Ready Time)
➤ Total amount of memory currently allocated to the host’s virtual servers
➤ Physical storage MB/s and IOPS that the hypervisor is using
➤ Physical storage read and write latency times
➤ Percentage of HBA bandwidth utilization
➤ Percentage of NIC bandwidth utilization
虚拟机(Virtual Server):
➤ % logical CPU utilization
➤ Total physical memory (MB)
➤ Available memory (MB)
➤ Logical storage MB/s and IOPS that the operating system is using
➤ Logical storage read and write latency times
SQL Server实例:
➤ SQL Server fi le I/O latencies from sys.dm_io_virtual_file_stats
➤ Committed and Target Committed Memory values from sys.dm_os_sys_info
➤ Batch requests/sec as a benchmark of server activity levels