【IT168评测中心】数据库应用是非常重要的一类应用,它包含了存储、网络、处理等多个要素,对一台服务器的方方面面都有要求,在虚拟化环境当中,它会有什么不同么?
SQL Server 2005是一个流行的关系数据库系统
继Web服务器应用、 文件服务器应用之后,我们又测试了虚拟化环境下的数据库服务器应用,看看究竟虚拟化环境是否适合。
数据库技术是作为数据处理的一门技术而发展起来的,所研究的问题就是如何科学地组织和存储数据,如何高效地获取和处理数据。在数据库中用数据模型来抽象、表示和处理现实世界中的数据。数据库即是模拟现实世界中某应用环境(一个企业、单位或部门)所涉及的数据的集合,它不仅要反映数据本身的内容,而且要反映数据之间的联系。大部分的服务器应用都同数据库有着密切的联系。
DELL 2950测试平台
主板DELL
处理器Xeon E5430x 2
主频2.66GHz
FSB1333MHz
L1容量64K(Data容量为32K)
L2容量12MB(共享)
芯片组Intel 5000X
内存1GB FBD DDR2 667 SDRAM x 4
无虚拟化:4GB
ESX Server:8GB
虚拟化:4GB
磁盘控制器LSI Logic MegaRAID SAS 8408ELP
硬盘Seagate Cheetah 146GB 15K.5SAS x 3
硬盘设置RAID 5,条带大小64KB,适应性预读,Cached IO
Windows硬盘设置主系统分区30GB,次分区50GB,NTFS格式
操作系统VMware ESX Server 3.5.0 64607
Windows Server 2003 R2 Enterprise Edition SP2
with IIS 6.0
Microsoft SQL2005 Enterprise Edition
网卡Broadcom BCM5708C千兆网卡 X 1
虚拟化:AMD NIC X 1
我们采用了评测中心的一台DELL 2950服务器,配置了双路Intel 45nm Xeon E5430处理器,频率为2.66GHz,并能支持SSE4.1指令集。服务器还使用了Intel 5000X芯片组,提供24MB的Snoop Filter缓存,这可以提升高负荷时的内存/处理器性能。磁盘系统则是3块15000RPM的Cheetah 15K.5,并通过一块PCIe x8的LSI MegaRAID SAS 8708ELP来组建RAID 5阵列。
我们采用了一组60台客户端的千兆网络环境进行了数据库测试,由于客户端什么都不干就是测试服务器,因此可以给服务器施加相当大的测试压力。
Benchmark Factory 运行报告Benchmarkfactory 4.6
我们选择了Benchmark Factory 4.6软件和Microsoft SQL2005 Enterprise来测试不同的硬件平台在数据库应用中的表现。
我们选择了BF内置的标准测试脚本AS3AP,这项测试可用于对于ANSI结构化查询语言(SQL)关系型数据库进行测试,它可用于测试DBMS(单用户微机数据库管理系统),也可用于测试高性能并行或者分布式数据库。关系性数据库就是用二维表格结构来表示实体及实体之间联系模型的数据库形式。
我们采用了32bit的操作系统——以后我们会对64bit操作系统下的数据库性能进行分析。测试未虚拟化的时候,我们安装了Windows Server 2003 R2操作系统,并使用启动参数将可用处理器限制为4个——因为目前VMware ESX Server只支持每个虚拟机最多4个处理器。未虚拟化条件下我们仅使用了一块Broadcom千兆网卡。由于内存对数据库有很大的影响,因此我们将测试机器的内存更换、调整为4GB。
测试虚拟化的时候,我们安装了VMware ESX Server 3.5.0 64607,这是一款可以支持包括VT-x、VT-d在内的硬件辅助虚拟化技术,对性能的提升很有帮助。我们在一个292GB的RAID 5阵列上采用默认分配的方式安装了ESX Server 3.5.0,并安装了一个Windows Server 2003 R2,这个虚拟的服务器具有4个处理器和4GB的内存,也只配置了单块虚拟网卡(虽然形式上具有多块,但是只有一块分配了正确的IP地址),除此之外,虚拟化和为虚拟化的机器软硬件配置都一样。
此外特别提一下,在32bit Windows下,ESX Server默认不提供Intel E1000虚拟网卡,我们使用的是AMD虚拟网卡。
VMware ESX Server的网络拓扑
我们在被测服务器上安装了Microsoft SQL 2005,按照测试要求建立了数据库。BF在测试之前会在数据库中生成9个表,其中包括4个500万行的表格,每行包括100字节的数据,因此每个表格容量大约是476MB,整个数据库容量为1.86GB。我们用60个客户端模拟了总共1600个用户,在这个数据库中进行查询、添加、删除、修改等操作。在测试期间,数据的吞吐量很小,因此网络吞吐量不会成为瓶颈。在实际测试当中,我们检测到的网络流量只有1~5MB/s。
这里可以看出,无虚拟化条件下要比虚拟化条件下性能更好,主要在低用户数量下的峰值事务处理能力,在负荷逐渐增长的情况下,两者的性能逐渐接近,最后相差约2000TPS,也就是8%左右。
IT168评测中心观点
测试结果很容易令人接受,未测试之前我们就已经知道虚拟化会带来损耗了,现在我们的测试表明,在我们的测试环境中,比较高的负荷下,损耗大概是12%左右。中负荷下损耗会大一些,约为15%左右,这些数值应该都是实际应用中我们比较关心的。
有些出乎意料的是在低负荷下的差别比较大——虽然数值看起来差别大,然而也不好说虚拟化环境糟糕,毕竟数据库应用在低负荷下性能低一些人们也不会有什么感觉,特别是我们也注意到响应时间方面没什么差别之后。
那么引起这种现象的原因在哪里呢?我们认为是虚拟网卡的处理效率的缘故。
数据库测试会使用大量的内存(我们未使用AWE技术)
在测试过程中,我们可以检测到数据库应用会占用了大量的内存资源,在目前的虚拟化环境下,可以提供给虚拟机的内存数量是没有大问题的(ESX Server 3宣称可以提供给单个虚拟机最多64GB的内存),在这样的条件下,会引起较大的磁盘交换,因此磁盘子系统对数据库的性能影响也很大。
最后,处理器才是制约虚拟化数据库应用的最大因素,目前一个虚拟机你只能配置最多4个虚拟CPU,因此它的主频越高越好。