实验:SQL Server和VMware这对冤家或致命(1)
实验:SQL Server和VMware这对冤家或致命(1)
在本次试验中,我们使用WMPlayer 2.0.2.作为访客系统,使用Vista惠普作为主机系统。这个问题很有可能不影响ESX服务器,但是我们仍在等待VMware方面给予确认:ESX服务器完全尊重微软SQL Server在输入/输出方面的核心需求。
现在虚拟机变得越来越流行。它们常常用于在物理机上创建“安全沙箱”。管理员们可能会往这些虚拟机里面装入一些程序,偶尔会装入SQL Server。遗憾的是,将SQL Server装入到虚拟机里面可能会带来灾难!
我们不妨短暂回顾一下30年前的数据库状况。所有数据库在拥有存储过程、分区视图、XML及如今的所有其他附加功能之前,它们的一项关键特性是什么?自一开始,所有数据库MySQL等“玩具”数据库除外)都包括某种类型的预写式日志机制,以确保数据完整性。MS SQL中的LDF日志,甲骨文数据库中的Undo撤消)日志和redo重做)日志,它们都确保了执行COMMIT提交)语句后,保证数据保存起来。
为了在Windows上实现这一机制,SQL Server为输入输出操作标上了WRITETHRU和NOBUFFERING这两个标记。SQL Server读取时,它使用自己的高速缓存来读取数据,而不使用操作系统的高速缓存。SQL Server写入时,它要求操作系统等到该操作完成。请注意:SQL Server将一切置于其掌控之下,根本不使用操作系统的高速缓存。这是SQL Server与其他应用程序之间的一个关键区别见图1)。
图1
从主机系统的角度来看,当SQL Server在虚拟机里面运行时,会发生什么情况呢?主机系统并不知道“安全沙箱”里面的内容。至于里面运行的是Windows、Linux还是另一款操作系统,主机系统一无所知。这就使得它完全不知道虚拟机里面的操作系统标记。因此,当虚拟机“请求”主机系统写入数据时,满足该请求的方式与普通的非SQL Server应用程序完全一样。写入操作非同步完成,使用高速缓存同样见图1)。
这个区别会带来几个影响,既有好的影响,也有坏的影响。先来说说好的影响,性能监视器Perfmon)工具的数据显示,VMWare下的SQL Server运行起来常常速度更快见图2)!
图2
考虑到性能监视器工具只是每秒更新一次图表,只好人为减慢输入输出系统的速度,才能观察到其影响。如图所示,写入操作在虚拟机上完成后以垂直的绿线为分界点),物理机上仍然有写入操作。
这带来了不好的影响。请注意:COMMIT提交)语句在虚拟机上执行时,数据并没有送到输入输出系统。数据仅仅发送到了物理机。遗憾的是,SQL Server与VMWare一起运行时,停电等干扰因素会导致你丢失报告为“已提交”的事务数据。更为糟糕的是,万一出现这种干扰因素,高速缓存就会改变写入顺序,导致数据库被损坏!
评论暂时关闭