{"id":510,"date":"2011-09-30T14:09:02","date_gmt":"2011-09-30T14:09:02","guid":{"rendered":"\/blogs\/jonathan\/post\/SQL-Server-and-VMware-A-Potentially-Fatal-Combination-Thats-Nonsense!.aspx"},"modified":"2017-04-13T12:16:24","modified_gmt":"2017-04-13T16:16:24","slug":"sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/","title":{"rendered":"SQL Server and VMware: A Potentially Fatal Combination? That&#8217;s Nonsense!"},"content":{"rendered":"<p>This morning Paul received an email from a member of the community that was asking if it is safe to run SQL Server inside of a VM and whether we would suggest running databases in virtual machines or not.&#160; The root of the question being asked was an article that the person had read back in January titled <a href=\"http:\/\/sqlsolutions.com\/articles\/articles\/SQL_Server_and_VMware-A_Potentially_Fatal_Combination.htm\" target=\"_blank\">SQL Server and VMware: A Potentially Fatal Combination<\/a>.&#160; This article is an amazing example of how misinformation on the internet can lead to confusion and an incorrect decisions about what options are feasible for a given environment or not.&#160; Most people that read my blog know that I have been running SQL Server virtualized on VMware in production environments since late 2004\/early 2005.&#160; In all that time, not once have I ever experienced a data corruption issue associated with SQL Server running inside of a virtual machine, even on my laptop where the machine has powered off due to loss of battery life and the machines experienced a hard crash during operation.&#160; Why?<\/p>\n<h1>Analyzing the Source of the Misinformation<\/h1>\n<p>Lets start out at the top of the article and debunk the misinformation that is contained in it about running SQL Server on VMware.&#160; The first thing is that the article makes some very broad claims about VMware based on the use of <a href=\"http:\/\/www.vmware.com\/products\/workstation.html\" target=\"_blank\">VMware Player<\/a>, which is akin to Microsoft Virtual PC for Windows XP Mode in Windows 7.&#160; This is not a server class hypervisor, nor is it in any way representative of VMware\u2019s main products ESX\/ESXi or vSphere.&#160; This is like comparing SQL Server to Microsoft Access, they aren\u2019t even in the same class of functionality or features.<\/p>\n<p>The next claim in the article is that the database is at risk due to hypervisor caching of the writes being performed by SQL Server, which uses the FILE_FLAG_WRITE_THROUGH flag when calling the CreateFile function to open the database, instructing the system to write through any cache directly to disk.&#160; The article claims that VMware Player caches I\/O operations and can result in lost writes.&#160; Unfortunately, the example provided is a machine running on Windows Vista which as a hosted platform always uses unbuffered I\/O for virtual machines, so it is not caching the writes being performed.&#160; You don\u2019t have to take my word for this, it is documented in the <a href=\"https:\/\/kb.vmware.com\/selfservice\/microsites\/search.do?language=en_US&amp;cmd=displayKC&amp;externalId=1008542\" target=\"_blank\">Storage IO crash consistency with VMware products<\/a> KB article on their site:<\/p>\n<blockquote>\n<p><em><strong>For hosted products, write handling depends on the host operating system.<\/strong><\/em><\/p>\n<p><em>On Linux hosts, VMware does not use unbuffered IO, because it is not safe or supported across all the Linux versions that VMware supports. So currently, VMware hosted products on Linux hosts always use buffered IO.<\/em><\/p>\n<p><em><strong>On Windows hosts, VMware hosted products use unbuffered IO by default<\/strong>.<\/em><\/p>\n<\/blockquote>\n<p>Unfortunately the entire foundation of the article is based on misinformation that can be proven by reading VMware\u2019s documentation.&#160; The VMware ESX hypervisors DO NOT cache I\/O under any circumstance, which is also covered in the same KB article:<\/p>\n<blockquote>\n<p><em>VMware ESX acknowledges a write or read to a guest operating system only after that write or read is acknowledged by the hardware controller to ESX. <strong>Applications running inside virtual machines on ESX are afforded the same crash consistency guarantees as applications running on physical machines or physical disk controllers<\/strong>.<\/em>&#160;<\/p>\n<\/blockquote>\n<p>If this is the case, you might be wondering how the database in the article became corrupt? Unfortunately it is impossible to know because the necessary parameters surrounding the test configuration are not provided in the article.&#160; Instead the article provides a Disclaimer that tells you the specifics are \u201crather unimportant\u201d<\/p>\n<blockquote>\n<p><em><strong>Disclaimer:         <br \/><\/strong>In many articles you will find the execution times of different queries. Please do not interpret these results scientifically or as official benchmarks. You will not even find the configuration of the computer used for these experiments because it is rather unimportant.<\/em><\/p>\n<\/blockquote>\n<p>I disagree that this kind of information is unimportant, especially when making claims that SQL Server will suffer database corruption issues if running under VMware.&#160; <\/p>\n<h1>Setting up a Repeatable Test Scenario<\/h1>\n<p>For scientific purposes, I decided to take one of my standard SQL Server 2008R2 VMs running inside of my Dell M6500 laptop and run a series of repeatable tests using VMware Workstation 7 on Windows 7.&#160; The VM is configured with 2 vCPUs and 2GB RAM, and like the article a thumb drive will be used to store the database data and log files.&#160; To setup the environment for the tests, the following script will be used:<\/p>\n<blockquote>\n<p>&#8212; Create a &quot;Safe&quot; database on the VMDK stored on my laptop SSD     <br \/>CREATE DATABASE [VMSafe]       <br \/>ON PRIMARY       <br \/>( NAME = N&#8217;VMSafe&#8217;,       <br \/>&#160; FILENAME = N&#8217;C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.MSSQLSERVER\\MSSQL\\DATA\\VMSafe.mdf&#8217;,       <br \/>&#160; SIZE = 6144KB,       <br \/>&#160; FILEGROWTH = 1024KB )      <br \/>LOG ON       <br \/>( NAME = N&#8217;VMSafe_log&#8217;,       <br \/>&#160; FILENAME = N&#8217;C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.MSSQLSERVER\\MSSQL\\DATA\\VMSafe_log.ldf&#8217;,       <br \/>&#160; SIZE = 1024KB ,       <br \/>&#160; FILEGROWTH = 1024KB)      <br \/>GO<\/p>\n<p>&#8212; Create a &quot;Test&quot; database on a removable thumb drive     <br \/>CREATE DATABASE [VMTest]       <br \/>ON PRIMARY       <br \/>( NAME = N&#8217;VMTest&#8217;,       <br \/>&#160; FILENAME = N&#8217;E:\\SQLskills\\VMTest.mdf&#8217;,       <br \/>&#160; SIZE = 6144KB ,       <br \/>&#160; FILEGROWTH = 1024KB )      <br \/>LOG ON       <br \/>( NAME = N&#8217;VMTest_log&#8217;,       <br \/>&#160; FILENAME = N&#8217;E:\\SQLskills\\VMTest_log.ldf&#8217; ,       <br \/>&#160; SIZE = 1024KB ,       <br \/>&#160; FILEGROWTH = 1024KB)      <br \/>GO<\/p>\n<p>&#8212; Create the baseline table in the &quot;Safe&quot; database     <br \/>USE [VMSafe];      <br \/>GO      <br \/>IF OBJECT_ID(&#8216;dbo.TestTable&#8217;) IS NOT NULL      <br \/>BEGIN      <br \/>&#160;&#160;&#160; DROP TABLE dbo.TestTable;      <br \/>END      <br \/>GO<\/p>\n<p>CREATE TABLE dbo.TestTable     <br \/>(RowID INT IDENTITY PRIMARY KEY,       <br \/>Col1 INT,       <br \/>Col2 CHAR(400) DEFAULT(&#8216;ABC123&#8217;),       <br \/>Col3 NCHAR(400) DEFAULT(&#8216;789XYZ&#8217;))      <br \/>GO      <br \/>DECLARE @StartTime DATETIME = CURRENT_TIMESTAMP      <br \/>DECLARE @loop INT = 1      <br \/>BEGIN TRANSACTION      <br \/>WHILE @loop &lt;=100000      <br \/>BEGIN      <br \/>&#160;&#160;&#160; INSERT INTO TestTable (Col1) VALUES (@loop);      <br \/>&#160;&#160;&#160; SET @loop = @loop + 1;      <br \/>END      <br \/>COMMIT TRANSACTION      <br \/>SELECT DATEDIFF(ms, @StartTime, CURRENT_TIMESTAMP) AS Table1_Time      <br \/>GO      <br \/>UPDATE TestTable      <br \/>SET Col1 = RowID;      <br \/>GO<\/p>\n<p>&#8212; Create a duplicate of the table in the &quot;Test&quot; database     <br \/>USE [VMTest]      <br \/>GO      <br \/>CREATE TABLE dbo.TestTable      <br \/>(RowID INT IDENTITY PRIMARY KEY,       <br \/>Col1 INT,       <br \/>Col2 CHAR(400) DEFAULT(&#8216;ABC123&#8217;),       <br \/>Col3 NCHAR(400) DEFAULT(&#8216;789XYZ&#8217;))      <br \/>GO      <br \/>SET IDENTITY_INSERT dbo.TestTable ON      <br \/>INSERT INTO TestTable (RowID, Col1, Col2, Col3)      <br \/>SELECT RowID, Col1, Col2, Col3      <br \/>FROM VMSafe.dbo.TestTable      <br \/>SET IDENTITY_INSERT dbo.TestTable OFF      <br \/>GO<\/p>\n<p>&#8212; Issue CHECKPOINT to flush dirty buffer pages to disk     <br \/>CHECKPOINT      <br \/>GO<\/p>\n<\/blockquote>\n<p>Now that we have our databases created and identical data in them so that we can validate the consistency of the environment in the event of a forced crash by removing the USB thumbdrive from the computer, lets issue a UPDATE against all the rows in the VMTest databases to prefix them with a 1_ for the Col2 column.<\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/5a5aae02\/image.png\"><img fetchpriority=\"high\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png\" width=\"644\" height=\"388\" \/><\/a><\/p>\n<p>With the UPDATE complete, pull out the USB thumbdrive and then issue another CHECKPOINT operation to force a flush of dirty buffers to the disk.&#160; This will raise a 9001 error for the VMTest database since the log is not available to write the CHECKPOINT log records to.<\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/37b66f87\/image.png\"><img decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/289f90ad\/image_thumb.png\" width=\"644\" height=\"388\" \/><\/a><\/p>\n<p>At this point we have a crashed database, so we can plug in our USB thumbdrive and restart the SQL Server instance to allow crash recovery to run for the databases.&#160; Immediately upon instance restart we will see:<\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/7c1660c6\/image.png\"><img decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/01f10460\/image_thumb.png\" width=\"644\" height=\"388\" \/><\/a><\/p>\n<p>OMG!&#160; It has the same status as the article, that must mean we have a problem!&#160; NO! The In Recovery status tells you that crash recovery is running for the database.&#160; If the database is In Recovery you should not set it to Emergency Mode as the article states.&#160; Instead open up the ErrorLog for the instance and look at what is happening with the recovery, the database engine logs informational messages about the progression of crash recovery for the databases while it is running.<\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/1fef1254\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/4f5d8120\/image_thumb.png\" width=\"244\" height=\"148\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/75533176\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/3b63ee8a\/image_thumb.png\" width=\"884\" height=\"197\" \/><\/a><\/p>\n<p>In this case, within a few minutes of opening the database the estimated time for crash recovery to be performed is already at 86 seconds.&#160; The only thing you have to do here is be patient and allow the Database Engine to perform the Undo\/Redo operations the way it is designed to.<\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/336c4c28\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/73260ce0\/image_thumb.png\" width=\"244\" height=\"148\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/1d260b09\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/4a3af7d7\/image_thumb.png\" width=\"877\" height=\"124\" \/><\/a><\/p>\n<p>All it took was 103 seconds for crash recovery to be performed and the database is available online and in a consistent manner.&#160; The log records describing the transaction were hardened in the transaction log before the commit of the update operation occurred ensuring that the database could be recovered in a consistent state.<\/p>\n<p>I have run this series of tests a number of different ways and the database always starts up in a crash consistent state.&#160; Feel free to test this yourself by pulling the USB thumbdrive out while the UPDATE is running, and it will force a rollback of the transaction during crash recovery.<\/p>\n<h1>Summary<\/h1>\n<p>In Summary, there is nothing inherently unsafe about running SQL Server on VMware.&#160; Microsoft has <a href=\"https:\/\/blogs.msdn.microsoft.com\/b\/psssql\/archive\/2008\/10\/08\/sql-server-support-in-a-hardware-virtualization-environment.aspx?wa=wsignin1.0\" target=\"_blank\">supported SQL Server on VMware for nearly three years<\/a> at this point as a validated Server Virtualization Validation Program (SVVP) configuration (<a title=\"http:\/\/support.microsoft.com\/?id=956893\" href=\"https:\/\/support.microsoft.com\/?id=956893\">http:\/\/support.microsoft.com\/?id=956893<\/a>).&#160; This article is further evidence of the danger of misinformation on the internet, and the need to validate information online before making decisions based on the information.&#160; A SQL Server running as a virtual machine in a SVVP validated configuration is going to be as safe as a SQL Server running on physical hardware.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This morning Paul received an email from a member of the community that was asking if it is safe to run SQL Server inside of a VM and whether we would suggest running databases in virtual machines or not.&#160; The root of the question being asked was an article that the person had read back [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,25,43],"tags":[],"class_list":["post-510","post","type-post","status-publish","format-standard","hentry","category-database-administration","category-general","category-virtualization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SQL Server and VMware: A Potentially Fatal Combination? That&#039;s Nonsense! - Jonathan Kehayias<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server and VMware: A Potentially Fatal Combination? That&#039;s Nonsense! - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"This morning Paul received an email from a member of the community that was asking if it is safe to run SQL Server inside of a VM and whether we would suggest running databases in virtual machines or not.&#160; The root of the question being asked was an article that the person had read back [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2011-09-30T14:09:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:16:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png\" \/>\n<meta name=\"author\" content=\"Jonathan Kehayias\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kehayias\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"SQL Server and VMware: A Potentially Fatal Combination? That&#8217;s Nonsense!\",\"datePublished\":\"2011-09-30T14:09:02+00:00\",\"dateModified\":\"2017-04-13T16:16:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/\"},\"wordCount\":1530,\"commentCount\":5,\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/4086b0ad66d4\\\/271e7499\\\/image_thumb.png\",\"articleSection\":[\"Database Administration\",\"General\",\"Virtualization\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/\",\"name\":\"SQL Server and VMware: A Potentially Fatal Combination? That's Nonsense! - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/4086b0ad66d4\\\/271e7499\\\/image_thumb.png\",\"datePublished\":\"2011-09-30T14:09:02+00:00\",\"dateModified\":\"2017-04-13T16:16:24+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/4086b0ad66d4\\\/271e7499\\\/image_thumb.png\",\"contentUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windows-live-writer\\\/4086b0ad66d4\\\/271e7499\\\/image_thumb.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Database Administration\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/database-administration\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SQL Server and VMware: A Potentially Fatal Combination? That&#8217;s Nonsense!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\",\"name\":\"Jonathan Kehayias - The Rambling DBA\",\"description\":\"The Rambling DBA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\",\"name\":\"Jonathan Kehayias\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"caption\":\"Jonathan Kehayias\"},\"sameAs\":[\"http:\\\/\\\/3.209.169.194\\\/blogs\\\/jonathan\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server and VMware: A Potentially Fatal Combination? That's Nonsense! - Jonathan Kehayias","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server and VMware: A Potentially Fatal Combination? That's Nonsense! - Jonathan Kehayias","og_description":"This morning Paul received an email from a member of the community that was asking if it is safe to run SQL Server inside of a VM and whether we would suggest running databases in virtual machines or not.&#160; The root of the question being asked was an article that the person had read back [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/","og_site_name":"Jonathan Kehayias","article_published_time":"2011-09-30T14:09:02+00:00","article_modified_time":"2017-04-13T16:16:24+00:00","og_image":[{"url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png","type":"","width":"","height":""}],"author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"SQL Server and VMware: A Potentially Fatal Combination? That&#8217;s Nonsense!","datePublished":"2011-09-30T14:09:02+00:00","dateModified":"2017-04-13T16:16:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/"},"wordCount":1530,"commentCount":5,"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png","articleSection":["Database Administration","General","Virtualization"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/","name":"SQL Server and VMware: A Potentially Fatal Combination? That's Nonsense! - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png","datePublished":"2011-09-30T14:09:02+00:00","dateModified":"2017-04-13T16:16:24+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#primaryimage","url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png","contentUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windows-live-writer\/4086b0ad66d4\/271e7499\/image_thumb.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/sql-server-and-vmware-a-potentially-fatal-combination-thats-nonsense\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Database Administration","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/database-administration\/"},{"@type":"ListItem","position":3,"name":"SQL Server and VMware: A Potentially Fatal Combination? That&#8217;s Nonsense!"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/","name":"Jonathan Kehayias - The Rambling DBA","description":"The Rambling DBA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c","name":"Jonathan Kehayias","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","caption":"Jonathan Kehayias"},"sameAs":["http:\/\/3.209.169.194\/blogs\/jonathan"]}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/comments?post=510"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/510\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}