<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Convergence of Data, Cloud, and Infrastructure</title>
	<atom:link href="https://www.davidklee.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.davidklee.net</link>
	<description>David Klee . Net</description>
	<lastBuildDate>Mon, 11 Nov 2024 00:07:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>Thoughts on AI Data Infrastructure Field Day #1</title>
		<link>https://www.davidklee.net/2024/11/10/thoughts-on-ai-data-infrastructure-field-day-1/</link>
					<comments>https://www.davidklee.net/2024/11/10/thoughts-on-ai-data-infrastructure-field-day-1/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Mon, 11 Nov 2024 00:07:47 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10898</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_0 et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_0">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_0  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_0  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>On October 2<sup>nd</sup> and 3<sup>rd</sup>, I took part in an amazing event called <strong><a href="https://techfieldday.com/event/aidifd1/" target="_blank" rel="noopener">AI Data Infrastructure Field Day</a></strong> as a delegate. If you’ve never heard of this event before, it’s a series of tech events from the folks over at Tech Field Day where different tech companies present on cutting-edged technologies. The delegates get to ask the hard questions during the presentations to try to understand the tech and determine if it really lives up to the marketing. It’s a blast, and the presentations are on some serious next-level gear.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_1  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>The companies presenting at this event were <strong><a href="https://techfieldday.com/companies/google-cloud/" target="_blank" rel="noopener">Google Cloud</a></strong>, <strong><a href="https://techfieldday.com/companies/hpe/" target="_blank" rel="noopener">HPE</a></strong>, <strong><a href="https://techfieldday.com/companies/infinidat/" target="_blank" rel="noopener">Infinidat</a></strong>, <strong><a href="https://techfieldday.com/companies/minio/" target="_blank" rel="noopener">MinIO</a></strong>, <strong><a href="https://techfieldday.com/companies/pure-storage/" target="_blank" rel="noopener">Pure Storage</a></strong>, and <strong><a href="https://techfieldday.com/companies/solidigm/" target="_blank" rel="noopener">Solidigm</a></strong>. The scale is just incredible with all of these groups. The petabyte is the new gigabyte, and exabytes were thrown around like I drink glasses of tea. <em>The price of storage is secondary to the price of the GPU</em>, so the goal is make the most of the GPU by maximizing everything underneath.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_2  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><em>Now, what is ‘AI data infrastructure’ you might ask?</em> I had to ask that question a few times, as my background is largely relational data. OLTP databases require ultra-low latency, high IOPs, and lots of concurrency, but with AI data, the needs are different.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_3  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>From some companies’ perspectives, it’s delivering the fastest and best scale-out storage that money can buy so you can scale-out read faster than anyone, and then checkpoint to disk your AI training data to keep the GPUs busy. The faster you can read, the more data you can feed the GPUs. The faster you can checkpoint, the more the AI training can return to the GPU. The more you lean on the GPU, the more efficient the platform is, and the business gains a competitive edge.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_4  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>So, we need massive scale-out capabilities. We need ultra-high throughput since these data objects can be quite large. We also need insanely low latency so we can checkpoint to disk – and NOW.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_5  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Most of the presentations fell into this category</strong>, but each took a different twist on the offerings.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_6  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><a href="https://techfieldday.com/companies/minio/" target="_blank" rel="noopener">MinIO</a></strong> makes software that allows for object storage as containers on both public and private clouds. Deploy container-based scale-out S3-compatible object storage endpoints quickly and easily. They’ve become a standard for object storage, even though the basic offering is open source and free. They demonstrated that this is a go-to for this sort of storage, and did a great job demonstrating their efficacy at providing this level of storage, no matter the choice in the underlying platform. I love the flexibility their offerings deliver, mostly because it was a standardized storage protocol (S3) and one platform that could scale as low or as high as required.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_7  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><a href="https://techfieldday.com/companies/google-cloud/" target="_blank" rel="noopener">Google Cloud</a></strong> then presented on their object storage offerings. Google shouldn’t be a stranger at this point. I find it interesting that they have numerous distinct offerings, based on your needs – Cloud Storage, Parallelstore, Storage Scale, Filestore, and Hyperdisk ML. It also felt like there was significant overlap in the offerings. They have so many offerings they had a decision tree matrix, and even then, it felt a bit complex. The platform would certainly scale and work very well, if your AI workload were located on the Google public cloud. Native offerings on a given cloud provider <em>should just work</em>. I would just really need to study to determine which is the right initial platform to choose, and as a workload scaled, determine the best method to move the data to the next level as needed.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_8  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><a href="https://techfieldday.com/companies/infinidat/" target="_blank" rel="noopener">Infinidat</a></strong> came next to discuss their on-premises massive storage arrays. I’ve been a big fan of their arrays for years for relational database workloads, as we have many clients on their storage with great success stories. Their presentation was largely focused on the pretense of ‘you need fast storage for AI, so here’s what we can do.’  Storage companies are always focused on faster, larger, and easier, and they hammered on these points hard. I just didn’t see any features within the array that could contribute to the AI initiative, other than being great at scaling out and being fast.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_9  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><a href="https://techfieldday.com/companies/solidigm/" target="_blank" rel="noopener">Solidigm</a></strong> took a different approach that I found refreshing. Solidigm makes NVMe storage rather than arrays or protocols. They focused on the Total Cost of Ownership (TCO) rather than a more operational approach of faster, bigger, etc. The presentation focused on how their storage provide more efficient storage, which saves costs through reducing factors such as power, rack space, cooling, maintenance, disposal, etc. It was quite refreshing, and I could have spent the rest of the day just drilling into the actual calculations on the cost drivers and price optimization that businesses can leverage from utilizing their storage.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_10  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><a href="https://techfieldday.com/companies/pure-storage/" target="_blank" rel="noopener">Pure Storage</a></strong> also discussed their scale-out FlashBlade storage platforms. I’ve also been a huge fan of Pure since the beginning, have numerous clients happily using their arrays, and have actually done significant work with their internal teams on the SQL Server side of the house. The presentation felt similar to Infinidat in that it focused on ‘we are insanely fast and can scale out’. Both did a great job presenting their storage, but could have done a better job of talking specifics on optimizing the AI workloads rather than focusing on ‘faster means better AI.’</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_11  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>From a different perspective,</strong> rather than being a foundation for improved efficiency in the GPUs, other offerings want to be more than <strong><em>just</em></strong> storage. To me, <strong><a href="https://techfieldday.com/companies/hpe/" target="_blank" rel="noopener">HPE</a></strong> stood out in this area, and I feel that <em>the presentation was the most impressive of the entire event.</em> HPE focused not just on storage, but wanted to provide the end-to-end foundation for enabling businesses to get started with AI. Organizations could have storage or compute ready to go, but may need tooling to feed their existing data into AI platforms. They have to wire in each data source manually, determine the data model, figure out a way to get the data into a central location (and store it), then figure out how to best utilize it. Too many organizations, IMHO, are too busy putting out fires each day to put the energy into these layers of the AI story, but these items are required before the data can be even considered for AI modeling.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_12  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>They have released a platform that they call “<strong>HPE Private Cloud AI</strong>”. It’s an end-to-end solution that contains the storage, compute, GPUs, <em>AND</em> the software components. The software is included that allows organizations to integrate and connect to the various data sources, plus includes the AI-specific packages as well so you can quickly get up and running. The platform packages up numerous open-source packages to provide a ready-to-go endpoint that will act as the cornerstone that allows business to just ‘use’ the platform to start the journey into AI.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_13  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>I think this one of the best ‘private cloud’-like stories that I’ve ever seen. Many companies treat private cloud as a virtual platform with administrators on the other end of the support ticket manually performing tasks like deploying and integrating, but the automation aspect just means more bodies. Few have what I’d consider good automation in-house, and fewer have good integration of data sources. This platform allows the organization to skip the lengthy journey into automation and integration, and to just start using it. Save the stress, time, and re-work, and just get going.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_14  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><a href="https://www.youtube.com/playlist?list=PLinuRwpnsHaeXaL9k-0NNvpwetN7ZTcPI" target="_blank" rel="noopener">Check out the sessions on YouTube here</a></strong>. I’m proud to have been a part of this even, even if I was a bit quieter than I’d have liked. It was a lot of great data to absorb, and I’m still digesting a lot of the content here weeks later. I can&#8217;t wait for the next one!</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2024/11/10/thoughts-on-ai-data-infrastructure-field-day-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Know Thy Platform</title>
		<link>https://www.davidklee.net/2024/02/22/know-thy-platform/</link>
					<comments>https://www.davidklee.net/2024/02/22/know-thy-platform/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Thu, 22 Feb 2024 15:34:00 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[public cloud]]></category>
		<category><![CDATA[sql server]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10428</guid>

					<description><![CDATA[IT and data professionals, I implore you – know thy platform. All of it. Not just the layer your job is tasked with. Modern public cloud (or any infrastructure for that matter) platforms means there’s more to it than just one layer. Here’s an example from just recently. A long-term client called up and said [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>IT and data professionals, I implore you – know thy platform. All of it. Not just the layer your job is tasked with. Modern public cloud (or any infrastructure for that matter) platforms means there’s more to it than just one layer.</p>



<p>Here’s an example from just recently. A long-term client called up and said one of my favorite phrases &#8211; “our test system is running slow.” The test system is on Azure IaaS.</p>



<p>Once I got further details, it became a bit clearer. On the test system, they were modifying an integration with an external system, and something hiccupped on a test run and overwrote some data incorrectly. No biggie – they recovered the database from the previous night’s backups and fixed the problem. But – about ten minutes after the restore, the system just slowed to a crawl, and stayed that way for three days.</p>



<p>After digging into it, we found that there was a continuous loop of a full database backup sending the backup to Azure blob. It was Azure not handling the refresh appropriately and instead of doing a full backup then resuming log backups, it was just looping through a full backup each time.</p>



<p>The symptoms were clear:</p>



<ul class="wp-block-list">
<li>Sustained disk reads over 200MB/s</li>



<li>Storage latency was over 640ms for reads</li>



<li>Significant CPU utilization</li>



<li>Network transmit throughput over 900Mb/s</li>



<li>Sp_whoisactive reporting an active database backup to Azure blob URL</li>
</ul>



<p>The backup loop was saturating the VM and either the vDisk or VM’s scale was imposing a storage speed ceiling, capping the overall performance and tremendously slowing down read access. An application login would normally take five to six seconds, but now took a whopping six to seven minutes to complete.</p>



<p>We ended up killing the backup SPID and adjusting the backup policy on the Azure VM from automatic to manual, with one full backup being performed at night and log backups running every five minutes. Immediately, the problem disappeared, app performance went back to normal, and everything stabilized.</p>



<p>These symptoms and signs taken independently of each other would not tell you too much individually, but together, painted a pretty clear picture of what was going on. The folks there are seasoned pros, sharp, and well-intentioned, but hadn’t communicated the symptoms from the various layers with each other, so it didn’t make sense.</p>



<p>So – please &#8211; spend time digging in and understanding the basics of each layer at and underneath the data. Knowledge of the architecture and components, how they tie together, awareness of any performance limits at that layer, and being able to spot when one of the artificial caps is triggered, are all critical to daily management of these platforms.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2024/02/22/know-thy-platform/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Digging up undiscovered savings</title>
		<link>https://www.davidklee.net/2024/01/21/digging-up-undiscovered-savings/</link>
					<comments>https://www.davidklee.net/2024/01/21/digging-up-undiscovered-savings/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Sun, 21 Jan 2024 18:20:14 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[cost optimization]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10425</guid>

					<description><![CDATA[You might be able to shave off thousands – or more – in your monthly cloud bills for your critical SQL Servers, all while maintaining or even improving performance. Public cloud providers charge organizations for everything they deploy, and while a few items in the cloud are based on a pay-by-consumption model, most of the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>You might be able to shave off thousands – or more – in your monthly cloud bills for your critical SQL Servers, all while maintaining or even improving performance.</p>



<p>Public cloud providers charge organizations for everything they deploy, and while a few items in the cloud are based on a pay-by-consumption model, most of the services that really stack up, namely SQL Server licensing, are charged on a pay-by-allocation model. If you provision a SQL Server VM with eight cores and promptly forget about it, you will be shocked at the end of the month when you receive your cloud subscription bill. If you provision a 32-core VM, and your workload only uses four cores, you are still paying for all 32 cores, regardless of the low utilization rates. The same goes for memory and storage. A large memory footprint and lots of high-speed attached managed disks all add up.</p>



<p>It&#8217;s time to be objective. It begs the question: “How are my servers using the resources currently allocated?” I find that most organizations do not have a solid resource consumption baseline for their servers, so understanding where cost optimizations can be made becomes a guessing game, which is the exact opposite of what we need, and usually backfires spectacularly.</p>



<p>A few tools exist to help with this process, but be careful and weigh the output carefully. Highly granular data helps immensely, as the lack of granularity can either skew the output from the law of averages, or can weight the results differently. An example could be a CPU spike for 30 seconds because of a time-sensitive job running at midnight might not even appear in the telemetry if the telemetry reports an average of each 30-minute interval. A utility that reports just the minimum, average, and maximum CPU usage in a day might show a max at 95% and base their recommendations from this spike. But, if this spike occurs at 2:00am because of routine database index maintenance, and finishes in an hour but we have three hours for it to safely run, and the business-day CPU consumption peak is just 15%, the lack of context in the results can cause you to spend too much.</p>



<p>I’ve even seen some folks provision 16-32TB storage just to get a high IOPs rate for VMs, just to find that the metrics they were basing the estimate on were from database backups over a weekend, and were in no way even close to consumption rates during the week. (They were also hitting the VM’s I/O limits well before maximizing the available speed on the virtual disks.)</p>



<p>Usually, I find that retrieving the data yourself with built-in tools such as Windows’ Perfmon and Linux’s sar can provide as granular data as you need to help you build a better resource consumption baseline. Take the raw data and view the in-depth metrics, such as CPU consumption by-core, the memory usage of your application/database engine (and not just the OSE, as many applications like databases hide their memory usage stats from the underlying OSE), disk read and write demand, etc. Every bit of data helps paint a more complete picture of a day in the life of this server.</p>



<p>Next, understand the workload itself from a business perspective. A database server underneath a Monday-to-Friday 8:00am to 5:00pm business has far different resource consumption footprint than an around-the-clock, three shift-a-day, manufacturing facility. What are the normal operating windows that have time sensitive tasks? It could be limited to just normal business hours, or could be constant or scattered across the week.</p>



<p>If you see spikes or dips in the telemetry, what task or process corresponds to the change? A sharp CPU spike at 2:00am from index maintenance that runs in 20 minutes could be perfectly normal and acceptable to run a few minutes longer. Review the big items to understand if they are time sensitive or not, and what sort of impact it has on everything running concurrently.</p>



<p>Now, map out consumption rates versus resource allocations. You’ll be shocked to find that in almost all cases, your servers are oversized. Oversized means you are paying too much. Use the baseline to estimate how much you could reduce your VM’s resource allocations without impacting performance. (In a few cases, you might find some of your servers are actually undersized and starved for resources, and you can adjust the resource allocations accordingly to regain your performance.)</p>



<p>In some cases, reducing the allocated resources could actually improve the performance of the VM. Every single compute resource allocated to a VM must pass through the hypervisor’s scheduling queues, and cloud is nothing more than someone else’s datacenter with automation on top of some hypervisor. The less resources that you must push through the queues, the less overhead the hypervisor could impose on your workload, and that means it could get faster.</p>



<p>An example could be a 16-core VM with SQL Server Standard edition installed. An Azure E16ads v5 VM, with 16 vCPUs and 128GB of RAM MSRP’s at $2,470 a month without managed storage. If your workload is only using three or four CPUs of actual consumption, why not test downsizing it? Chopping the VM scale in half to an E8ads v5 reduces the monthly cost to $1,235. Your utilization percentage goes up, but if your server is running in a ‘safe’ range and not constantly maxed out, you just saved your organization a significant amount of money with just a couple of clicks while maintaining the speed your users expect.</p>



<p>This example covered just one server. What if you had a hundred like this? Or a thousand? How much of your monthly cloud budget can you reclaim? DBAs today must be as much of a cost optimizer as they are a performance and availability engineer, so use this technique to review your resource allocations and save your organization a lot of money!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2024/01/21/digging-up-undiscovered-savings/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server query runtime is not everything</title>
		<link>https://www.davidklee.net/2023/10/18/sql-server-query-runtime-is-not-everything/</link>
					<comments>https://www.davidklee.net/2023/10/18/sql-server-query-runtime-is-not-everything/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Wed, 18 Oct 2023 20:14:09 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[sql server]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10406</guid>

					<description><![CDATA[SQL Server query developers, listen up! Query execution time is not everything you should be worried about. You need to examine the parse and compilation time for each of your queries too. When you run a query, the SQL Server engine executes it. You get a runtime in SSMS or whichever tool you’re developing in. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>SQL Server query developers, listen up!</strong> Query execution time is not everything you should be worried about. You need to examine the <strong>parse and compilation time</strong> for each of your queries too.</p>



<p>When you run a query, the SQL Server engine executes it. You get a runtime in SSMS or whichever tool you’re developing in. Take this “fine” example of a dashboard query from an ERP system.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="224" height="48" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.56.50 PM.png" alt="" class="wp-image-10407"/></figure>



<p>If you go to the Messages pane to look for more details, it’s pretty sparse by default.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="255" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-1024x255.png" alt="" class="wp-image-10408" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-1024x255.png 1024w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-300x75.png 300w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-768x191.png 768w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-1080x269.png 1080w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-1280x318.png 1280w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-980x244.png 980w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM-480x119.png 480w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.04.00 PM.png 1496w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>This runtime is not the complete picture of what it is doing while processing your query. Run the command “SET STATISTICS TIME, IO ON”. It provides greater level of information in the Messages pane in SSMS. Run that command, then re-select and execute your query.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="606" height="104" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.57.21 PM.png" alt="" class="wp-image-10409" style="aspect-ratio:5.826923076923077;width:253px;height:auto" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.57.21 PM.png 606w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.57.21 PM-300x51.png 300w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.57.21 PM-480x82.png 480w" sizes="auto, (max-width: 606px) 100vw, 606px" /></figure>



<p>Now open the Messages pane, and you are presented with much more information.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-1024x627.png" alt="" class="wp-image-10410" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-1024x627.png 1024w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-300x184.png 300w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-768x471.png 768w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-1536x941.png 1536w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-2048x1255.png 2048w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-1080x662.png 1080w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-1280x784.png 1280w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-980x600.png 980w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.08.57 PM-480x294.png 480w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Do you see how it now breaks out parse and compilation time from execution time? In this example, this query took 3.4 seconds to parse and compile. That is an <strong><em>eternity</em></strong>.</p>



<p>We can also see that the query went parallel. The total execution time was 7.7 seconds, but we have approximately four times that of CPU time. We can estimate that our actual max degree of parallelism was across four CPUs.</p>



<p>You might even have some queries that spend an eternity compiling and then the execution time is very brief!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="403" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-1024x403.png" alt="" class="wp-image-10416" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-1024x403.png 1024w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-300x118.png 300w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-768x302.png 768w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-1536x604.png 1536w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-2048x806.png 2048w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-1080x425.png 1080w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-1280x504.png 1280w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-980x386.png 980w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-19-at-9.28.33 AM-480x189.png 480w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>What is interesting is that when we look at our execution plan via SSMS, it does not directly display any item related to compilation in the root node of the plan. (It does show a lot of other garbage, but that&#8217;s a topic for a different day.)</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="886" height="1024" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.59.20 PM-886x1024.png" alt="" class="wp-image-10411" style="aspect-ratio:0.865234375;width:458px;height:auto" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.59.20 PM-886x1024.png 886w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.59.20 PM-260x300.png 260w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.59.20 PM-768x887.png 768w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.59.20 PM-480x555.png 480w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-1.59.20 PM.png 952w" sizes="auto, (max-width: 886px) 100vw, 886px" /></figure>



<p>It does show that our degree of parallelism is four, just as we estimated. (There are some execution plan tools that <em>do</em> show this, but shall remain nameless.)</p>



<p>Edit the plan&#8217;s raw XML, however, and we can see some more details missing in the GUI.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="349" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-1024x349.png" alt="" class="wp-image-10418" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-1024x349.png 1024w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-300x102.png 300w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-768x262.png 768w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-1536x524.png 1536w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-2048x698.png 2048w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-1080x368.png 1080w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-1280x436.png 1280w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-980x334.png 980w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.09.42 PM-1-480x164.png 480w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>At the top of the plan XML under a second called QueryPlan is an entry for CompileTime, measured in milliseconds.</p>



<p>Now, in many cases where queries contain any number of suboptimal items, our compilation time can actually (sometimes greatly) exceed the runtime of the query! This list includes:</p>



<ul class="wp-block-list">
<li>Significant amounts of business logic embedded in the code</li>



<li>Missing indexes or outdated statistics</li>



<li>Use of dynamic SQL</li>



<li>Querying views</li>



<li>Views joined to other views</li>



<li>UDFs and TVFs, especially in query predicates</li>
</ul>



<p><strong>The tough part is that as the query complexity grows, so does parse and compile time. </strong>The use of suboptimal constructs amplifies it. With that compilation time comes a spike in CPU and some memory consumed while it compiles. If the query parse and compile time reaches two seconds, an internal engine threshold, it will hit a timeout and stops the process and just goes with what it has at that time. It might be an optimal plan… or it might be a bad plan. (If the engine encounters some of these items listed above or a lot of other scenarios, it can recompile, which can cause the parse and compilation time to grow even higher.)</p>



<p><strong>It gets worse. </strong>Many SQL Server monitoring tools usually do not capture the compilation time, but just capture the execution runtimes. This omission means that a significant portion of the actual runtime of the overall command could be completely missing from any monitoring telemetry you might have. With a diagnostics query, you can view the compilation time for all queries pulled from the execution plan cache. <a href="https://www.sqlskills.com/blogs/jonathan/identifying-high-compile-time-statements-from-the-plan-cache/">Thanks Jonathan for the query</a>!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="168" src="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-1024x168.png" alt="" class="wp-image-10413" srcset="https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-1024x168.png 1024w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-300x49.png 300w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-768x126.png 768w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-1536x252.png 1536w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-2048x337.png 2048w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-1080x178.png 1080w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-1280x210.png 1280w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-980x161.png 980w, https://www.davidklee.net/wp-content/uploads/2023/10/Screenshot-2023-10-18-at-2.16.06 PM-480x79.png 480w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>At a micro-level, review your query parse and compilation time as you develop your queries. If it suddenly spikes or is elevated to begin with, undo the last change and review before deploying the code to production.</p>



<p>At a macro-level, review the top compilation offenders. You might be surprised at what you find! At that point, start reworking the queries that you have under your control and cut that time down! An easy bandaged solution is to repackage the queries as a stored procedure, as you might just find your plans get re-used much more frequently, and that compilation time impact is cut to zero once a plan is developed. (It won&#8217;t fix the inefficient commands, but can at least reduce that compilation time.)</p>



<p>If high compilation times are encountered in third-party databases, take this raw detail and go to them to present the findings. They need to address these inefficiencies as soon as they can, or else you will eventually be needing to add more CPU cores to this server just to handle the inefficient code, all of which costs your organization money in the form of new SQL Server licensing.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2023/10/18/sql-server-query-runtime-is-not-everything/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Data Platform SLAs</title>
		<link>https://www.davidklee.net/2023/09/18/data-platform-slas/</link>
					<comments>https://www.davidklee.net/2023/09/18/data-platform-slas/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Mon, 18 Sep 2023 14:41:00 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[business continuity]]></category>
		<category><![CDATA[Disaster Recovery]]></category>
		<category><![CDATA[High Availability]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10401</guid>

					<description><![CDATA[Database professionals of the world – I have a question. Has your organization defined service level agreements (SLAs) for your data estate? I’m talking specifically the Recovery Point Objective (RPO) and Recovery Time Objective (RTO), and to have these defined not in an arbitrary number of nines, but in minutes or hours. If these aren’t [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p style="font-size:16px">Database professionals of the world – I have a question. Has your organization defined service level agreements (<strong>SLAs</strong>) for your data estate? I’m talking specifically the <strong>Recovery Point Objective (RPO)</strong> and <strong>Recovery Time Objective (RTO)</strong>, and to have these defined not in an arbitrary number of nines, but in minutes or hours. If these aren’t defined from above, your business continuity plan is doomed to fail.</p>



<p style="font-size:16px">In basic terms, RPO is how much data, usually measured in time, of data your business is willing or able to lose if a system failure occurs. RTO is the amount of time that the business-critical systems can be offline before the outage causes a disaster for the organization. These metrics should be defined both for planned and unplanned outages. A planned outage could be that a critical system needs routine maintenance, such as software updates or operating system patching. Planned outages are sometimes not factored into system designs, so core systems can go unmaintained and lead to security issues or platform instability. Unplanned outages can be as small and limited in scope, such as an operating system freezes and needs to be restarted, or as large as a critical site outage has occurred because of a centralized storage failure or a natural disaster.</p>



<p style="font-size:16px">When you design a business continuity strategy, these SLAs must be defined not by a given database availability feature that you might want to use, but by the C-level in your business. The business must be on board with these metrics from the top-down. If the business hasn’t (or won’t) define these two metrics, the unwritten expectations in the minds of the leaders are that any outages will result in no data loss and have near immediate recoverability. They might tell you best effort, or give vague requirements, but without the formal SLAs having been defined, an outage will bring out the ’best’ in people when the systems are offline longer than the business can sustain.</p>



<p style="font-size:16px">In some cases, then, failure to define the SLAs mean the business continuity strategy is left to the implementers in IT without clear design targets. At that point, it becomes best effort. The constraints of designing a modern data platform, be it in the cloud or on-premises, mean the availability and disaster recovery options are limited by the budget of the IT organization. This budget rarely allows for a design that meets or exceeds these unwritten expectations.</p>



<p style="font-size:16px">In other cases, members of IT want experience with a certain continuity feature, such as Microsoft SQL Server availability groups. But, without the defined SLAs as targets, designing a continuity architecture by starting with the features rarely gives the ‘right’ level of SLA, and usually results in overcomplicating the architecture. Overcomplicating the platform almost always results in additional outages, or longer outages, at the end of a given calendar year, which defeats the purpose of the architecture.</p>



<p style="font-size:16px">So, let’s say your organization has now properly defined the SLAs. Examples of SLAs that we usually see in the field are RPOs for no data loss for minor localized incidents and 30 minutes for larger incidents, and an RTO example of 30 minutes for smaller-scale incidents and 24 hours for a larger scale outage. At this point, we can then evaluate our options and start to select certain techniques and features to meet (and hopefully exceed) the SLAs.</p>



<p style="font-size:16px">Three main items now need to be planned – a backup and restoration solution, high availability, and disaster recovery. These tend to blur some lines and overlap a bit, depending on the solution. For more complex platforms like database servers, the OSE and the databases need to be considered separately. If a backup solution can accommodate both to the same degree to meet or exceed the SLAs, single solutions are better than multiple solutions that might collide or compete.</p>



<p style="font-size:16px">At this point in the process, I always ask a lot of questions now that the SLAs are defined. First, how advanced or “seasoned” are the staff members managing these servers? Would a stand-alone server with no fancy HA or DR configurations meet the SLAs? Can the staff support a more complex architecture, and if not, are they willing (or able) to learn? That question is much harder than it sounds, as most won’t admit if they cannot support a solution that they might want more experience managing. If not, consider the architectural options carefully, and consider bringing in outside help to help engineer and train on the solution.</p>



<p style="font-size:16px">Start mapping out available features and solutions, based on what the staff can support (or external folks to help engineer and train). Let’s assume that the staff are fairly seasoned and can support a more complex environment. Let’s also assume that these servers are ones in my wheelhouse, namely SQL Server VMs. Map out the features available for HA and DR and their SLAs.</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Layer</strong></td><td><strong>Feature</strong></td><td><strong>RPO</strong></td><td><strong>RTO</strong></td><td><strong>Note</strong></td></tr><tr><td>SQL Server</td><td>Availability Groups (synchronous)</td><td>Zero</td><td>Less than 30 seconds</td><td>Assuming not located on same storage device and that device does not fail</td></tr><tr><td>SQL Server</td><td>Availability Groups (asynchronous)</td><td>Low</td><td>Less than 30 seconds</td><td>“Low” RPO is based on rate of data change and bandwidth to replicate data to secondary replica, and is usually less than one minute during business hours</td></tr><tr><td>SQL Server</td><td>Failover Cluster Instance</td><td>Zero</td><td>Less than five minutes</td><td>Assuming shared storage failure does not occur, if present</td></tr><tr><td>SQL Server</td><td>Log shipping</td><td>Low</td><td>Low</td><td>“Low” RPO based on log replication timing and available bandwidth. “Low” RTO is based on staff availability to perform destination promotion to live and time to change app connection config</td></tr><tr><td>Infrastructure</td><td>Backup replication</td><td>Varies</td><td>Varies</td><td>Varies based on backup software features and platform speed for recovery</td></tr><tr><td>Infrastructure</td><td>Storage replication</td><td>Low</td><td>Varies</td><td>Subject to SAN LUN-level replication windows and platform/application changes required to promote replicated copy to active</td></tr><tr><td>Infrastructure</td><td>VM-level replication</td><td>Zero to low</td><td>Varies</td><td>Synchronous or asynchronous, depends on bandwidth, but could lack point-in-time recoverability, and RTO varies greatly</td></tr></tbody></table></figure>



<p style="font-size:16px">Map out your available options carefully, and note which layer is responsible for the availability action. Knowing which layer is responsible means you can train the people involved, as a system administrator might not be comfortable restoring a SQL Server Availability Group architecture without the help of a DBA. Planning now for the personnel required will help speed up the recovery time in the event of an actual emergency.</p>



<p style="font-size:16px">Understand the nuances that accompany on your specific platform, such as available bandwidth, endpoint latency, or dependencies on other items in the environment. Just know that a database being online and available doesn’t mean the application can connect, so the data platform is still down for the users. Document and ramp up the level of staff involvement for manual processes, such as application-level changes that must be made to get the application talking to the database, or public IP addresses updated for a web site to fire up. Add variables such as complexity of the architecture, processes if key staff are unavailable, and expected time to recovery for various scenarios impacting the design. Document and identify common situations that might take down a system or site, such as small-scale events like a bad OS-level patch, or larger events such as a hurricane hitting your primary datacenter and taking out the power for a week.</p>



<p style="font-size:16px">Build your prototype platform. Validate the architecture with failover and fail-back testing. Rarely do organizations factor the fail-<em>back</em> portion of a business continuity strategy, and that usually only becomes apparent during the fallout from an actual emergency.</p>



<p style="font-size:16px">Finally, test. Test. TEST. And then test some more. And don’t just test until it finally works. Plan to test periodically throughout each year after you take this design to production, as data platforms are a fluid architecture and subject to constant change. A working BC test today might be completely trashed if an undocumented router change is not replicated to the DR equivalent. Incomplete testing almost always results in some setting being missed, which results in a horrendous experience if a failover for an emergency is required. Most successful business continuity strategies actually plan to do a full failover and run FROM the DR site for a portion of the year so that it is confirmed that the end-to-end details of a failover are proven to work.</p>



<p style="font-size:16px">Proper recoverable backups are the foundation to any business continuity strategy. If you can’t recover a backup, the rest of the platform is almost useless. You must start here, because recovering the data is arguably the most critical step. Your availability architecture flows from this step based on your SLAs.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2023/09/18/data-platform-slas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server on VMware Accelerator now free!</title>
		<link>https://www.davidklee.net/2023/07/07/sql-server-on-vmware-accelerator-now-free/</link>
					<comments>https://www.davidklee.net/2023/07/07/sql-server-on-vmware-accelerator-now-free/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Fri, 07 Jul 2023 15:44:03 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Professional Development]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Tech Video]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[accelerator]]></category>
		<category><![CDATA[availability]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[licensing]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[vCenter]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[vSphere]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10389</guid>

					<description><![CDATA[My SQL Server on VMware Accelerator boot camp video series is now live on Youtube! There&#8217;s no strings attached and no price of entry, so now there&#8217;s no reason why you can&#8217;t join me in this adventure to learn more about how to performance and availability tune your SQL Server on VMware data estate. This [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>My<strong> <a href="https://www.youtube.com/watch?v=icJltumIIS8&amp;list=PLhRuY1yuVB7xBHKjFuTDJthZ456vF4DiW">SQL Server on VMware Accelerator</a></strong><a href="https://www.youtube.com/watch?v=icJltumIIS8&amp;list=PLhRuY1yuVB7xBHKjFuTDJthZ456vF4DiW"> boot camp video series is now live on Youtube</a>! There&#8217;s no strings attached and no price of entry, so now there&#8217;s no reason why you can&#8217;t join me in this adventure to learn more about how to performance and availability tune your SQL Server on VMware data estate. </p>



<p>This immersive video series is designed to accelerate your ability to improve the performance and availability of your enterprise SQL Server databases on VMware. With over twenty years of hands-on operational experience in the topic, this guide is packed full of tips and tricks designed to help you make the most of your virtualized data estate for administrators of all levels. </p>



<ul class="wp-block-list">
<li>Module 1 – Why SQL Server on VMware? </li>



<li>Module 2 – Enterprise Storage </li>



<li>Module 3 – Networking &amp; Interconnects </li>



<li>Module 4 – Physical Host </li>



<li>Module 5 – VMware ESXi </li>



<li>Module 6 – Host Clusters &amp; Operations </li>



<li>Module 7 – SQL Server Virtual Machine </li>



<li>Module 8 – Windows Operating System </li>



<li>Module 9 – Linux Operating System </li>



<li>Module 10 – SQL Server Instance &amp; Databases </li>



<li>Module 11 – Performance Tuning </li>



<li>Module 12 – Availability Tuning </li>



<li>Module 13 – SQL Server on VMware Licensing </li>



<li>Module 14 – Operations </li>



<li>Module 15 – Wrap Up</li>
</ul>



<figure class="wp-block-image size-large"><a href="https://www.youtube.com/watch?v=icJltumIIS8&amp;list=PLhRuY1yuVB7xBHKjFuTDJthZ456vF4DiW"><img decoding="async" src="https://www.davidklee.net/wp-content/uploads/2021/02/sql-server-on-vmware-accelerator-v2-1024x576.jpg" alt="" class="wp-image-9895"/></a></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2023/07/07/sql-server-on-vmware-accelerator-now-free/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Architecting MS SQL Server on VMware vSphere 8.0 released</title>
		<link>https://www.davidklee.net/2023/02/23/architecting-ms-sql-server-on-vmware-vsphere-8-0-released/</link>
					<comments>https://www.davidklee.net/2023/02/23/architecting-ms-sql-server-on-vmware-vsphere-8-0-released/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Thu, 23 Feb 2023 23:48:03 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10369</guid>

					<description><![CDATA[I&#8217;m thrilled to announce that the &#8220;Architecting Microsoft SQL Server on VMware vSphere&#8221; 8.0 best practices guide has been released! I&#8217;m pleased to have been able to contribute to this document. This document covers some very positive and significant changes VMware has made to the 8.0 release that apply to your enterprise SQL Server workloads, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image alignright size-large is-resized"><a href="https://core.vmware.com/resource/architecting-microsoft-sql-server-vmware-vsphere#introduction"><img loading="lazy" decoding="async" src="https://www.davidklee.net/wp-content/uploads/2023/02/image-723x1024.png" alt="" class="wp-image-10370" width="333" height="472"/></a></figure>



<p>I&#8217;m thrilled to announce that the &#8220;<a href="https://core.vmware.com/resource/architecting-microsoft-sql-server-vmware-vsphere#introduction"><strong>Architecting Microsoft SQL Server on VMware vSphere</strong></a>&#8221; 8.0 best practices guide has been released! I&#8217;m pleased to have been able to contribute to this document. This document covers some very positive and significant changes VMware has made to the 8.0 release that apply to your enterprise SQL Server workloads, especially around vCPU presentation to SQL Server virtual machines. Read this as soon as you can before you embark on your 8.0 upgrade journey. <a href="https://www.davidklee.net/contact/" data-type="page" data-id="5">Let me know if you have any questions!</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2023/02/23/architecting-ms-sql-server-on-vmware-vsphere-8-0-released/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VMware &#038; SQL Server 823-824 alerts</title>
		<link>https://www.davidklee.net/2022/05/18/vmware-sql-server-823-824-alerts/</link>
					<comments>https://www.davidklee.net/2022/05/18/vmware-sql-server-823-824-alerts/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Wed, 18 May 2022 14:10:42 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10320</guid>

					<description><![CDATA[We&#8217;ve been tracking a weird state with SQL Server virtual machines on VMware and possible warnings on database corruption while VM backups are running, largely centered around (but not isolated to) the tempdb database. TLDR: We&#8217;ve now got a VMware KB article on this situation that you and your VM admins should read if you [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We&#8217;ve been tracking a weird state with SQL Server virtual machines on VMware and possible warnings on <strong>database corruption</strong> while VM backups are running, largely centered around (but not isolated to) the tempdb database. </p>



<p>TLDR: We&#8217;ve now got a VMware KB article on this situation that you and your VM admins should read if you hit the condition and fall into the specifics listed below. <a href="https://kb.vmware.com/s/article/88201?lang=en_US" target="_blank" rel="noreferrer noopener">Reference VMware KB 88201 for more details.</a></p>



<p>Here&#8217;s the specifics.</p>



<p>VMware vSphere 7.0 Update 2 introduced something called a bloom filter to boost storage performance. When a snapshot is present on a virtual machine and the VM is relatively active, we&#8217;ve very occasionally seen 823/824 alerts, largely centered on but not limited to the tempdb database. It&#8217;s largely during the time when a VM is getting backed up. It&#8217;s very rare, but it does happen and we&#8217;ve seen our fair share of these over the last two months.</p>



<p>DBAs across the world have been pinging me on this for a few months now as their VM admins update to the latest VMware patches. </p>



<p>VMware has a short-term fix for this to disable the bloom filter, but it must be re-disabled upon ESXi host reboots at this point. They&#8217;re working on an improved resolution path on this issue.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://kb.vmware.com/s/article/88201?lang=en_US"><img loading="lazy" decoding="async" src="https://www.davidklee.net/wp-content/uploads/2022/05/vmw_bloom_filter.png" alt="" class="wp-image-10323" width="480" height="234"/></a></figure>



<p>If you encounter this, please <a href="https://www.davidklee.net/contact/" title="Contact">let me know</a>. We&#8217;re looking for more sites that can repeatedly reproduce this state, as it&#8217;s quite rare. I&#8217;ll keep you all in the loop as new updates are released.</p>



<p><strong>UPDATE: VMware just released <a href="https://docs.vmware.com/en/VMware-vSphere/7.0/rn/vsphere-esxi-70u3f-release-notes.html#resolvedissues" target="_blank" rel="noopener">7.0 Update 3f</a>, which officially disables the bloom filter. I&#8217;m not sure if VMware intends to re-enable this in the future, but the root cause of the data integrity issue is still being investigated. Apply this update as soon as you can if you are experiencing the issue detailed above!</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2022/05/18/vmware-sql-server-823-824-alerts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Add Disk Performance Counters to Windows Task Manager</title>
		<link>https://www.davidklee.net/2022/04/26/add-disk-performance-counters-to-windows-task-manager/</link>
					<comments>https://www.davidklee.net/2022/04/26/add-disk-performance-counters-to-windows-task-manager/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Tue, 26 Apr 2022 14:22:00 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Performance]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10300</guid>

					<description><![CDATA[Have you ever wondered why Windows Server doesn&#8217;t show disk performance metrics in Task Manager, but your Windows 10/11 OS does? It&#8217;s a really silly difference. Let&#8217;s fix that. Open PowerShell or the command prompt with administrative permissions. Run &#8220;diskperf -y&#8220;. Close and re-open Task Manager. Click the performance tab again. Voila! Apply this to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Have you ever wondered why Windows Server doesn&#8217;t show disk performance metrics in Task Manager, but your Windows 10/11 OS does? It&#8217;s a really silly difference.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="479" src="https://www.davidklee.net/wp-content/uploads/2022/04/disk01-1024x479.png" alt="" class="wp-image-10301" srcset="https://www.davidklee.net/wp-content/uploads/2022/04/disk01-980x458.png 980w, https://www.davidklee.net/wp-content/uploads/2022/04/disk01-480x224.png 480w" sizes="auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></figure>



<p>Let&#8217;s fix that. Open PowerShell or the command prompt with administrative permissions. Run &#8220;<strong>diskperf -y</strong>&#8220;.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1004" height="326" src="https://www.davidklee.net/wp-content/uploads/2022/04/disk02.png" alt="" class="wp-image-10302" srcset="https://www.davidklee.net/wp-content/uploads/2022/04/disk02.png 1004w, https://www.davidklee.net/wp-content/uploads/2022/04/disk02-980x318.png 980w, https://www.davidklee.net/wp-content/uploads/2022/04/disk02-480x156.png 480w" sizes="auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1004px, 100vw" /></figure>



<p>Close and re-open Task Manager. Click the performance tab again. Voila! Apply this to your templates and your existing servers and never be without some critical performance counters again.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="484" src="https://www.davidklee.net/wp-content/uploads/2022/04/disk03-1024x484.png" alt="" class="wp-image-10303" srcset="https://www.davidklee.net/wp-content/uploads/2022/04/disk03-980x463.png 980w, https://www.davidklee.net/wp-content/uploads/2022/04/disk03-480x227.png 480w" sizes="auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2022/04/26/add-disk-performance-counters-to-windows-task-manager/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server on Linux Storage Secrets on Microsoft Channel 9</title>
		<link>https://www.davidklee.net/2021/07/29/sql-server-on-linux-storage-secrets-on-microsoft-channel-9/</link>
					<comments>https://www.davidklee.net/2021/07/29/sql-server-on-linux-storage-secrets-on-microsoft-channel-9/#respond</comments>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Thu, 29 Jul 2021 14:37:00 +0000</pubDate>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Channel 9]]></category>
		<category><![CDATA[Data Exposed]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://www.davidklee.net/?p=10123</guid>

					<description><![CDATA[I&#8217;m thrilled to have recently released a video with Microsoft&#8217;s Data Exposed on Channel 9 where I discuss setting up Linux storage appropriate for on-demand disk expansion for your production SQL Server on Linux workloads. I&#8217;ve been working with Linux operating systems since before I knew Windows, and while Linux is an amazing operating system [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignright size-full"><img decoding="async" src="https://www.davidklee.net/wp-content/uploads/2017/11/220px-Tux.png" alt="" class="wp-image-4137"/></figure></div>



<p>I&#8217;m thrilled to have recently released a video with <a href="https://channel9.msdn.com/Shows/Data-Exposed" target="_blank" rel="noreferrer noopener"><strong>Microsoft&#8217;s Data Exposed</strong></a> on <a href="https://channel9.msdn.com" target="_blank" rel="noreferrer noopener"><strong>Channel 9</strong></a> where <a href="https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-on-Linux-Storage-Secrets" target="_blank" rel="noreferrer noopener">I discuss <strong>setting up Linux storage</strong> appropriate for on-demand disk expansion for your production <strong>SQL Server on Linux</strong> workloads</a>. I&#8217;ve been working with Linux operating systems since before I knew Windows, and while Linux is an amazing operating system to run SQL Server on, it&#8217;s just simply different than Windows in a lot of ways. When people put SQL Server on Linux into production, and then need to grow a virtual disk sometime in the future, normally, well, you can&#8217;t expand it. If this is due to an out-of-space issue, this is a major challenge. <a href="https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-on-Linux-Storage-Secrets" target="_blank" rel="noreferrer noopener">Come learn with me</a> how to set up your disks for on-demand expansion, similar to how Windows does it, for your production SQL Server on Linux deployments!</p>



<iframe loading="lazy" src="https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-on-Linux-Storage-Secrets/player" width="960" height="540" allowFullScreen frameBorder="0" title="SQL Server on Linux Storage Secrets - Microsoft Channel 9 Video"></iframe>
]]></content:encoded>
					
					<wfw:commentRss>https://www.davidklee.net/2021/07/29/sql-server-on-linux-storage-secrets-on-microsoft-channel-9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
