<?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>SQL Server Consulting &#8211; Straight Path Solutions</title>
	<atom:link href="http://straightpathsql.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://straightpathsql.com/</link>
	<description>Database Managed Services and Pain Relief. Sleep at night!</description>
	<lastBuildDate>Thu, 30 Apr 2026 23:06:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>http://straightpathsql.com/wp-content/uploads/2020/02/cropped-straight-path-solutions-logo-square-32x32.png</url>
	<title>SQL Server Consulting &#8211; Straight Path Solutions</title>
	<link>https://straightpathsql.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Updates for all sp_Check tools – April 2026</title>
		<link>http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/</link>
					<comments>http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/#respond</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 23:06:23 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Free Tools]]></category>
		<category><![CDATA[sp_check]]></category>
		<category><![CDATA[sp_checkAG]]></category>
		<category><![CDATA[sp_CheckBackup]]></category>
		<category><![CDATA[sp_CheckSecurity]]></category>
		<category><![CDATA[sp_CheckTempdb]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31255</guid>

					<description><![CDATA[<p>It&#8217;s time again for our monthly updates of our FREE sp_Check stored procedures, so here are the April updates. This month we have way more updates than in March, including recommendations from the Issues section of GitHub, so thank you to all who contributed! We also have been working on the content pages referenced by ... <a title="Updates for all sp_Check tools – April 2026" class="read-more" href="http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/" aria-label="Read more about Updates for all sp_Check tools – April 2026">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/">Updates for all sp_Check tools – April 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>It&#8217;s time again for our monthly updates of our FREE sp_Check stored procedures, so here are the April updates.</p>



<p>This month we have way more updates than in March, including recommendations from the Issues section of GitHub, so thank you to all who contributed!</p>



<p>We also have been working on the content pages referenced by the URLs in the stored procedures. We&#8217;ve been going through them all to make sure the content was more helpful. Lots of the previous content pages have had simple sentences that weren&#8217;t very descriptive, so we&#8217;ve been filling those out to provide more explanations.</p>



<p>This month the updates are mostly corrections, although there were additional checks added to  <strong>sp_CheckBackup</strong> and <strong>sp_CheckTempdb</strong>. </p>



<p>We hope these new updates can help you, especially if you’ve never used these stored procedures. Here are the updates for April 2026, with links to the GitHub repositories where you can download the latest versions.</p>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckAG">sp_CheckAG</a></p>



<ul class="wp-block-list">
<li>CORRECT omission of DTC Support check for SQL Server 2016</li>



<li>CORRECT CPU configuration details (CheckID 113)</li>



<li>CORRECT IP Address details for case sensitivity (CheckID 119)</li>



<li>CORRECT check for recent events to account for AlwaysOn_health XE being stopped (CheckID 426)</li>



<li>CORRECT incorrect logic for determining Seeding Mode</li>



<li>ADD check for AlwaysOn_health XE being stopped  (CheckID 429)</li>



<li>UPDATE check for Endpoint Owner to use SID in case sa login renamed (CheckID 406)</li>



<li>UPDATE check for AG Owner to use SID in case sa login renamed (CheckID 407)</li>



<li>UPDATE check for replica database not joined for clarity (CheckID 413)</li>



<li>UPDATE check for session timeout to 2 checks &#8211; one at default, one below (CheckID 415)</li>



<li>UPDATE check for offline listener to include IP and state (CheckID 417)</li>



<li>UPDATE check for replicas not failover ready to include Server Instance (CheckID 421)</li>



<li>ADD EndpointOwnerSID to Endpoints result set</li>



<li>ADD AGOwnerSID to Availability Group result set</li>



<li>CORRECT typos in CheckID 410, 415</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckBackup">sp_CheckBackup</a></p>



<ul class="wp-block-list">
<li>ADD EncryptionType column to @Mode = 2</li>



<li>ADD CompressedBackupSizeInMB and CompressionPercent column to @Mode = 2</li>



<li>ADD check for integrity checks (CheckID 503)</li>



<li>ADD check for backup history not purged (CheckID 216)</li>



<li>ADD check for high VLFs (> 200) (CheckID 217)</li>



<li>ADD check for backups to NUL (CheckID 218)</li>



<li>CORRECTED Check for password protected backups (CheckID 215)</li>



<li>Corrected typo in CHECKID 211</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckSecurity">sp_CheckSecurity</a></p>



<ul class="wp-block-list">
<li>CHANGE check for most recent version for SQL Server security updates</li>



<li>CHANGE Issue, Details, and ActionStep data type in #Results to VARCHAR(MAX)</li>



<li>CHANGE Failed Login check to suppress error message (CheckID 330)</li>



<li>CHANGE Number of Error Logs check to suppress error message (CheckID 801)</li>



<li>CHANGE Hide Instance check to suppress error message (CheckID 348)</li>



<li>CHANGE Extended Protection check to suppress error message (CheckID 348)</li>



<li>CHANGE Force Encryption check to suppress error message (CheckID 349)</li>



<li>CORRECTED logic for creating #InvalidLogins table</li>



<li>CORRECTED incorrect ActionStep for Contained Databases (CheckID 344)</li>



<li>CORRECTED typos in ChecIDs 304, 305, 307, 310, 313, 314, 316, 321, 323, 324, 327, 330, 351, 622</li>



<li>CHANGE CheckID 801 (error log retention is at default) to CheckID 622</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckTempdb">sp_CheckTempdb</a></p>



<ul class="wp-block-list">
<li>ADD description of @Mode = 99 to @Help</li>



<li>CORRECT usage of @Size in @Help</li>



<li>CORRECT checks for Slow reads and Writes (CheckIDs 718 and 719)</li>



<li>CORRECT redundant check for tempdb file with no growth allowed (CheckID 605)</li>



<li>CORRECT redundant check for tempdb file with percentage growth (CheckID 711)</li>



<li>CORRECT redundant check for tempdb file with growth &lt; 64 MB (CheckID 712)</li>



<li>CORRECT redundant check for tempdb file with high usage (CheckID 714)</li>



<li>CORRECT logic for finding more than 8 cores (CheckID 707)</li>



<li>REMOVED redundant code for @UsagePercent</li>



<li>ADD code to avoid negative values for minimum @AvgReadStallMs and @AvgWriteStallMs</li>



<li>ADD drop of #TraceFlg before it is created</li>



<li>ADD check for more than 16 data files (CheckID 730)</li>
</ul>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/">Updates for all sp_Check tools – April 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore</title>
		<link>http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/</link>
					<comments>http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/#respond</comments>
		
		<dc:creator><![CDATA[Noah Locke]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 19:01:56 +0000</pubDate>
				<category><![CDATA[Noah Locke on Data]]></category>
		<category><![CDATA[Business Value of Data]]></category>
		<category><![CDATA[Career Development]]></category>
		<category><![CDATA[Data advocacy]]></category>
		<category><![CDATA[Data Leadership]]></category>
		<category><![CDATA[DBA career]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31173</guid>

					<description><![CDATA[<p>You’ve spent a long time learning about tuning indexes, fighting deadlocks, and keeping the green lights on the physical systems and cloud deployments. You’ve got scripts that could shame half the Stack Overflow answers GPT hasn&#8217;t scraped. You know the difference between CXPACKET and CXCONSUMER without Googling. But here’s the kicker: your CIO doesn’t care ... <a title="From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore" class="read-more" href="http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/" aria-label="Read more about From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/">From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>You’ve spent a long time learning about tuning indexes, fighting deadlocks, and keeping the green lights on the physical systems and cloud deployments. You’ve got scripts that could shame half the Stack Overflow answers GPT hasn&#8217;t scraped. You know the difference between CXPACKET and CXCONSUMER without Googling.</em></p>



<p><em><strong>But here’s the kicker: your CIO doesn’t care about page life expectancy. They care about data monetization.</strong></em></p>



<h2 class="wp-block-heading" id="h-the-problem-sql-server-isn-t-the-whole-playground-anymore">The Problem: <strong>SQL Server Isn’t the Whole Playground Anymore</strong></h2>



<p>Once upon a time, uptime was the crown jewel. If the server was online, you were the hero. But now? Data is flowing into cloud warehouses like Snowflake and Databricks &#8211; maybe even Microsoft Fabric. Meanwhile, Marketing spins up SaaS apps faster than you can say “linked server.” And they&#8217;ve hired or subbed out an entire analytics team that&#8217;s building Spark or Data Warehouse with Dashboards or Jupyter Notebooks that bypass you entirely.</p>



<p>And when those silos don’t talk to each other and the data doesn&#8217;t work for what they are doing? Guess who gets blamed. Yep, the DBA. You. Suddenly, you’re not the guardian of uptime; you’re the bottleneck on the road to AI progress or whatever Next Big Thing™ has your CEO&#8217;s ear.</p>



<p>The Pivot: Stop Being the Mechanic, Start Being the Architect</p>



<p>So what do you do? Sure, you can hunker down and work even harder on T-SQL and internals, but will that help? Think of it this way: Mechanics keep the engine running. Architects design solutions so that the engine powers the business.</p>



<p>In larger companies, the Chief Data Officer (CDO) role exists for one reason: to turn data into business value. But you don’t need a fancy title to start acting like one. What you do need is a strategy. That strategy is up-leveling your talents, and maybe bringing in some help.</p>



<p>But Code Though (Because You’re Still a DBA at Heart)</p>



<p>Let’s be honest: you’re not going to stop focusing on the servers and keeping everything up and running. But let&#8217;s take a look at a couple of queries to illustrate the mindshift you need.</p>



<figure class="wp-block-pullquote"><blockquote><p> I&#8217;ve always said, unless you&#8217;re in a small company, people two levels above you have no idea what you do</p></blockquote></figure>



<p>The first one is typical of a report from a monitoring tool. It says, “Hey boss, the server’s been up for 47 days.” You&#8217;ve shown your value &#8211; your systems are up and running when needed. Except….</p>



<pre class="wp-block-code"><code>--<em> Old world: </em>prove uptime SELECT sqlserver_start_time FROM sys.dm_os_sys_info;</code></pre>



<p>That doesn&#8217;t mean anything to your Leadership. I&#8217;ve always said, unless you&#8217;re in a small company, people two levels above you have no idea what you do. So, how do you map the things you do to the things Leadership cares about?</p>



<p>Well, while the monitoring Dashboards you use are probably pretty useful, they don&#8217;t tell the boss why they should care about your work. A better approach is to map the result of your work to something that drives revenue for the company. I know that sounds marketing-y. Don&#8217;t make that face. This is what they care about.</p>



<p>How about this instead:</p>



<pre class="wp-block-code"><code>SELECT s.sqlserver_start_time, COUNT(*) AS ‘CustomerPurchasesLast3Months’ FROM sys.dm_os_sys_info s CROSS JOIN dbo.Customers c JOIN dbo.Orders o ON c.CustomerID = o.CustomerID WHERE o.OrderDate &gt;= DATEADD(month, -3, GETDATE());</code></pre>



<p>&#8212;&#8212;&#8212;</p>



<p>sqlserver_start_time CustomerPurchasesLast3Months</p>



<p>2025-09-01 08:15:00 12,345</p>



<p>This says, “Hey boss, here’s how many customers bought something in the last quarter on that server that I keep running for you.”<em> Guess which one gets you invited to the strategy meeting with the Spark-ly people.</em></p>



<h2 class="wp-block-heading" id="h-be-the-data-advocate">Be the Data Advocate</h2>



<p>Being a “Data Advocate” is the new job security; <a href="https://straightpathsql.com/archives/2025/10/the-age-of-data-advocates-has-begun/" type="post" id="30093" target="_blank" rel="noreferrer noopener">some here at Straight Path say it&#8217;s always been the job</a>. The DBA who only cares about uptime is replaceable. The DBA who champions data as a business asset? That’s the one who probably sticks around, maybe even gets a promotion from time to time. <strong><em>So the next time you’re tempted to brag about your deadlock troubleshooting skills, pause. Ask yourself: How is this data making the company money?</em></strong></p>



<p>That’s the straight path to data leadership.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/">From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance</title>
		<link>http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/</link>
					<comments>http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/#respond</comments>
		
		<dc:creator><![CDATA[Warren Departee]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 12:07:27 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<category><![CDATA[Azure SQL Managed Instance]]></category>
		<category><![CDATA[backup chain]]></category>
		<category><![CDATA[blob storage]]></category>
		<category><![CDATA[LSN]]></category>
		<category><![CDATA[sp_CheckBackup]]></category>
		<category><![CDATA[transaction log]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31166</guid>

					<description><![CDATA[<p>A client was preparing to move databases from on-prem to Azure SQL Managed Instance. The backup and restore process was going smoothly, full backup restored, differential restored, first log backup restored, everything lining up. Then the next transaction log restore failed due to a mismatched LSN error. The backup chain was broken. The migration was ... <a title="SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance" class="read-more" href="http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/" aria-label="Read more about SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/">SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>A client was preparing to move databases from on-prem to Azure SQL Managed Instance. The backup and restore process was going smoothly, full backup restored, differential restored, first log backup restored, everything lining up. Then the next transaction log restore failed due to a mismatched LSN error. The backup chain was broken. The migration was stalled.</em></p>



<h2 class="wp-block-heading" id="h-the-investigation">The Investigation</h2>



<p><strong>The error message from Azure Managed Instance told the story right away:</strong>  “<em>The restore plan is broken because firstLsn (12345000000456700001) of log backup XXXXX is not equal to the lastLsn (12345000000123400001) restore point in time failed</em>.&#8221; If you&#8217;ve worked with SQL Server backups, you know what the LSN (Log Sequence Number) is. It&#8217;s how SQL Server knows where the last backup left off and where to start the next one, so every transaction is captured. When those numbers don&#8217;t line up, SQL Server won&#8217;t let you restore, and for good reason.</p>



<p>My client had a process in place since they were running the migration, and we were there to catch them if needed. They were going to stop backups with their third-party backup tool, then use native SQL Server backups pointed to Azure Blob Storage to build their restore chain into Managed Instance. The plan made sense.</p>



<p>I quickly grabbed our trusty community tool <a href="https://straightpathsql.com/tool/sp_checkbackup/">sp_CheckBackup</a> and ran this on the source:</p>



<pre class="wp-block-code"><code><code>SP_CheckBackup @Mode = 3, @DatabaseName = 'TheDBTHatIsErroringEvenWithTHeirPlan'</code></code></pre>



<p>Mode 3 checks for <strong>split backup chains</strong>, backups going to different locations, anything that could complicate recovery. Even though they had that plan. this sure felt like a split backup chain&#8230; My gut was right. Some log backups were taken outside of the Blob Storage backup plan, after the initial full, differential, and logs. &#8220;Rogue Backups,&#8221; we call them at Straight Path (though sometimes it gets typoed to rouge backups &#8211; so we&#8217;ve started calling them by either name.)</p>



<p><strong>Here&#8217;s what the timeline looked like:</strong></p>



<ul class="wp-block-list">
<li>12:00 PM &#8211; Full backup to Blob Storage (restored successfully)</li>



<li>6:00 PM &#8211; Differential backup to Blob Storage (restored successfully)</li>



<li>6:10 PM &#8211; Transaction log backup to Blob Storage (restored successfully)</li>



<li><strong>6:20 PM &#8211; Rogue transaction log backup taken by the third-party backup tool</strong> (not in Blob Storage)</li>



<li>7:10 PM &#8211; Next scheduled log backup to Blob Storage (FAILED to restore, LSN mismatch)</li>
</ul>



<p>That rogue backup at 6:20 PM was the problem. Even though the client had removed the database from their third-party backup policy, the backups didn&#8217;t actually stop running. That third-party log backup broke the chain that had been established in Blob Storage because it advanced the LSN past what our next Blob-based log backup expected. </p>



<h2 class="wp-block-heading" id="h-the-fix">The Fix</h2>



<p>Stop the third-party backup solution entirely before initiating backups to Blob Storage. Don&#8217;t just remove the database from the policy. Actually confirm the backups have stopped. Run our free community tool, sp_CheckBackup to verify no rogue backups are sneaking in before you start your restore chain.</p>



<h2 class="wp-block-heading" id="h-the-lesson">The Lesson</h2>



<p>In this case, my client took a fresh full and differential during the migration activity and was eventually successful, but it was painful. And this was for a 1-2GB database. Imagine this with your 2TB or even 24TB database at GO LIVE. <em>Quivers in chair.</em></p>



<p>Here&#8217;s what you should be doing if you&#8217;re planning a migration to Managed Instance (or any backup/restore migration):</p>



<ol class="wp-block-list">
<li><strong>Confirm all third-party backup tools are fully stopped</strong>, not just &#8220;removed from the policy.&#8221; Verify they are no longer touching the database. Run <a href="https://straightpathsql.com/tool/sp_checkbackup/">sp_CheckBackup</a> to confirm.</li>



<li><strong>Validate your backup chain before you start restoring.</strong> Use sp_CheckBackup @Mode = 3 to check for split chains and unexpected backup sources. If someone or something else took a backup you weren&#8217;t expecting, you want to know before you&#8217;re mid-migration, not after.</li>



<li><strong>Bring your DBA team into migration planning early.</strong> With a little coordination on a planning call, gotchas like broken backup chains can be spotted before the big day. This one could have been solved immediately if we&#8217;d been on the call when it happened. And during cutover planning, we could have flagged the risk before it became a problem with a bit more involvement from the start.</li>
</ol>



<p>Rogue backups are one of the most common issues we see across new client environments. Multiple tools taking backups of the same database, often without anyone realizing the other exists. Mike Walsh wrote about this exact pattern in <a href="https://straightpathsql.com/archives/2025/10/sql-server-backups-and-the-illusion-of-safety-confusion/">SQL Server Backups and the Illusion of Safety</a>, where he points out that when <em>everyone </em>is responsible for backups, sometimes <em>no one</em> is actually accountable for recoverability.</p>



<h2 class="wp-block-heading" id="h-the-straight-path-team-and-skills">The Straight Path Team and Skills</h2>



<p>Backup chain integrity is one of the first things we train any new DBA on at Straight Path. <a href="https://straightpathsql.com/tool/sp_checkbackup/">sp_CheckBackup</a> is one of our free community tools, largely built by Jeff Iannucci and David Seis. I&#8217;m confident that anyone on our team would have done the same troubleshooting here. Backups and recoverability are DBA skills 101, and the majority of our clients perform routine restore testing and integrity checks to make sure data is safe and ready for when it matters most.</p>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Straight Path Solutions is a team of nearly 20 SQL Server experts trusted by 120+ clients. We treat our clients&#8217; environments as if they were our own because our job depends on your success. Making your life pain-free in the land of SQL is the rewarding part of our work. If you&#8217;re planning a migration, dealing with backup concerns, or just want to sleep better knowing someone&#8217;s watching your environment, <a href="https://straightpathsql.com/sql-server-consultant/contact-us/">reach out to us</a>.</em></p>



<p><em>This post is part of our <a href="https://straightpathsql.com/archives/category/case-of-the-week/">Case of the Week</a> series, real SQL Server issues and lessons from the field.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/">SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Data Contracts: The Agreement Your Pipeline Has Been Missing</title>
		<link>http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/</link>
					<comments>http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/#respond</comments>
		
		<dc:creator><![CDATA[Buck Woody]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 11:13:40 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[Data Contracts]]></category>
		<category><![CDATA[Data Governance]]></category>
		<category><![CDATA[Data Leadership]]></category>
		<category><![CDATA[Data Products]]></category>
		<category><![CDATA[Data Quality]]></category>
		<category><![CDATA[FromTheCDO]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31162</guid>

					<description><![CDATA[<p>"Data quality is not a technical problem. It's an accountability problem..."</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/">Data Contracts: The Agreement Your Pipeline Has Been Missing</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Formalizing expectations between data producers and consumers stops quality problems before they start</em></p>



<p>A businessperson pulls a report from a data warehouse, runs the same query they&#8217;ve used for two years, and gets a number that doesn&#8217;t match what the finance team presented at yesterday&#8217;s board meeting. Nobody changed the report. Nobody changed the dashboard. But somewhere upstream, an engineering team renamed a field, shifted a column type, or quietly altered the logic in a pipeline, and nobody thought to mention it because there was no mechanism to mention it.</p>



<p>While we think of this as an engineering failure, it&#8217;s more of an implied contract failure. More precisely, it&#8217;s the absence of a formal contract. Data contracts are one of the most practical tools a data organization can adopt, and one of the most underused. The idea is not complicated: a data contract is a formal, enforceable agreement between the team that produces data and the team that consumes it. It defines what the data looks like, what quality standards it must meet, who owns it, and what happens when something changes. Think of it as the API layer for your data, the same guarantee a software engineer expects from a well-documented endpoint, applied to the datasets and pipelines your business depends on. This post is about why that matters at the CDO level and how to get them put in place.</p>



<h2 class="wp-block-heading" id="h-the-problem-with-good-data-intentions">The Problem with Good Data Intentions</h2>



<p>Most data teams operate on informal contracts. A producer team knows that the analytics team uses a certain table. The analytics team assumes that the table will always have the same fields in the same format. It&#8217;s not written down, agreed to, or formalized it. It just became an unspoken convention.</p>



<p>Unspoken conventions are fragile. When the producing team moves to a new schema, the consuming team finds out when the dashboard breaks. When a definition shifts, the downstream metric drifts without warning. When a new consumer starts using a dataset, they&#8217;re inheriting assumptions they didn&#8217;t know existed. Relying on informal agreements to manage data quality at scale is relying on chance and time. Those two things are not working for you, in my experience&#8230;it&#8217;s quite the opposite.</p>



<p>The result is a cycle that most data leaders know by heart: an incident surfaces, a&nbsp;postmortem happens, someone adds a note to a Confluence page, and the cycle repeats six months later with a different field and a different team. The documentation exists, but it isn&#8217;t enforced. Documentation without enforcement is just a polite suggestion.</p>



<p>Data contracts break this cycle by making the agreement explicit, visible, and machine-enforced. They move quality governance from a reactive discipline, where you discover problems after the fact, into a proactive one, where the pipeline validates expectations before data ever reaches a consumer.</p>



<h2 class="wp-block-heading" id="h-what-a-data-contract-actually-contains">What a Data Contract Actually Contains</h2>



<p>A data contract isn&#8217;t a document you put in a SharePoint folder and review annually. It&#8217;s a structured, version-controlled specification that travels with the data and can be executed automatically as part of your pipeline. The components vary by implementation, but the core elements are consistent across mature approaches.</p>



<h3 class="wp-block-heading" id="h-schema-and-structure">Schema and Structure</h3>



<p>This is the foundation. The contract defines the fields, data types, allowed values, and nullability rules for a given dataset or data product. It&#8217;s the equivalent of an API schema, and it enforces the same kind of compatibility guarantees. A consumer who relies on a field being a non-nullable string should not have to discover at 2 a.m. that it&#8217;s now an optional integer.</p>



<h3 class="wp-block-heading" id="h-semantics-and-business-meaning">Semantics and Business Meaning</h3>



<p>Schema alone isn&#8217;t enough. Data contracts include definitions, the actual business meaning of each field. What does customer_id represent? Is it the account-level identifier or the contact-level identifier? Which definition of &#8216;active customer&#8217; does this table use? These are governance questions, and they belong in the contract, not in tribal knowledge held by whoever has been on the team longest.</p>



<h3 class="wp-block-heading" id="h-service-level-agreements">Service Level Agreements</h3>



<p>A contract defines the quality commitments the producer is making. How fresh will this data be? What&#8217;s the acceptable error rate? When does the data land, and what does &#8216;on time&#8217; mean? These are commitments you can monitor, alert on, and hold producers accountable for, because they&#8217;re written down and agreed upon rather than assumed.</p>



<h3 class="wp-block-heading" id="h-ownership-and-stewardship">Ownership and Stewardship</h3>



<p>Every data contract should identify the team or individual responsible for the data product, the escalation path when something goes wrong, and the process for requesting changes. Ownership without a documented path creates the same orphaned-dataset problem that governance programs have struggled with for decades. The contract makes ownership explicit and findable.</p>



<h3 class="wp-block-heading" id="h-change-management-and-versioning">Change Management and Versioning</h3>



<p>This is where contracts earn their value in the long run. When a producer needs to change the schema, the contract defines the process: how much notice is required, how breaking changes are communicated, and how version deprecations are managed. Versioning lets producers evolve their data products without blindsiding the teams that depend on them.</p>



<h2 class="wp-block-heading" id="h-producer-defined-vs-consumer-defined-contracts">Producer-Defined vs. Consumer-Defined Contracts</h2>



<p>Here&#8217;s where implementation gets nuanced, and it&#8217;s worth being direct about what works and what doesn&#8217;t in practice. The obvious approach is to have producers define the contract. They know the data best. They know what it contains, how it&#8217;s generated, and what guarantees they can realistically make. This is what I see most often, and to bue clear, Producer-defined contracts are a significant improvement over no contracts at all.</p>



<p>But there&#8217;s a structural problem: producers often don&#8217;t know how downstream teams are using their data. They optimize for operational concerns. They make changes that seem reasonable from their perspective because they don&#8217;t have visibility into the analytical models, reports, and decisions that depend on the data they produce.</p>



<p>A contract defined only by the producer reflects what the producer thinks the consumer needs. A contract that includes consumer expectations shows what the business department actually needs.</p>



<p>Consumer-defined contracts, or contracts co-developed with meaningful consumer input, solve this issue. When the team building the analytical model has a hand in defining the schema and quality expectations, the contract reflects the actual downstream requirements rather than upstream assumptions. It also creates a feedback loop that a ticket queue will never produce, because consumers are involved in defining the standard before something breaks rather than after.</p>



<p>Here&#8217;s my recommendation: start with consumer-defined awareness. Let consumers document the expectations they rely on. Use that to generate awareness among producers about the downstream impact of their changes. Then move toward formal contracts that are collaboratively defined and enforced in the pipeline. The maturity curve is awareness, then ownership, then governance.</p>



<h2 class="wp-block-heading" id="h-enforcement-is-the-difference-between-a-contract-and-a-wish">Enforcement Is the Difference Between a Contract and a Wish</h2>



<p>The single most important thing to understand about data contracts is that a contract that can&#8217;t be enforced automatically isn&#8217;t a contract. It&#8217;s documentation with good intentions, and documentation without enforcement.</p>



<p>Enforcement means the validation logic lives in the pipeline, not in a spreadsheet. When data arrives from a producer, the pipeline checks it against the contract before making it available to consumers. If the data doesn&#8217;t meet the defined expectations, it doesn&#8217;t pass through. The issue is surfaced at the point of production, not discovered downstream when a dashboard breaks or a model produces nonsense output.</p>



<p>This is sometimes called shift-left&#8221;. Instead of catching problems at the point of consumption, you catch them at the point of creation. The cost of a data quality issue found at the source is a fraction of the cost of the same issue found after it has propagated through six downstream pipelines and influenced a business decision.</p>



<h2 class="wp-block-heading" id="h-patterns-that-work">Patterns that work</h2>



<p>So let&#8217;s dive in to the practical aspects of creating a data contract. They have a few features that I see used with success. Take a look at these (<strong><em>the What</em></strong>), and then decide the physical implementation you will use (<strong><em>the How</em></strong>):</p>



<p><strong>Quality as code: </strong>Contract specifications written in YAML or similar formats, checked into version control, and executed directly in the pipeline. The contract is treated like any other code artifact: reviewed, tested, and deployed through standard engineering workflows.</p>



<p><strong>CI/CD integration: </strong>Contracts are validated as part of the deployment process. A schema change that would break a downstream contract fails the build before it reaches production. Breaking changes require an updated contract version and advance notice to consumers.</p>



<p><strong>Automated monitoring: </strong>Once the contract is live, the pipeline continuously validates incoming data against the specification. Violations trigger alerts, not just log entries. Producers are notified when they&#8217;re breaking a commitment their consumers depend on.</p>



<p><strong>Lineage integration:</strong> Contracts embedded in metadata platforms connect ownership, definitions, and quality expectations to the data catalog. Any consumer who queries a dataset can see the contract, understand the quality commitments, and identify the owner without opening a single ticket.</p>



<h2 class="wp-block-heading" id="h-the-cdo-case-for-data-contracts">The CDO Case for Data Contracts</h2>



<p>As a CDO, you&#8217;re probably not writing YAML specifications. But you are accountable for the organizational conditions that make data contracts work, and you&#8217;re the executive who can remove the barriers that prevent their adoption.</p>



<p>There are four things the CDO function needs to own in a data contract program:</p>



<ol start="1" class="wp-block-list">
<li>Data contracts only work when producers take responsibility for the downstream impact of their changes. That cultural shift requires executive reinforcement. It doesn&#8217;t happen from the bottom of the engineering hierarchy. <strong><em>Mandate the culture of explicit ownership.</em></strong></li>



<li>If producer teams are measured on deployment velocity and nothing else, they&#8217;ll deprioritize the upstream coordination that contract maintenance requires. The metrics that support a contract culture include time to detect quality issues, rate of downstream incidents caused by upstream changes, and consumer satisfaction with data reliability. Measure what you want to see. <strong><em>Align the measurement model.</em></strong></li>



<li>Contracts need a place to live that both producers and consumers can access. A metadata platform or data catalog that supports contract specifications, version history, and automated validation is a prerequisite. This is a platform investment, not a policy investment, and it requires CDO-level sponsorship to get funded. <strong><em>Invest in the shared infrastructure.</em></strong></li>



<li>You don&#8217;t need to contract every dataset all at once. Identify the five to ten data products that drive the most critical business decisions, or that have caused the most downstream incidents in the past year. Contract those first. Build the muscle, prove the value, and expand from there. <strong><em>Start with the data products that matter most.</em></strong></li>
</ol>



<h2 class="wp-block-heading" id="h-what-good-looks-like-in-practice">What &#8220;Good&#8221; Looks Like in Practice</h2>



<p>When data contracts are working in an organization, a few things change in ways that are immediately visible. Engineers stop finding out about breaking changes from an angry Slack message. The pipeline tells them first, before the change reaches production. The conversation shifts from incident response to change coordination.</p>



<p>Analysts stop spending time reconciling conflicting numbers. They know which dataset is authoritative, they know when it was last updated, and they know what quality checks it passed. They spend that time on analysis instead of archaeology.</p>



<p>Data leaders stop measuring quality by the absence of complaints. They have instrumented visibility into contract compliance rates, SLA adherence, and the velocity of quality issues by domain. They can report on data reliability the same way engineering reports on system reliability.</p>



<p>And the business relationship with data changes. When business leaders can trust that a number in a dashboard has been validated against a known specification, they don&#8217;t waste meeting time questioning the data. They make the decision. That&#8217;s the definition of decision velocity, and it&#8217;s what a data organization is actually for.</p>



<h2 class="wp-block-heading" id="h-getting-started-a-practical-sequence">Getting Started: A Practical Sequence</h2>



<p><strong>If you&#8217;re starting from zero, here&#8217;s a sequence that has worked in practice without requiring a rearchitecture of your entire data platform.</strong></p>



<ol start="1" class="wp-block-list">
<li>Which datasets power your most important decisions? Which ones have caused the most downstream incidents? Start there. You don&#8217;t need to tackle everything at once. Audit your highest-impact datasets.</li>



<li>Talk to your consumers. What do they expect from these datasets? What would break their work if it changed? This documentation becomes the foundation of the formal contract. Document the informal contracts that already exist.</li>



<li>Work with both producers and consumers to codify expectations: schema, semantics, SLAs, ownership, and change management process. Put it in version control. Define the contract specification.</li>



<li>Encode the contract&#8217;s quality rules into the pipeline. Automate the checks. Route violations to the producer before data reaches consumers. Implement pipeline validation.</li>



<li>Make contracts discoverable. If a consumer can&#8217;t find the contract, the governance value is lost. A data catalog that links datasets to their contracts, owners, and quality history is the operational infrastructure that makes the program scale. Connect contracts to your metadata layer.</li>



<li>Once the first set of contracts is working, identify domain owners who can drive contract adoption within their area. The CDO&#8217;s office sets the standard. The domains implement it. Expand by domain.</li>
</ol>



<p><strong>Data quality is not a technical problem. It&#8217;s an accountability problem.</strong> The technical tooling, pipelines, catalogs, validation frameworks, is a layer of infrastructure. But infrastructure doesn&#8217;t create accountability. Agreements do.</p>



<p>Data contracts make the agreement visible, enforceable, and real. They transform the implicit expectations that exist in every data organization into explicit commitments that can be monitored, measured, and acted upon.</p>



<p>Your business is already relying on informal contracts. The only question is whether you&#8217;ll formalize them before the next incident, or after it.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/">Data Contracts: The Agreement Your Pipeline Has Been Missing</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Free SQL Server Health Check with dbatools</title>
		<link>http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/</link>
					<comments>http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/#comments</comments>
		
		<dc:creator><![CDATA[David Seis]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 16:02:50 +0000</pubDate>
				<category><![CDATA[dbatools for the SQL Server DBA]]></category>
		<category><![CDATA[Database Health Check]]></category>
		<category><![CDATA[DBA tools]]></category>
		<category><![CDATA[dbatools]]></category>
		<category><![CDATA[Free Tools]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Health Check]]></category>
		<category><![CDATA[SQL Server Monitoring]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31078</guid>

					<description><![CDATA[<p>After a longer break than expected, I am back to the dbatools for SQL Server DBAs blog series, and this one is a monster! In fact, this project is so big that I think it will be better to release it incrementally. This will allow you clone the repository, test and modify it in your ... <a title="Free SQL Server Health Check with dbatools" class="read-more" href="http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/" aria-label="Read more about Free SQL Server Health Check with dbatools">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/">Free SQL Server Health Check with dbatools</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>After a longer break than expected, I am back to the <a href="https://straightpathsql.com/archives/category/dbatools-for-the-sql-server-dba/" type="category" id="2457">dbatools for SQL Server DBAs blog series</a>, and this one is a monster! In fact, this project is so big that I think it will be better to release it incrementally. This will allow you clone the repository, test and modify it in your own environment and come back for free updates over the weeks/ months to come. It is designed to allow you to customize it to your environment’s needs. This first post will be the initial process overview as well as the first set of checks and how to navigate the report.</p>



<figure class="wp-block-image size-full is-style-default"><img fetchpriority="high" decoding="async" width="975" height="694" src="https://straightpathsql.com/wp-content/uploads/2026/04/image.png" alt="Free SQL Server Health Check Driven by dbatools PowerShell." class="wp-image-31079" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-300x214.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-768x547.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p>My goal was to grab every dbatools discovery command I could find and shape it into a usable health check for you to use. There are 700 dbatools commands, and portion of that is geared for discovery and testing. I did not include every possible command and as you can imagine there are a lot of moving parts. I’ve got it in a good state for you to take, look at, modify, and make your own. This is the dbatools powered checkup that made sense to me, I hope it is useful and exciting for you!</p>



<p>You can access all the source code and follow along in this post and the subsequent posts walking through this <a href="https://github.com/Straight-Path-Solutions/PowerShell-automation/tree/main/Scripts/Dbatools%20Check-up">on our github</a>. Like our family of <a href="https://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/" type="post" id="31073">sp_check*</a> community tools, this is free for you to explore, understand, and use to improve your own environment.</p>



<h2 class="wp-block-heading" id="h-boilerplate">Boilerplate</h2>



<p>As a reminder, I <a href="https://straightpathsql.com/archives/2025/04/why-invoke-dbaquery-is-my-most-used-dbatools-query/" target="_blank" rel="noreferrer noopener">created a multi-subnet lab</a> with three developer edition SQL Server instances, one SQL Express and a network share based on&nbsp;<a href="https://www.sqlskills.com/blogs/jonathan/configuring-a-multi-subnet-sql-server-test-environment/" target="_blank" rel="noreferrer noopener">this blog post by Jonathan Kehayias</a>. I will likely need to rebuild it after the beating it has taken through this blog series, however that makes it all the more useful for this round. If you are not familiar with dbatools yet, now is the perfect time to grab a test instance and learn! On your test environment you can open&nbsp;<a href="https://straightpathsql.com/archives/tag/powershell/">PowerShell</a>&nbsp;and run the following scripts. These will install Dbatools and add it to the path for future projects as well as import it into the current session for the purpose of testing the scripts of this blog post. </p>



<pre class="wp-block-code"><code>Install-Module Dbatools

Import-Module Dbatools</code></pre>



<h2 class="wp-block-heading" id="h-the-core-design-principle-read-only"><strong>The Core Design Principle: Read-Only</strong></h2>



<p id="h-the-core-design-principle-read-only-this-sql-server-health-check-engine-is-designed-to-report-not-add-or-change-the-star-of-the-show-is-meant-to-be-dbatools-i-chose-many-of-the-get-and-test-cmdlets-some-measures-and-a-few-invoke-dbaquery-i-will-dig-into-the-design-and-organization-for-your-own-testing-and-review-but-this-process-is-meant-to-read-and-report-within-your-environment-only-each-finding-is-linked-back-to-the-original-dbatools-function-to-point-out-how-useful-they-are-in-your-day-to-day-dba-administration-and-review-tasks">This SQL Server Health Check engine is designed to report, not add or change. The star of the show is meant to be DBAtools. I chose many of the GET and TEST cmdlets, some measures, and a few invoke-dbaquery. I will dig into the design and organization for your own testing and review, but this process is meant to read and report within your environment only. Each finding is linked back to the original dbatools function to point out how useful they are in your day-to-day DBA administration and review tasks!<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="518" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-2.png" alt="" class="wp-image-31121" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-2.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-2-300x159.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-2-768x408.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p id="h-the-core-design-principle-read-only-this-sql-server-health-check-engine-is-designed-to-report-not-add-or-change-the-star-of-the-show-is-meant-to-be-dbatools-i-chose-many-of-the-get-and-test-cmdlets-some-measures-and-a-few-invoke-dbaquery-i-will-dig-into-the-design-and-organization-for-your-own-testing-and-review-but-this-process-is-meant-to-read-and-report-within-your-environment-only-each-finding-is-linked-back-to-the-original-dbatools-function-to-point-out-how-useful-they-are-in-your-day-to-day-dba-administration-and-review-tasks"></p>



<h2 class="wp-block-heading" id="h-sql-server-health-check-architecture-overview">SQL Server Health Check Architecture Overview</h2>



<p>The suite follows a clean hub-and-spoke architecture with four layers:</p>



<p><strong>Menu → Engine → Spokes → Output</strong></p>



<ul class="wp-block-list">
<li><strong>Start-Checkup.ps1 (Menu):</strong> The single entry point. You configure all thresholds, toggles, and paths here — nothing is buried elsewhere. It builds the canonical $Settings hashtable and calls the engine once.</li>



<li><strong>Checkup.Engine.ps1 (Engine):</strong> The orchestrator. It loads targets, discovers check modules, runs each module against each instance, and hands off to the output layer. It contains zero check logic itself.</li>



<li><strong>Spoke.*.ps1 (Spokes):</strong> Individual check packs covering specific domains. Each is self-contained and communicates with the engine through a strict contract — it receives a $Target, a $Config, and a [ref]$Findings list. Nothing else.</li>



<li><strong>JSON + HTML Output:</strong> Findings are first written to a timestamped JSON file (the system of record), then projected into a self-contained HTML report via Report.HtmlBuilder.ps1.</li>



<li><strong>Checkup.Catalog:</strong> The check catalog is the backend check organization tool. Instead of digging though the Spoke files individually to change the priority and category of a check, you can configure both for each check in one place. You can also edit the Label that shows up in the report, if desired.</li>
</ul>



<p>This separation means you can add a new check pack without touching the engine, update the report template without touching any check logic, and trust that the contracts between layers stay stable.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="646" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-8.png" alt="" class="wp-image-31137" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-8.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-8-300x199.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-8-768x509.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-what-dba-best-practices-and-configs-are-checked">What DBA Best Practices and Configs are Checked?</h2>



<p>It will be a lot. This first iteration will ship with the database spoke. Each pack will be covering many of the areas that matter most in day-to-day SQL Server operations for DBAs. The planned spokes are as follows:</p>



<ul class="wp-block-list">
<li><strong>Instance:</strong> Build version currency, startup parameters, sp_configure settings, surface area configuration, error log scanning, and SQL Server Agent status.</li>



<li><strong>Database ( you are getting this one today!):</strong> Backup currency (full, diff, log), VLF counts, auto-growth events, space utilization, anti-pattern detection (Auto-Shrink, Auto-Close), TDE inventory, Query Store status, and owner compliance.</li>



<li><strong>Maintenance:</strong> Last good CHECKDB age, statistics staleness, duplicate/unused/disabled indexes, wait statistics analysis, and identity column capacity.</li>



<li><strong>HADR:</strong> Availability Group health, replica connectivity, log shipping status, and legacy database mirroring.</li>



<li><strong>Security &amp; Audit:</strong> Server-level and database-level audit specifications, SA account status, and surface area exposure.</li>



<li><strong>TempDB:</strong> File count, equal sizing, growth configuration, and space utilization.</li>



<li><strong>Networking:</strong> TCP/IP configuration, named pipes, SPN compliance, static vs. dynamic port, and round-trip latency.</li>



<li><strong>Host:</strong> Power plan compliance, disk space, and OS-level configuration.</li>



<li><strong>Misc:</strong> Database Mail health, Extended Events sessions, and notable trace flags.</li>
</ul>



<p>Every check produces one of three actionable statuses — <strong>Pass</strong>, <strong>Attention</strong>, or <strong>Fail</strong> — plus an <strong>Informational</strong> category for inventory-style output that doesn&#8217;t require action.<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="691" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-7.png" alt="" class="wp-image-31133" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-7.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-7-300x213.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-7-768x544.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-scoring-and-the-health-check-report">Scoring and the Health Check Report</h2>



<p>Findings aren&#8217;t just a flat list. Each check carries a configurable weight, and scores roll up by category and across the entire instance into a single health percentage — visualized as a gauge in the report header.</p>



<p><em>We use a similar scoring and multiple category analysis approach in our professional SQL Server scorecard engagements, where we go deeper with expert analysis and a prioritized action plan. We use the same approach with the proactive dashboard we maintain across the 2,000+ SQL Server instances we manage for our more than 120 DBA-as-a-Service clients.</em></p>



<p>The HTML report is fully self-contained (no external dependencies, no server required). It supports:</p>



<ul class="wp-block-list">
<li>An <strong>overview</strong> dashboard showing all instances, category breakdowns, and aggregate scores</li>



<li>A drill-down <strong>per-instance view</strong> with a full findings table</li>



<li>An <strong>all-findings</strong> view filterable by status and category</li>



<li><strong>Import/Export JSON/Excel Workbook</strong> buttons for sharing or archiving results</li>



<li>Sortable tables and color-coded heat cells (red → amber → green)</li>
</ul>



<p>You can email the HTML file, drop it in a SharePoint, or store it alongside your deployment artifacts — it works anywhere a browser does.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="713" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-6.png" alt="" class="wp-image-31132" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-6.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-6-300x219.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-6-768x562.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p><br></p>



<h2 class="wp-block-heading" id="h-configuration-everything-in-one-place">Configuration: Everything in One Place</h2>



<p>One of the deliberate design choices is that all configuration lives in a single file: Start-Checkup.ps1. The goal was that there should be no hidden config files, no registry keys, no scattered settings. Every threshold — from the percentage that triggers an identity column warning to whether Named Pipes being enabled is a Fail or just an Attention — is documented inline with a comment explaining the intent.</p>



<p># Free space thresholds (percent free)</p>



<p>FreeSpacePctAttention = 15.0</p>



<p>FreeSpacePctFail      = 5.0</p>



<p>You configure your targets in a Targets.json file, supporting Windows integrated auth, per-target SQL credentials, or a single shared credential for bulk runs.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="913" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-5.png" alt="" class="wp-image-31131" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-5.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-5-300x281.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-5-768x719.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-get-started-building-your-own-sql-server-health-check-and-score-report">Get Started Building Your Own SQL Server Health Check and Score Report</h2>



<p>Prerequisites are minimal: PowerShell 5.1+ and the <a href="https://dbatools.io/">dbatools</a> module. The suite uses dbatools exclusively for SQL connectivity — only read-only cmdlets (Get-*, Test-*, Invoke-Dba*Diagnostic*).</p>



<ol start="1" class="wp-block-list">
<li>Clone or download the suite to a local folder.</li>



<li>Edit 3. Helpers\Targets.json to list your SQL Server instances.</li>



<li>Review thresholds in Start-Checkup.ps1 — the defaults felt reasonable to me, but your environment will have different baseline configurations.</li>



<li>Run Start-Checkup.ps1 from PowerShell.</li>



<li>Once completed, the html report will automatically open, otherwise you can open the HTML report from the 4. Output\Reports folder.</li>



<li>You can export the findings to json (if for some reason you keep the report but not the json result file) or to an excel workbook. The excel workbook has the overview table and the all-findings table. You can also import json if you are wanting to look at a previous run’s data during testing.</li>
</ol>



<p>The first run will create settings.json from your definitions. Subsequent runs reuse those settings unless you pass -OverwriteSettings. More How-To guides and what to expect will be added to the repo as I release more spokes and as you all have questions. Also, the report has a “?” icon in the top right corner that opens a user guide to help you navigate the report results:<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="715" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-4.png" alt="" class="wp-image-31126" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-4.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-4-300x220.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-4-768x563.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-conclusion">Conclusion</h2>



<p><strong><em>This is not in its final state; in fact, it is meant to be picked up by you and modified to fit your own needs. </em></strong>I worked on this for longer than I ever expected, and there is more I would do if I had the time. With so many moving parts, I can guarantee you that something has been overlooked. </p>



<p>Please take a look at it, respond here, or log bugs on GitHub if you notice any problems. </p>



<p>Look to our blog here or subscribe to our newsletter to find out when I drop the next posts, when I will be back with the additional spokes I promised above, and will let you all know about the updates we make periodically in response to bug fixes. </p>



<p>Hopefully, in just a few months, this will be an awesome health-check tool for you to keep tabs on your environment, featuring dbatools!<br><br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="707" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-3.png" alt="" class="wp-image-31125" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-3.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-3-300x218.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-3-768x557.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p><br></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/">Free SQL Server Health Check with dbatools</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Updates for all sp_Check tools – March 2026</title>
		<link>http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/</link>
					<comments>http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/#respond</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 22:20:05 +0000</pubDate>
				<category><![CDATA[Free DBA Tool]]></category>
		<category><![CDATA[Free Tools]]></category>
		<category><![CDATA[sp_check]]></category>
		<category><![CDATA[sp_checkAG]]></category>
		<category><![CDATA[sp_CheckBackup]]></category>
		<category><![CDATA[sp_CheckSecurity]]></category>
		<category><![CDATA[sp_CheckTempdb]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31073</guid>

					<description><![CDATA[<p>As promised last month, we are planning for (at least) monthly updates of our FREE sp_Check stored procedures, so here are the March updates. This month we did change the “ReadMore” URL links in the results of all tools to not use redirects. This might have been causing issues for folks who just wanted some ... <a title="Updates for all sp_Check tools – March 2026" class="read-more" href="http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/" aria-label="Read more about Updates for all sp_Check tools – March 2026">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/">Updates for all sp_Check tools – March 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As promised last month, we are planning for (at least) monthly updates of our FREE sp_Check stored procedures, so here are the March updates. </p>



<p>This month we did change the “ReadMore” URL links in the results of all tools to not use redirects. This might have been causing issues for folks who just wanted some more info about the findings in our tools, and we apologize if you were one of those folks.</p>



<p>Speaking of URLs, we found a bunch that didn’t work because the wording was wrong. We’re not sure how this happened, but we will get these fixed in the April updates.</p>



<p>This month though there are mostly a few small updates for the tools, as next month’s updates should also include many of the issues noted in GitHub (thanks for those!) Most of this month’s updates were to <strong>sp_CheckSecurity</strong>, although we did add “Initial File Size” to the output of <strong>sp_CheckTempdb </strong>since that had been requested by a few folks.</p>



<p>We hope these new updates can help you, especially if you’ve never used these stored procedures. Here are the updates for March 2026, with links to the GitHub repositories where you can download the latest versions.</p>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckAG">sp_CheckAG</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>Change High HADR_SYNC_COMMIT waits to avoid arithmetic overflow (CheckID 422)</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckBackup">sp_CheckBackup</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>ADD check for password protected backups (CheckID 215)</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckSecurity">sp_CheckSecurity</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>CHANGE check for most recent version for SQL Server security updates</li>



<li>CORRECT inconsistent recommendation for Database owner discrepancy (CheckID 306)</li>



<li>CHANGE Database owner discrepancy (CheckID 306) to only check online databases</li>



<li>CHANGE Service Account using local elevated account (CheckID 329) to include the SQL Agent service.</li>



<li>CHANGE Service Account in sysadmin role (CheckID 350) to include the SQL Agent service.</li>



<li>ADD check for SQL Server services in local Administrators group (CheckID 351)</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckTempdb">sp_CheckTempdb</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>Add InitialFileSize to @Mode = 1</li>



<li>Remove ordinal values from ORDER BY in @Mode = 1</li>
</ul>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/">Updates for all sp_Check tools – March 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery</title>
		<link>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/</link>
					<comments>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/#respond</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 14:40:51 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31061</guid>

					<description><![CDATA[<p>You get an alert that there are one or more databases in a “Recovery Pending&#8221; state. This means the database started but could not complete the recovery pending process for some unknown reason. It is stuck in this state and unusable until recovery can be completed. The Investigation After receiving the alert, I verified that ... <a title="SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery" class="read-more" href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/" aria-label="Read more about SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/">SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>You get an alert that there are one or more databases in a “Recovery Pending&#8221; state. This means the database started but could not complete the recovery pending process for some unknown reason. It is stuck in this state and unusable until recovery can be completed.</em></p>



<h2 class="wp-block-heading" id="h-the-investigation"><strong>The Investigation</strong></h2>



<p>After receiving the alert, I verified that there were multiple databases on the same instance that were in the “Recovery Pending” state. A review of the SQL Server error log showed that the folder on the L drive was inaccessible, so transaction log files could not be read.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="234" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-7.png" alt="" class="wp-image-31062" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-7.png 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-7-300x113.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p>Those errors were not current though, and the L drive now appeared to be accessible. Moreover, it did not appear to be out of space (which could have been a possible root cause of the error.)</p>



<p>Reviewing the Windows System error log on the server showed there was a storage level issue for that drive only at the time of the errors in the SQL Server error log, and that those errors were no longer persisting.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="491" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-8.png" alt="" class="wp-image-31063" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-8.png 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-8-300x236.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h2 class="wp-block-heading" id="h-the-fix"><strong>The Fix</strong></h2>



<p>Often times a database is in the “Recovery Pending” state because there is corruption in the transaction log file. In that case, the database may need to be set to EMERGENCY state, set to SINGLE_USER, and then have DBCC CHECKDB run with REPAIR_ALLOW_DATA_LOSS. As with most situations involving corruption, you’re better off restoring from a backup then trying the “database surgery” method, since you never know how much the data will be lost with the former method.</p>



<p>Fortunately, this was not an issue of corruption, but rather one of the drive with the transaction log files being temporarily unavailable. Since the drive was now available, the databases could be brought online by simply taking them offline, then bringing them online.</p>



<p>ALTER DATABASE&nbsp;[DatabaseName]&nbsp;SET&nbsp;OFFLINE;</p>



<p>GO</p>



<p>ALTER DATABASE&nbsp;[DatabaseName]&nbsp;SET&nbsp;ONLINE;</p>



<p>GO</p>



<p>Since the transaction log files were now readable, the online process was able to successfully complete recovery.</p>



<p>As a side note, since these databases were in a state where there could be no connections we didn’t need to ROLLBACK IMMEDIATE to account for any activity.</p>



<p>One final step was needed, though. Although we did not suspect that the “Pending Recovery” state was due to corruption, we still ran DBCC CHECKDB for each database to verify there were no consistency errors.</p>



<h2 class="wp-block-heading" id="h-the-takeaway"><strong>The Takeaway</strong></h2>



<p>Finding one or more databases in the unusable “Recovery Pending” status can be shocking, but the solution may be shockingly simple.</p>



<ol class="wp-block-list">
<li><strong>Check the SQL Server and Windows error logs</strong>. In this case we were able to quickly identify that the cause was a temporary and not persistent storage level error. Since it the issue only affected some but not all databases, we had hope the quick fix noted above would work.</li>



<li><strong>Try the solution of least resistance first.</strong> Someone with less experience might have tried to solve this by asking a search engine or AI chatbot what to do. I did a quick survey and those solutions said to go the way of repairing with data loss. That should be a last resort, and maybe not even a necessary option if you…</li>



<li><strong>Always have a backup</strong>. Backups are the most important thing you can have for your databases. For “oops” moments, for ransomware, for corrupted data files, and for times like this. If our method had not worked, we still verified that recent backups were available if needed.</li>



<li><strong>You still need an integrity check.</strong> Any time you have a database recovered from an unusual state, you should always run an integrity check. It’s better to know now if you have an issue that requires a database to be restored from backup.</li>
</ol>



<p>Seriously, go check your backups now. We even have <a href="https://straightpathsql.com/tool/sp_checkbackup/">a tool to help you check SQL Server database backups</a> quickly.</p>



<h2 class="wp-block-heading" id="h-the-straight-path-team-and-skills"><strong>The Straight Path Team and Skills</strong></h2>



<p>Andrew Kelly and I collaborated on troubleshooting this issue. All thanks to him for suggesting this simple fix in this case.</p>



<p>Troubleshooting like this is a team effort, and having multiple perspectives and experience with the problem helped us come to a solution in just a few minutes.</p>



<p>This post is part of our Case of the Week series—real SQL Server issues and lessons from the field.</p>



<p>If you are inheriting SQL Server environments and want a team that knows how to dig into the details, reach out to us, and let’s talk about managing your SQL Server environment together. Our team is 20 people deep, and we have MVPs, speakers, bloggers, and authors. We know a lot because we’ve been exposed to a lot.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/">SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Data Literacy is a Strategic Opportunity</title>
		<link>http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/</link>
					<comments>http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/#respond</comments>
		
		<dc:creator><![CDATA[Buck Woody]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 13:29:10 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[Data Literacy]]></category>
		<category><![CDATA[Data Strategy]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31055</guid>

					<description><![CDATA[<p>Every year, organizations spend money on data platforms, business intelligence tooling, and analytics subscriptions. The decision to start these projects get executive sponsorship. The implementation gets a project manager. The launch gets a company-wide email with a lot of enthusiasm and a screenshot of the new dashboard. Then, six months later, the same leadership team ... <a title="Data Literacy is a Strategic Opportunity" class="read-more" href="http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/" aria-label="Read more about Data Literacy is a Strategic Opportunity">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/">Data Literacy is a Strategic Opportunity</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p id="h-">Every year, organizations spend money on data platforms, business intelligence tooling, and analytics subscriptions. The decision to start these projects get executive sponsorship. The implementation gets a project manager. The launch gets a company-wide email with a lot of enthusiasm and a screenshot of the new dashboard. Then, six months later, the same leadership team is still making the same decisions the same way they always have, by instinct, by seniority, and by whoever made the most noise in the last meeting.The technology performed as designed. The strategy around it was incomplete from the start.</p>



<p>This is a pattern I&#8217;ve seen repeated across organizations of every size and industry, and it almost always traces back to the same root cause: leadership thinks infrastructure investment just has an inherent capability benefit. They&#8217;re not the same thing, and no amount of marketing features close that gap.</p>



<p>There&#8217;s a persistent belief I sse that the right platform will, on its own, change how an organization thinks, acts and just makes things better. But the food you see in the fast-food commercial isn&#8217;t always what you get at the counter. A dashboard placed in front of someone who doesn&#8217;t understand what they&#8217;re looking at produces exactly one outcome: confusion dressed up as confidence. People nod knowingly at the chart, return to their desks, and do what they were going to do anyway. I&#8217;ve been in those rooms. We&#8217;ve all been in those rooms.</p>



<p id="h-">This is expected behavior. When organizations invest heavily in data infrastructure but lightly in evaluating the real data capability, they create an asymmetry that no software release can fix. Closing the gap between &#8220;we have data&#8221; and &#8220;we use data well&#8221; is fundamentally a human problem, and it requires a human answer. I&#8217;m very passionate, especially in these data-rich, context-poor times, about Data Literacy. I&#8217;ve created and taught courses and workshops on Data Literacy from high-schools to colleges to C-level staff meetings.</p>



<h2 class="wp-block-heading" id="h-what-we-mean-when-we-say-data-literacy">What We Mean When We Say Data Literacy</h2>



<p>The term &#8220;Data Literacy&#8221; gets used loosely enough that it&#8217;s worth being precise about what it means in practice. Data literacy means equipping people at every level with the ability to read data critically, ask the right questions about what they&#8217;re seeing, and understand its limitations well enough to avoid being misled by it. Writing SQL or building regression models is specialty work. Understanding data correctly is everyone&#8217;s job. Anyone who uses data should be trained in Data Literacy.</p>



<p>Think about financial literacy as a parallel. A financially literate executive doesn&#8217;t personally perform audits. But they know how to read a balance sheet, they recognize when a number doesn&#8217;t make sense in context, and they know which questions will surface the real story beneath a tidy summary. Data literacy is that same capability applied to the information your organization produces and consumes every single day.</p>



<p>In practical terms, this looks like a sales manager who can examine a pipeline report and understand why a conversion rate trending upward during a seasonally slow period deserves skepticism rather than celebration. It looks like an operations director who can distinguish between a process that actually improved and a measurement methodology that changed. It looks like a finance partner who understands why an average can be technically correct and deeply misleading at the same time. None of these are advanced analytical skills. They&#8217;re foundational ones, and most organizations have never deliberately built them.</p>



<h2 class="wp-block-heading" id="h-data-literacy-is-the-cdo-s-job">Data Literacy is the CDO&#8217;s Job</h2>



<p>Chief Data Officers (or a group of people tasked in that capacity) tend to inherit a mandate that&#8217;s heavily weighted toward infrastructure: modernize the stack, migrate to the cloud, build the lake, implement governance. These are legitimate priorities and they deserve real attention. But they&#8217;re enabling work. The actual outcome the business is paying for is better decisions, made faster, with greater confidence. Infrastructure creates the conditions for that outcome. Literacy delivers it. The CDO who hands data literacy off to a learning and development team with a catalog of e-learning modules will consistently underdeliver on the promise of the data function. Literacy is a culture, and culture gets shaped by what leadership measures, rewards, and models, not by what it assigns.</p>



<p>The signals are usually obvious once you know to look for them. If the CDO is the only person in the room asking critical questions about data quality, that&#8217;s a signal. If business reviews treat dashboards as authority rather than as evidence to be interrogated, that&#8217;s a signal. If the phrase &#8220;the data shows&#8221; ends a conversation rather than starts one, that&#8217;s a signal. These are indicators of an organization where data fluency hasn&#8217;t been made a shared expectation, and shared expectations are set by leadership.</p>



<h2 class="wp-block-heading">Building Literacy Into the Work</h2>



<p>The organizations that do this well embed literacy into the work itself rather than running it as a separate program alongside the business. The approach is far more surgical than most people expect.</p>



<p>It starts by identifying the handful of decisions that drive the most value in the business, the ones that, if made faster or more accurately, would compound meaningfully over time. Then you audit those decisions: what data is actually being used, who&#8217;s interpreting it, what assumptions are baked into the framing, and what questions nobody&#8217;s asking yet. That audit almost always reveals that the bottleneck is the shared vocabulary and critical framework needed to act on what the data is saying, with access rarely being the real constraint.</p>



<p>From there, the work gets targeted. You build decision-specific fluency in the people closest to the choices that matter most, rather than spreading broad training across the whole organization. A supply chain team making weekly replenishment decisions needs to understand the difference between a forecast and a plan, and why treating those two things as synonymous is a quiet way to accumulate risk. That&#8217;s the level of fluency that changes behavior.</p>



<p>One of the most effective accelerators I&#8217;ve seen is embedding a data practitioner, whether that&#8217;s an analyst, an engineer, or a dbusiness analyst, directly into a business unit. When someone with real data fluency is present in the daily conversation, literacy transfers through proximity and practice. It&#8217;s a fundamentally different mechanism than coursework, and it works faster than anything else.</p>



<h2 class="wp-block-heading" id="h-measuring-what-matters">Measuring What Matters</h2>



<p>The correct goal is to measure how many decisions that used to be made on instinct are now being made on evidence. Like most things that are strategic, that&#8217;s a harder goal to reach than tracking completions on a training module, but it&#8217;s the measurement that connects data literacy to business performance rather than to HR reporting.</p>



<p>Some leading indicators are more tractable. You can track how often data products are actually opened before decisions get made, not after. You can observe whether leadership teams start requesting clarifying data rather than accepting the first number presented. You can listen for whether the vocabulary in business reviews shifts toward probabilistic language, words like &#8220;likely&#8221; and &#8220;indicates&#8221; and &#8220;given the assumptions,&#8221; rather than the false certainty that tends to dominate when nobody feels empowered to push back on a number.</p>



<p>These are cultural signals, and they accumulate slowly. But they&#8217;re the real evidence that an organization is actually becoming data-driven, rather than simply claiming to be.</p>



<h2 class="wp-block-heading" id="h-cfo-alignment">CFO Alignment</h2>



<p>When your CFO signed off on the data platform budget, they were approving a bet that better information would produce better outcomes. Every dollar you&#8217;ve spent on tooling, talent, and cloud compute is in service of that bet. Data literacy is the part that makes it pay off.</p>



<p>When the people closest to your most important decisions can read data critically, question its assumptions, and use it to challenge their own intuitions, the entire data function starts compounding. Dashboards actually get used. Models get trusted because people understand their boundaries. Governance gets adopted because people can see the value of reliable data, rather than experiencing it as a compliance burden handed down from somewhere above them.</p>



<p>The organizations that win with data are the ones where the most people, at the most levels, know how to think with data, and are expected to. That&#8217;s a leadership decision before it&#8217;s a technology one, and it belongs squarely in the CDO&#8217;s lane.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Not sure where Data Literacy stands in your organization? <a href="https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstraightpathsql.com%2Fdata-estate-audit%2F&amp;data=05%7C02%7Cmike%40straightpathsql.com%7C301467e8da304a09e0b508de793bc9ac%7C037f3b9a86b84db88cc97669513e7e74%7C0%7C0%7C639081494853800992%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;sdata=sBTxczuNVXWqBzwoCUM%2F4qTWKUf7h2SMTQxMt2XBY%2Bs%3D&amp;reserved=0">Straight Path&#8217;s Data Estate Audit</a> is a fixed-scope, four-week engagement led by Chief Data Officer Buck Woody that inventories your data and AI landscape, scores your maturity across key dimensions, and delivers a prioritized roadmap tied directly to your business goals, and delivers a ready-made, across-the-company Data Literacy course. The result is an executive-ready deliverable you can take to your board with confidence.</em></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/">Data Literacy is a Strategic Opportunity</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Before You Hire a Head of AI</title>
		<link>http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/</link>
					<comments>http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/#respond</comments>
		
		<dc:creator><![CDATA[Mike Walsh]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 15:49:53 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Data Estate Audit]]></category>
		<category><![CDATA[Data Strategy]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31048</guid>

					<description><![CDATA[<p>I&#8217;ve told this story before, but it keeps applying to new things, so here we go again. A few years ago, we built a duplex. In-laws moving into the downstairs units, my office going upstairs. About a month out from moving in, I called the cable company to get service set up. Figured a couple ... <a title="Before You Hire a Head of AI" class="read-more" href="http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/" aria-label="Read more about Before You Hire a Head of AI">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/">Before You Hire a Head of AI</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>I&#8217;ve told this story before, but it keeps applying to new things, so here we go again.</em></p>



<p>A few years ago, we built a duplex. In-laws moving into the downstairs units, my office going upstairs. About a month out from moving in, I called the cable company to get service set up. Figured a couple of weeks, no big deal.</p>



<p><strong>That&#8217;s when I learned about the pole permit.</strong>..</p>



<p>Turns out, the cable was already on the shorter telephone pole. It just needed to be attached to the new taller one right next to it. Simple, right? Nope&#8230; Minimum 90 days to get approval from the power company. For a cable that needed to move about 2 feet, two companies that already worked together&#8230; Who&#8217;da thunk.</p>



<p><em>I didn&#8217;t know what I didn&#8217;t know. And I found out way too late.</em></p>



<p><em><strong>I&#8217;m watching companies make the same kind of mistake with AI right now, except the price tag is a lot bigger than a cable bill.</strong></em></p>



<h2 class="wp-block-heading" id="h-the-250k-discovery-project-disguised-as-a-new-hire">The $250K Discovery Project Disguised as a New Hire</h2>



<p><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><em>Everyone is rushing to hire a Head of AI, called by different titles; it makes sense and can be a good hire for many</em>.</span> I&#8217;m seeing these postings everywhere. $200K-$300K salary, VP or C-level title, and a job description that reads like someone fed ChatGPT the phrase &#8220;we need AI&#8221; and asked it to write a wish list. SQL Server, Fabric Databricks, PySpark, SQL, PostgreSQL, ETL pipelines, Delta Lake, Spark optimization, Data Engineering &#8211; all in one person. That&#8217;s not a job description. That&#8217;s a unicorn wishlist, and it signals something important:<em> the company doesn&#8217;t actually know what they need yet.</em></p>



<p>They&#8217;re listing every data and AI buzzword they&#8217;ve heard, maybe even all the data sources and sinks they use and know about, and hoping someone shows up who can figure it out for them.</p>



<p>Here&#8217;s the thing. Gartner predicted that through 2026, <a href="https://www.gartner.com/en/newsroom/press-releases/2025-02-26-lack-of-ai-ready-data-puts-ai-projects-at-risk">60% of AI projects will be abandoned</a> <strong>because the data isn&#8217;t AI-ready</strong>. Not because the models are bad. Not because the team isn&#8217;t talented. Because nobody did the homework on what data they actually have, where it lives, whether it&#8217;s governed, and whether any of it is connected to anything else.</p>



<p>Your shiny new Head of AI isn&#8217;t going to walk in and start building machine learning pipelines on day one. They&#8217;re going to spend their first six months asking &#8220;where does this data actually live?&#8221; and &#8220;who owns this?&#8221; and &#8220;why is this table called sales_rollup_final_v2_REAL_final?&#8221;</p>



<p>Six months of a $250K salary is $125K. Spent mapping your data landscape. Before a single AI solution gets built.</p>



<h2 class="wp-block-heading">Before You Hire Your Head of AI, Consider This</h2>



<p>Before you write that job description, try answering a few questions first:</p>



<ul class="wp-block-list">
<li><strong>What data do you actually have?</strong> Not what you think you have. What&#8217;s <strong><em>really</em></strong> there. What&#8217;s in the warehouse, what&#8217;s in the ERP, what&#8217;s in Julie&#8217;s &#8220;CFO actual data&#8221; spreadsheet on the shared drive?</li>



<li><strong>Where does it live?</strong> On-prem? Cloud? Hybrid? Bob&#8217;s laptop?</li>



<li><strong>What&#8217;s connected and what&#8217;s siloed?</strong> Can your systems actually talk to each other, or are you moving data between them on thumb drives and email attachments? Don&#8217;t laugh. I&#8217;ve seen it at companies with nine-figure revenue.</li>



<li><strong>What&#8217;s governed and what&#8217;s a mess?</strong> Do you have data ownership? Retention policies? Access controls? Or is it the wild west? What will the [insert regulatory or audit framework people of choice here &#8211; NCUA examiner, State examiner, SOC2 auditor, HIPAA auditor, etc.] say when they realize that we don&#8217;t even know who owns these key data sources?</li>



<li><strong>What&#8217;s your actual business problem?</strong> &#8220;<strong><em>We need AI</em></strong>&#8221; is not a business problem; it&#8217;s sort of a panicked plea to not miss out. &#8220;We&#8217;re losing 15% of customers in the first 90 days and we don&#8217;t know why&#8221; is a business problem. &#8220;The monthly financial snapshot we deliver to the board each month isn&#8217;t trusted by anyone because the data in it keeps changing.&#8221;</li>
</ul>



<h2 class="wp-block-heading">What Changes When You Do the Homework First</h2>



<p><em>When you can answer those questions, three things change.</em></p>



<p>Your job description gets specific and realistic instead of being a buzzword buffet. Maybe you need a data engineer before you need a data scientist. Maybe you need a data governance framework before you need either one.</p>



<p>Your hiring priorities shift. You stop looking for a unicorn who can do everything and start looking for the right person for the actual problem you have.</p>



<p>And your odds of success go way up. Because your new hire walks into clarity instead of chaos, and they can start building on day one instead of spending six months figuring out what century your data infrastructure is in.</p>



<p>Our <a href="https://straightpathsql.com/archives/author/buckwoody/">CDO, Buck Woody</a>, does exactly this kind of work. He calls them <a href="https://straightpathsql.com/data-estate-audit/" type="page" id="30629" target="_blank" rel="noreferrer noopener">Data Estate Audits</a>, and they&#8217;re designed to give companies a clear picture of what they actually have before they start writing big checks for AI strategy. It&#8217;s the kind of thing that turns a six-figure guessing game into an informed decision.</p>



<p><strong><em>Whether you work with someone like Buck or figure it out internally, just do the work first</em></strong>. <em>Map what you have. Name what&#8217;s broken. Understand the connections and the gaps. Then hire.</em></p>



<p>The companies that will win with AI aren&#8217;t the ones that hired a Head of AI the fastest. They&#8217;re the ones who gave that person something real to work with when they showed up.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/">Before You Hire a Head of AI</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022</title>
		<link>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/</link>
					<comments>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/#respond</comments>
		
		<dc:creator><![CDATA[Sandra Delany]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 11:49:38 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<category><![CDATA[Data-Driven Subscriptions]]></category>
		<category><![CDATA[SQL Server 2022]]></category>
		<category><![CDATA[SQL Server Edition Comparison]]></category>
		<category><![CDATA[sql server migration]]></category>
		<category><![CDATA[SSRS]]></category>
		<category><![CDATA[SSRS Migration]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31037</guid>

					<description><![CDATA[<p>You migrate SSRS from SQL Server 2016 to SQL Server 2022. The reports are there. The data sources look right. The encryption key is loaded. Everything checks out until you open the web portal, and your data-driven subscriptions are gone. You can see them in the ReportServer.dbo.Subscriptions table, but the portal won&#8217;t show them. And ... <a title="SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022" class="read-more" href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/" aria-label="Read more about SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/">SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>You migrate SSRS from SQL Server 2016 to SQL Server 2022. The reports are there. The data sources look right. The encryption key is loaded. Everything checks out until you open the web portal, and your data-driven subscriptions are gone. You can see them in the ReportServer.dbo.Subscriptions table, but the portal won&#8217;t show them. And when you try to create a new one, the option doesn&#8217;t even exist. What happened to your subscriptions?</em></p>



<h2 class="wp-block-heading" id="h-the-investigation">The Investigation</h2>



<p>This client was migrating their SSRS environment from a SQL Server 2016 Enterprise Edition instance to a SQL Server 2022 Standard Edition instance, both running on AWS EC2. The new server was built from an AWS template rather than a manual install. The client said they had tested things, but hadn&#8217;t checked subscriptions in the portal or tried creating one.</p>



<p>When I opened the SSRS web portal on the new server, the subscriptions section was empty. No data-driven subscriptions at all.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="205" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-4.png" alt="" class="wp-image-31039" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-4.png 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-4-300x99.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p>On the original server, the subscriptions were all there and accounted for.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="625" height="217" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-5.png" alt="" class="wp-image-31040" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-5.png 625w, http://straightpathsql.com/wp-content/uploads/2026/03/image-5-300x104.png 300w" sizes="(max-width: 625px) 100vw, 625px" /></figure>



<p>When I tried to create a new subscription on the new server, the data-driven subscription option was completely missing from the menu.</p>



<p>I went through a long list of troubleshooting steps. Since I wasn&#8217;t the one who originally migrated the SSRS databases (ReportServer and ReportServerTempDB), I started by verifying that all the SSRS tabs matched between the two servers. I confirmed the encryption key was loaded and all settings were in place.</p>



<p>I checked permissions in the SSRS web portal. Under <strong>Manage folder > Security</strong>, I noticed the original server had BUILTIN\Administrators set to Content Manager. On the new server, the service account configured in the Subscription Settings tab wasn&#8217;t in the local Administrators group, and I didn&#8217;t want it there. I gave that service account Content Manager permission directly.</p>



<p>Under <strong>Site Settings</strong>, BUILTIN\Administrators had System Administrator permission on the old server, so I gave the service account System Administrator permissions on the new server as well. Restarted SSRS. Still no data-driven subscriptions.</p>



<p>I checked the SSRS logs and fixed some email errors along the way, but nothing pointed to why the data-driven subscriptions weren&#8217;t showing. Standard email subscriptions were visible, just not the data-driven ones. I compared the RSReportingServer.config on both servers. Nothing stood out.</p>



<p>Talk about pulling your hair out in frustration.</p>



<h2 class="wp-block-heading" id="h-the-fix">The Fix</h2>



<p>After all of that, I found the answer: <strong>SSRS Standard Edition does not support data-driven subscriptions.</strong> You need Enterprise Edition.</p>



<p>The original server was running SQL Server 2016 Enterprise. The new server, built from the AWS template, was SQL Server 2022 Standard. That edition difference is why the subscriptions disappeared from the portal and why the option to create new ones wasn&#8217;t there, even though the subscription data still existed in the underlying database tables.</p>



<p>The client needed to move to an Enterprise Edition instance. Once that was done and I also reconfigured the <strong>FileShareStorageLocation</strong> in RSReportingServer.config to use a separate drive (the Standard Edition instance had been filling up the C:\ drive with report output), the data-driven subscription option reappeared.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="129" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-6.png" alt="" class="wp-image-31041" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-6.png 360w, http://straightpathsql.com/wp-content/uploads/2026/03/image-6-300x108.png 300w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p>This was just the first of three issues I hit on this single SSRS migration. The full story, including subscription Agent jobs not being created and a permissions issue with xp_sqlagent_notify, is covered in my <a href="https://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/">full blog post on SSRS migration troubleshooting</a>.</p>



<h2 class="wp-block-heading" id="h-the-takeaway">The Takeaway</h2>



<ol class="wp-block-list">
<li><strong>Know your edition features before you migrate.</strong> Data-driven subscriptions are an <a href="https://learn.microsoft.com/en-us/sql/reporting-services/subscriptions/data-driven-subscriptions?view=sql-server-ver17">Enterprise Edition-only feature in SSRS</a>. If you&#8217;re changing editions as part of a migration or upgrade, check the <a href="https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16">SQL Server feature comparison by edition</a> before you start. The subscriptions data will survive in the database tables, but the portal won&#8217;t show them and you won&#8217;t be able to create new ones on Standard.</li>



<li><strong>Test subscriptions specifically.</strong> It&#8217;s easy to validate that reports render and data sources connect, and call the migration &#8220;tested.&#8221; But subscriptions, especially data-driven ones, need their own validation step. Create a test subscription. Verify it fires. Don&#8217;t skip this.</li>



<li><strong>Watch out for AWS templates and pre-built images.</strong> When you&#8217;re using a template to spin up a new EC2 instance, you don&#8217;t always get to choose every detail of the install. In this case, the template delivered Standard Edition when the client&#8217;s environment needed Enterprise. If you&#8217;re using templates for your SQL Server builds, verify the edition and patch level before you start migrating anything onto it.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Straight Path Solutions helps over 120 clients manage, migrate, and upgrade their SQL Server environments. SSRS migrations are <span style="box-sizing: border-box; margin: 0px; padding: 0px;">among the many tasks our team handles as part of our <a href="https://straightpathsql.com/sql-server-consultant/sql-server-dba-services/" target="_blank">DBA-as-a-Service</a></span> offering. If you&#8217;re planning an upgrade or migration, especially from older versions nearing the end of life (like SQL Server 2016 in 3 and a half months), our team has <a href="https://straightpathsql.com/sql-server-consultant/sql-server-upgrade/">a methodology and experience</a> to get it right the first time.</em></p>



<p></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/">SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide</title>
		<link>http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/</link>
					<comments>http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/#respond</comments>
		
		<dc:creator><![CDATA[Sandra Delany]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 17:51:08 +0000</pubDate>
				<category><![CDATA[SSRS]]></category>
		<category><![CDATA[Data-Driven Subscriptions]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[SQL Server 2022]]></category>
		<category><![CDATA[SSRS Migration]]></category>
		<category><![CDATA[Upgrade]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31022</guid>

					<description><![CDATA[<p>If you&#8217;ve migrated SSRS to a new server and your data-driven subscriptions have disappeared, or new subscriptions are failing with a generic timeout error, this post walks through three separate issues we hit on a single migration and how we resolved each one. Data-Driven Subscriptions Disappeared After SSRS Migration to SQL 2022 Standard After migrating ... <a title="SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide" class="read-more" href="http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/" aria-label="Read more about SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/">SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>If you&#8217;ve migrated SSRS to a new server and your data-driven subscriptions have disappeared, or new subscriptions are failing with a generic timeout error, this post walks through three separate issues we hit on a single migration and how we resolved each one.</em></p>



<h2 class="wp-block-heading" id="h-data-driven-subscriptions-disappeared-after-ssrs-migration-to-sql-2022-standard">Data-Driven Subscriptions Disappeared After SSRS Migration to SQL 2022 Standard</h2>



<p>After migrating SSRS from SQL 2016 Enterprise Edition to SSRS SQL 2022 Standard Edition Data-driven subscriptions disappeared from within the SSRS web portal. However, I could see the subscriptions in the <strong>ReportServer.dbo.Subscriptions</strong> table.</p>



<p>SSRS was migrated from an EC2 instance where SQL and SSRS, etc. was installed by a DBA to an EC2 instance that was built using a template where all components were installed. When this was originally built out, we asked that they test. They said they did some testing, but they did not look at subscriptions in the portal nor did they create a subscription.</p>



<p>What the web portal looked like on the new SQL 2022 Standard Edition server:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="205" src="https://straightpathsql.com/wp-content/uploads/2026/03/image.jpg" alt="" class="wp-image-31023" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image.jpg 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-300x99.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p>What we were expecting:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="625" height="217" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-1.jpg" alt="" class="wp-image-31024" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-1.jpg 625w, http://straightpathsql.com/wp-content/uploads/2026/03/image-1-300x104.jpg 300w" sizes="(max-width: 625px) 100vw, 625px" /></figure>



<p>If you tried to create a new subscription on the new SSRS server, you do not get the Data-driven subscription option:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="519" height="456" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-2.jpg" alt="" class="wp-image-31025" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-2.jpg 519w, http://straightpathsql.com/wp-content/uploads/2026/03/image-2-300x264.jpg 300w" sizes="(max-width: 519px) 100vw, 519px" /></figure>



<p>The type of subscription that was missing:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="129" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-1.png" alt="" class="wp-image-31027" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-1.png 360w, http://straightpathsql.com/wp-content/uploads/2026/03/image-1-300x108.png 300w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p><strong>Troubleshooting steps that did not help:</strong></p>



<ul class="wp-block-list">
<li>Since I was not the one to do the migration of the SSRS DBs (reportserver and reportservertempdb), I verified that all tabs within SSRS looked the same on both servers, I also checked that the encryption key was loaded and all settings were set.</li>



<li>I looked at permissions within SSRS web portal.<ul><li><strong>Manage folder, Security</strong> &#8211; I noticed on the original SSRS server it had BUILTIN\Administrators permissions set to <strong>Content Manager</strong>. &nbsp;I checked who was in the local administrators’ group on both servers. On the new server, the service account that was set within Subscription Settings tab was not added to the new server local administrators’ group nor did I want it in there. I changed security settings on the new server to so that account had <strong>Content Manager</strong> permission since that service account did not have it set but the BUILTIN\Administrators group did.</li></ul>
<ul class="wp-block-list">
<li><strong>Site settings</strong> &#8211; BUILTIN\Administrators had System Administrator permission so again I set the service account that was set in Subscription Settings to have System Administrator permissions. Restarted SSRS and again no Data-Driven Subscriptions.</li>
</ul>
</li>



<li>I looked at SSRS logs and fixed some email errors, but nothing stood out on why they were not shown. We could see email subscriptions.</li>



<li>I compared the RSReportingServer.config on both servers to see if anything was off. Nothing that stood out besides what I changed.</li>
</ul>



<p>Talk about pulling your hair out in frustration!</p>



<p><strong>The fix for the missing Data-driven subscriptions:</strong></p>



<p>I found out Standard Edition for SSRS does NOT allow you to create data-drive subscriptions!!!! You must have Enterprise Edition!</p>



<p>Again, we used the AWS template to create a new EC2 instance. No, I do not like templates, but they wanted pay-as-you-go, so you must use a template. With this new version\server, I asked to get new drives added and I moved the databases to that new data and log drive as well as moved tempdb onto their own drive.</p>



<p>I set <strong>FileShareStorageLocation</strong> within the <strong>RSReportingServer.config</strong> file to use the D:\ drive instead of C:\ since reports that were running on the Standard Edition server were filling up the C:\ drive which in and of itself caused issues. This change allows reports to use a different drive for report runs. I also disabled any SQL services within <strong>SQL Server Configuration Manager</strong> that were not wanted\needed. With this change, I could now see Types of subscriptions.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="129" src="https://straightpathsql.com/wp-content/uploads/2026/03/image.png" alt="" class="wp-image-31026" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image.png 360w, http://straightpathsql.com/wp-content/uploads/2026/03/image-300x108.png 300w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p>You would have thought my issues were done… NO they were not.</p>



<h2 class="wp-block-heading" id="h-subscription-agent-jobs-not-created-after-upgrading-to-enterprise-edition">Subscription Agent Jobs Not Created After Upgrading to Enterprise Edition</h2>



<p>Once the original problem was “fixed”, I noticed a new issue.&nbsp; On the new Enterprise Edition server, I noticed that the subscription jobs were NOT automatically created. We do not copy those over, on a new SSRS server restarting SSRS “should” create those new subscription jobs if they do not already exist. &nbsp;We want SSRS to create them, so I know all is well when a new subscription is created then a corresponding Agent job gets created via SSRS. They have over a thousand subscriptions; I would NOT easily notice if the test subscription was created and I did not want to spend the time determining which test subscription was tied to which Agent job.</p>



<p><strong>Not the fix but told me a lot:</strong></p>



<ul class="wp-block-list">
<li>I changed the account that started SSRS from using a Virtual Service Account that did not have sysadmin rights to my domain account (yes, I have sysadmin rights within SQL). Restarted SSRS within <strong>Report Server Configuration Manager</strong> and lo and behold the subscription jobs were created. I deleted all 1000+ of them and changed the account back to Virtual Service Account. I wanted to use a Domain account, but the client insisted on using the Virtual Service Account since that is what was set on the server we migrated from.</li>



<li>Why I did the above change… I was troubleshooting an SSRS issue for a different client and an SSRS job would not run without changing the owner to SA and no changes were made to SQL or SSRS. Since this client server was an AG, failovers would change that owner back to the account starting SSRS since I have a mechanism where SSRS jobs get deleted from primary and the restart of SSRS adds that job back to the new primary server which brought me back to square one. I ended up changing the account that started SSRS to my domain account then back to a new domain account that did not have special privileges. The original domain account had DOMAIN ADMIN rights! Yes, you heard that right. I was mortified. I did not build these servers out. I had the client create a new domain account with no special privileges. I added that account to the primary server with no special privileges and removed the old SSRS account. I let SSRS set the permissions for that account which is done when you change accounts within <strong>Report Server Configuration Manager</strong>. I restarted SSRS and ran the job with the owner not changed and it ran. I used DBATools to copy that account to the secondary server. I even ran code to set all permissions for role <strong>RSExecRole</strong> just for giggles. Failed over and ran the newly created subscription job and again it worked. Sometimes thinking out of the box works but sometimes it doesn’t.</li>
</ul>



<p><strong>The fix:</strong></p>



<p>I checked the virtual service account permissions within SQL. I checked to see what was set within MSDB since I knew that is where permissions are set for accounts that we do NOT want to have sysadmin rights to create jobs. I noticed that role <strong>SQLAgentOperatorRole</strong> was not set. I set that permission and restarted SSRS. Reporting Server subscription jobs were now created!</p>



<p>We do NOT want to change the owner of those jobs to something else, especially if we do not give sysadmin rights to that account. Again, why would you give that access? Everyone and their mother <strong>should NOT </strong>have sysadmin rights.</p>



<p>When you migrate to a new server, lock things down and have them test before the final migration. The account that starts SSRS must be the owner of those jobs so that the service account can delete that Agent job if that subscription is removed from within the portal.</p>



<p>At this point, I released the server back to the client, thinking I was done. BUT no…</p>



<h2 class="wp-block-heading" id="h-new-subscriptions-failing-with-timeout-and-an-error-has-occurred">New Subscriptions Failing with Timeout and &#8216;An Error Has Occurred&#8217;</h2>



<p>After releasing the server, the person who creates reports and supports SSRS tried creating a new data-driven subscription. He reported back that the subscription creation would time out, and the “An error has occurred.” message appeared. What a not-so-helpful error! I tried creating a basic email subscription, and I too got the same error.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="595" height="327" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-2.png" alt="" class="wp-image-31028" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-2.png 595w, http://straightpathsql.com/wp-content/uploads/2026/03/image-2-300x165.png 300w" sizes="(max-width: 595px) 100vw, 595px" /></figure>



<p><strong>Troubleshooting steps that did not help:</strong></p>



<ul class="wp-block-list">
<li>This template had an outdated patch level of SSRS installed. For SSRS starting with SQL 2017, you must patch differently. It is no longer included in SQL patching. To find out what build of SSRS that is running open <strong>Report Server Configuration Manager</strong>. Login and the first window <strong>Report Server Status</strong> page will tell you the Product Version. Go to this website to find out what the latest build is &#8211; <a href="https://sqlserverbuilds.blogspot.com/2020/09/sql-server-reporting-services-ssrs.html">https://sqlserverbuilds.blogspot.com/2020/09/sql-server-reporting-services-ssrs.html</a>. Find the version of SSRS you have and want to patch. Look for the green Download <img decoding="async" width="75" height="23" src="blob:https://straightpathsql.com/187aafbd-66bd-4d62-adbf-9e4090231d2a"> button and click it. That button will redirect you so you can download the latest build of SSRS. I patched SSRS and tried creating a new email subscription. Same timeout issue.
<ul class="wp-block-list">
<li>Patching did not help my issue, but it needed to be done.</li>
</ul>
</li>



<li>Again, I looked at everything – SQL logs, SSRS logs, configuration files, etc.</li>
</ul>



<p>At this point, I am so frustrated and want to quit, but that is not who I am. Sometimes you have to throw in the towel and bring someone else in for a fresh set of eyes. I contacted a coworker and went over everything with him again.</p>



<p><strong>The fix:</strong></p>



<ul class="wp-block-list">
<li><strong><em>About those fresh set of eyes</em></strong>…. Apparently, that is the key to finding something you looked at over and over again. After looking at different things on our own again, then coming together on a screen share, he found the issue. But prior to that, we commented out the Oracle and Teradata data sources in the configuration file to help “clean up” errors in the SSRS log. You must restart SSRS to verify they no longer appear. He found a permission issue in the SSRS log that I missed. Maybe because I was searching for the word ERROR, and with so much information in the SSRS log, finding something like that can be easily overlooked. At least that is what I am telling myself to make me feel better in this whole debacle. It was an EXECUTE permission denied on the object ‘xp_sqlagent_notify’. This issue should NOT have existed since permissions should have been set when the role RSExecRole was created via SSRS when I pointed SSRS to use that restored database. Those roles existed in both master and msdb. There are blogs out there that provide the code to grant EXECUTE permissions in master and msdb. He ran it, and I recreated a subscription, and hallelujah, it created the subscription. I verified both the subscription and the job. I deleted the subscription in the portal and again verified the job deleted.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="108" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-3.png" alt="" class="wp-image-31031" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-3.png 975w, http://straightpathsql.com/wp-content/uploads/2026/03/image-3-300x33.png 300w, http://straightpathsql.com/wp-content/uploads/2026/03/image-3-768x85.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<ul class="wp-block-list">
<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;">I asked my coworker who restored the original DBs on the Standard Edition server <span style="box-sizing: border-box; margin: 0px; padding: 0px;">whether he created the DBs first using <strong>Report Server Configuration Manager,</strong> then followed our migration process, or </span>restored them and then set things up in <strong>Report Server Configuration Manager</strong>.</span> He mentioned the databases were already created and set up, then he just followed our normal process and restored, etc. The only thing I did differently was I restored the two DBs first then used <strong>Report Server Configuration Manager</strong> to point to an existing SSRS database. I have done this before and did not have these issues, so I’m not sure why it happened here.</li>
</ul>



<p><strong>This time, when I released the server back to the client, everything worked as we expected. They officially migrated to this new server and dropped the other server from the AWS portal. </strong></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/">SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Best Practices: A Practitioner&#8217;s Guide</title>
		<link>http://straightpathsql.com/archives/2026/03/sql-server-best-practices/</link>
					<comments>http://straightpathsql.com/archives/2026/03/sql-server-best-practices/#respond</comments>
		
		<dc:creator><![CDATA[Mike Walsh]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 04:20:08 +0000</pubDate>
				<category><![CDATA[SQL Server Best Practices Guide]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=30966</guid>

					<description><![CDATA[<p>Changelog: March 2026 &#8211; Initial publication This is a living document. Next up: SQL Server Best Practices are not Universal Aside from maybe autoshrink, not all SQL Server &#8220;best practices&#8221; are always applicable to all. But some are. And we find them misconfigured on almost every new server we touch. After 15 years of managing ... <a title="SQL Server Best Practices: A Practitioner&#8217;s Guide" class="read-more" href="http://straightpathsql.com/archives/2026/03/sql-server-best-practices/" aria-label="Read more about SQL Server Best Practices: A Practitioner&#8217;s Guide">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-best-practices/">SQL Server Best Practices: A Practitioner&#8217;s Guide</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Changelog:</strong> <strong>March 2026 &#8211; Initial publication</strong></p>



<p><em>This is a living document. Next up:</em></p>



<ul class="wp-block-list">
<li>Security Best Practices</li>



<li>Performance Best Practices</li>
</ul>



<h2 class="wp-block-heading" id="h-sql-server-best-practices-are-not-universal">SQL Server Best Practices are not Universal</h2>



<p><em>Aside from maybe autoshrink, not all SQL Server &#8220;best practices&#8221; are always applicable to all. But some are. And we find them misconfigured on almost every new server we touch. After 15 years of managing SQL Server environments and running SQL Server health checks for hundreds of companies, the pattern is always the same: memory wide open, backups unverified, tempdb still on one file, everyone is SA (and all of the other server roles), and someone almost always saying, &#8220;<strong>it&#8217;s been running fine&#8230;</strong>&#8221; It usually has been. Until it stops. We&#8217;d honestly rather you find and fix this stuff yourself than ever need to hire us for the basics, so we built free tools to help you check, and we wrote this guide to explain what matters and why.</em></p>



<h2 class="wp-block-heading" id="h-check-your-sql-server-best-practices-for-free">Check Your SQL Server Best Practices <em>For Free</em></h2>



<p>We don&#8217;t just write and help clients implement best practices; we build and maintain open-source community tools to help <strong>you</strong> check your own best practices in your SQL Servers. You can get any of these tools for free at the GitHub link referenced in each post. No e-mail needed, no phone home, no charge. Just check out the posts, use the tool, and follow the links for the findings in each, and you&#8217;ll be ahead of the game.</p>



<p><strong><a href="http://aightpathsql.com/tool/sp_checksecurity/" target="_blank" rel="noreferrer noopener">sp_checkSecurity</a></strong> &#8211; Scans your instances for security vulnerabilities: elevated permissions, weak SA configurations, missing security patches, linked server exposures, and 40+ other checks. </p>



<p><strong><a href="https://straightpathsql.com/tool/sp_checkbackup/" target="_blank" rel="noreferrer noopener">sp_checkBackup</a></strong> — Reviews your backup history for recoverability issues: broken backup chains, missing backups, RPO violations, and backups without checksum verification. </p>



<p><strong><a href="https://straightpathsql.com/tool/sp_checktempdb/" target="_blank" rel="noreferrer noopener">sp_checkTempdb</a></strong> — Examines tempdb configuration and current usage: misconfigured files, uneven growth rates, contention detection, storage latency. </p>



<p><strong><a href="https://straightpathsql.com/archives/2026/01/introducing-sp_checkag-check-your-sql-server-availability-groups-for-availability-issues/" target="_blank" rel="noreferrer noopener">sp_checkAG</a></strong> — Analyzes your Availability Groups for availability issues: expiring certificates, timeout misconfigurations, high latency, and replica health. </p>



<p><strong>Coming later this year:</strong></p>



<ul class="wp-block-list">
<li><strong>sp_checkActivity</strong> &#8211; A lightweight way to see what is happening on your SQL Server with fewer parameters to remember and a lot fewer resources needed to run when you really need to see what is going on on your server for blocking, activity, and quickly find the pain points. We still love and use the other tools we link to below, but when time counts &#8211; we use this internally today I can&#8217;t wait for it to be available for all.</li>



<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><strong>sp_checkHealth</strong>&nbsp;&#8211; This will encompass some of the checks above that are released, but a lot more that aren&#8217;t there &#8211; all of the things we care about when we check the health of an instance, but without going in-depth into things that we already have other tools to dive into</span> or don&#8217;t matter for core health reviews. A health check in a single script.</li>
</ul>



<p>We also love and use many of the <a href="https://straightpathsql.com/archives/2023/02/10-free-sql-server-resources-we-love/">free SQL Server community tools</a>, and this post from a few years ago is still full of great ones to check out.</p>



<h2 class="wp-block-heading" id="h-sql-server-dba-best-practices-we-wish-you-already-knew">SQL Server DBA Best Practices We Wish You Already Knew</h2>



<ul class="wp-block-list">
<li><strong>Verify Your Backups Are Actually Restorable.</strong> Having backups is not the same as having <em>recoverable</em> backups. Broken backup chains, split paths, missing log backups — we find these constantly.<a href="https://straightpathsql.com/archives/2009/01/do-you-focus-too-much-on-your-backups/" type="post" id="19"> Test your restores.</a> </li>



<li><strong>Take Care of your SQL Server Maintenance</strong>. <em>Now, look, a lot of folks will scoff at the idea of using a maintenance plan &#8211; I get that there are truly better ways to handle it &#8211; but I would LOVE to see more folks coming to us using well-set-up maintenance plans than coming to us with key missing maintenance</em>. We love the Ola Hallengren scripts for this and have blogged extensively about best practices for them. But this <a href="https://straightpathsql.com/archives/2023/01/ola-maintenance-from-a-jr-dba/">guide for setting it up from a Jr. DBA&#8217;s perspective is a great start.</a></li>



<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><strong>Speaking Of Maintenance &#8211; REALLY MAKE SURE YOUR BACKUPS ARE GOOD</strong>. <a href="https://straightpathsql.com/archives/2024/08/introducing-sp_checkbackup-check-your-sql-server-backups-for-recoverability-issues/" type="post" id="29505">Start with our post on sp_checkbackup</a>, read the above-linked,</span> really old post about the importance of restores, and be a paranoid DBA and make sure your backups are good. All else is secondary. And read this post from Jeff and avoid these<a href="https://straightpathsql.com/archives/2022/12/6-common-mistakes-made-with-sql-server-backups/"> common backup mistakes.</a></li>



<li><strong>Check your Database&#8217;s Integrity (Look for corruption). </strong>This is also maintenance, but, like backups, it&#8217;s worth a separate callout. I hate the call from a client who has corruption but never read my long post about <a href="https://straightpathsql.com/archives/2022/02/dbcc-checkdb-look-for-sql-server-corruption/">Corruption Resistant Backup Strategies and never has done a CheckDB.</a></li>



<li><strong>Set Max Memory — It&#8217;s Not Optional.</strong> T<a href="https://straightpathsql.com/archives/2017/02/sql-server-max-memory-best-practices/">he default lets SQL Server consume nearly all available RAM</a>. Leave 10-20% for the OS. This is still a top finding in our health checks.</li>



<li><strong>Configure TempDB Properly</strong>. Multiple equally-sized data files, fixed growth rates of at least 64MB, and separate storage from your user databases. <span style="box-sizing: border-box; margin: 0px; padding: 0px;">It has gotten better with the newer versions of SQL Server, but we see this wrong so often that we built an<a href="https://straightpathsql.com/tool/sp_checktempdb/" target="_blank">&nbsp;entire tool for it</a>.</span></li>



<li><strong><a href="https://learn.microsoft.com/en-us/sql/relational-databases/databases/database-instant-file-initialization?view=sql-server-ver17">Enable Instant File Initialization</a>.</strong> Without it, every data file growth event zero-fills the new space, stalling your workload. It&#8217;s a simple OS-level permission change that eliminates unnecessary waits on data file growth. (Log files don&#8217;t have this feature &#8211; so right-size your log files from the start.)</li>



<li><strong>Don&#8217;t Ignore Security — Lock Down SA and Review Permissions</strong>. SA should be disabled or renamed. Logins should use AD groups, not individual accounts. Elevated permissions should be intentional, not leftover from an install 8 years ago. <a href="https://straightpathsql.com/tool/sp_checksecurity/">Use sp_checkSecurity to get a head start here.</a></li>



<li><strong><a href="https://straightpathsql.com/archives/2016/12/power-saving-settings-killing-sql-server-performance-quick-tip/" target="_blank" rel="noreferrer noopener">Stop Using Balanced Power Mode Already!</a></strong> This is robbing you of performance and has been talked about quite a lot.</li>
</ul>



<h2 class="wp-block-heading" id="h-best-practices-for-virtualizing-sql-servers">Best Practices for Virtualizing SQL Servers</h2>



<p>Most SQL Servers that aren&#8217;t in the cloud are running in a VM of some sort these days. It used to be predominantly VMware, but thanks to Broadcom and their licensing play, we&#8217;re seeing a little more Hyper-V out there. We wrote a best practice guide for each of these so you can take some guesswork out of the setup.</p>



<p><strong>Note on other virtualization platforms</strong>: I&#8217;ll just say it outright: I&#8217;ve not seen a really well-performing hyperconverged SQL Server environment yet, so your performance mileage will vary if you get bought into another vendor&#8217;s sales tricks and go all hyperconverged. We&#8217;ve made a lot of money because of hyperconverged architecture.  </p>



<p><strong>And we&#8217;re starting to see more folks consider open-source</strong> platforms, like Proxmox.&nbsp;The jury is still out on those in my mind for a few reasons:</p>



<ol class="wp-block-list">
<li>Some grey area <em>may</em> exist for official supportability and even licensing, according to some conversations I&#8217;ve seen on LinkedIn.</li>



<li>When and if an issue arises &#8211; and you are on one of these untested platforms &#8211; you are now betting your entire environment on something Microsoft support will likely give you best effort support for at best, or maybe even say &#8220;once you recreate that on physical hardware or a supported virtualization platform, we&#8217;ll help you out.&#8221;</li>
</ol>



<p><strong>So why bet your farm on an unsupported VM platform for a licensed database server?Just go with Hyper-V or head to the cloud if you want to get off the other provider.</strong></p>



<ul class="wp-block-list">
<li><strong><a href="https://straightpathsql.com/archives/2025/10/hyper-v-and-sql-server-best-practices-what-we-wish-you-knew/">Hyper-V and SQL Server Best Practices</a></strong> &#8211; These are the things we see most folks tripping up on with their SQL Servers on Hyper-V. Check out our best practices and start right. </li>



<li><strong><a href="https://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/">VMware and SQL Server Best Practices</a></strong> &#8211; Virtualization isn&#8217;t the problem; it&#8217;s not following the best practices from the start.</li>
</ul>



<h2 class="wp-block-heading" id="h-sql-server-upgrade-amp-migration-best-practices">SQL Server Upgrade &amp; Migration Best Practices</h2>



<p>Most folks who stay at one DBA job for a while don&#8217;t get to do a ton of these in their careers, especially given how slow most companies seem to be to upgrade these days. The first best practice here, frankly, is to <strong>get upgrading. </strong>(We will have a lot of content coming up in April about Upgrading SQL Server, since the SQL Server 2016 end of life is fast approaching in July of this year.)</p>



<ul class="wp-block-list">
<li>If you&#8217;re still on SQL Server 2012, 2014, 2016, and even 2017, it&#8217;s time. But an upgrade done wrong is worse than staying put.</li>



<li>Our strong opinion: <a href="https://straightpathsql.com/archives/2020/04/sql-server-in-place-upgrades-too-expensive/" type="post" id="28205">migration-based upgrades over in-place upgrades</a>. <strong>Always.</strong></li>



<li>Use CNAMEs/aliases so your next migration is easier than this one.</li>



<li>Plan to fail &#8211; have a rollback plan before you start.</li>
</ul>



<p>While we refresh our upgrade content, this post about <a href="link">migration considerations from a junior DBA&#8217;s perspective</a> is a great place to start</p>



<p>This<a href="https://straightpathsql.com/sql-server-consultant/sql-server-upgrade/"> older webinar series on SQL Server upgrades</a> is still very much applicable, and I covered the phases from considering to planning to executing, with links and info here for you to plan and execute your own upgrades. </p>



<h2 class="wp-block-heading" id="h-learn-with-our-case-of-the-week">Learn With Our Case of the Week</h2>



<p><span style="box-sizing: border-box; margin: 0px; padding: 0px;">Each Friday, we try to post a&nbsp;<a href="https://straightpathsql.com/archives/category/case-of-the-week/" target="_blank">SQL Server case of the week</a>&nbsp;&#8211; something we helped a client figure out.</span> These posts can give you some good overviews of how to troubleshoot and some ideas of how to use these best practices, tips, and tools in your own environment. And maybe help you avoid a similar issue.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong><em>If you came here looking for a specific SQL Server best practice, leave a note in the comments. We’ll work it into future updates to this hub and build practical checklists around it</em></strong>.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-best-practices/">SQL Server Best Practices: A Practitioner&#8217;s Guide</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/sql-server-best-practices/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VMware SQL Server Best Practices</title>
		<link>http://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/</link>
					<comments>http://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/#respond</comments>
		
		<dc:creator><![CDATA[Mike Walsh]]></dc:creator>
		<pubDate>Mon, 16 Mar 2026 14:41:26 +0000</pubDate>
				<category><![CDATA[VMware]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=30935</guid>

					<description><![CDATA[<p>Broadcom just published updated technical guidance for SQL Servers running on VMware, and it&#8217;s bundled with the VCF documentation, which includes vSphere. (You can get that 90-page PDF here.) VCF is the Broadcom bundled platform that includes vSphere, vSAN, and NSX. Below are some of the best practices we work with our clients&#8217; sysadmins to ... <a title="VMware SQL Server Best Practices" class="read-more" href="http://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/" aria-label="Read more about VMware SQL Server Best Practices">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/">VMware SQL Server Best Practices</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Broadcom just published updated technical guidance for SQL Servers running on VMware, and it&#8217;s bundled with the VCF documentation, which includes vSphere. (You can get that 90-page PDF here.) VCF is the Broadcom bundled platform that includes vSphere, vSAN, and NSX.<br><br>Below are some of the best practices we work with our clients&#8217; sysadmins to optimize SQL Server success.<br><br>Broadcom obviously isn&#8217;t just changing around their documentation, but their licensing, so if you&#8217;re evaluating alternatives to VMware, check out our companion post on H<a href="https://straightpathsql.com/archives/2025/10/hyper-v-and-sql-server-best-practices-what-we-wish-you-knew/" type="post" id="30305">yper-V and SQL Server Best Practices</a>. Hyper-V 100% can and does serve SQL Server workloads well. The jury is still out in my mind on Nutanix AHV if you really care about I/O performance based on the experiences we&#8217;ve seen, and we are working with a few clients experimenting with open-source virtualization platforms while we slowly hold our breath. But you are here for the SQL Server and VMware best practices so on with the show.</p>



<h2 class="wp-block-heading" id="h-vmware-and-sql-server-best-practices">VMware and SQL Server Best Practices</h2>



<p>I&#8217;ve lost track of the number of times I&#8217;ve seen violations of what we&#8217;re listing below. And at Straight Path, I don&#8217;t just mean we&#8217;ve seen the &#8220;findings&#8221; – but we&#8217;ve seen them, we&#8217;ve worked with our clients to fix them, and we&#8217;ve seen, sometimes significant, performance improvements. </p>



<h2 class="wp-block-heading" id="h-using-the-pvscsi-controllers-and-more-than-one">Using the PVSCSI Controllers (… and More than one.)</h2>



<p>Want to improve IO performance on your SQL Server VM and reduce CPU overhead?</p>



<p>If you are presenting your storage through data stores to VMDKs and you accepted a standard configuration, you probably have one SCSI controller for your VMs – the LSI SAS controller.</p>



<p>You will normally see both an improvement in IO performance AND a reduction in CPU hit by switching over to the PVSCSI controllers. We&#8217;re talking 10-15% improvement from this change alone in many cases.</p>



<p>If you&#8217;ve created separate VMDKs for OS/Data/Logs/TempDB/Binaries it would be a good idea to consider adding 2 PVSCSI adapters and splitting the Data/Logs/TempDB at least to them. If you are building a new VM &#8211; just use only PVSCSI and move the OS C:\ drive, your D:\ drive for the SQL server binaries, and the drive you put your system databases and miscellaneous to the first, and split the drives evenly among the other 3. You don&#8217;t need to have the LSI adapter at all.</p>



<p>This <a href="https://kb.vmware.com/s/article/1010398">VMware KB article</a> talks about how. It&#8217;s fairly easy. Requires a power down. If we are working with a client who already has the one LSI SAS adapter, we typically won&#8217;t have them change it but simply add 3 more and move the other files around.</p>



<p><strong>Why this matters:</strong> The PVSCSI controller has higher queue depths (256 vs 128 for LSI Logic SAS) and lower CPU overhead. For I/O intensive applications like SQL Server, this translates directly to better throughput and more CPU cycles available for your actual workload.</p>



<p><strong>Recommendation:</strong> For new builds, use all four PVSCSI controllers. For existing VMs, add 3 PVSCSI and move your workload drives. No need to mess with the OS drive if it&#8217;s already on LSI SAS.</p>



<h2 class="wp-block-heading" id="h-sockets-and-cores-on-vmware-for-sql-server-what-difference-does-the-ratio-make">Sockets and Cores on VMware for SQL Server: What difference does the ratio make?</h2>



<p>We see folks having issues with Socket counts and core counts. There is one very obvious issue – I&#8217;ve lost track of the number of VMs running SQL Server Standard (<a href="https://straightpathsql.com/archives/2020/12/sql-server-should-i-move-from-enterprise-to-standard/">which I prefer if you can do it!</a>) with 8 cores, but 1 core per socket – meaning you are using 8 sockets – 4 more than SQL Server Standard supports. We&#8217;ve helped many clients optimize performance simply by fixing this ratio. Almost like suddenly giving them access to the CPUs they thought they had all along&#8230;</p>



<p>There is a fairly comprehensive <a href="https://blogs.vmware.com/performance/2017/03/virtual-machine-vcpu-and-vnuma-rightsizing-rules-of-thumb.html">blog post at VMware</a>, which will go a bit deeper but a few thoughts:</p>



<ul class="wp-block-list">
<li>Don&#8217;t exceed the sockets of your host.</li>



<li>Keep the license limitations in mind. In general, more cores per socket is better – but look at the blog post from VMware for more.</li>



<li>Align your cores and sockets to the host&#8217;s physical NUMA topology.</li>



<li>Consider memory for NUMA boundaries – if you are using less than half of the RAM on a 2 socket box, CPU is the only concern; if you are exceeding that – then you might as well have your cores spread across 2 sockets even if you don&#8217;t strictly need them to align CPUs.</li>
</ul>



<p><strong>Pro tip:</strong> Use <code>sys.dm_os_sys_info</code> and <code>sys.dm_os_memory_nodes</code> inside SQL Server to verify your NUMA configuration is what you expect.</p>



<p><strong>Recommendation: </strong>Make sure you try and align to the socket:core ratio on your hosts and remember you don&#8217;t have 16 socket boxes.  You probably need one or two sockets.<strong> Less critical about NUMA because of improvements and changes &#8211; but you will be losing CPUs you licensed in Standard.. We see it all.the.time.</strong></p>



<h2 class="wp-block-heading" id="h-can-i-have-too-many-cores-on-my-sql-server-vm">Can I have too many cores on my SQL Server VM?</h2>



<p>Yes, you can. Co-Stop and Ready Time waits are the arch-enemies of SQL Server performance on a VM. You get this from too many guests on a host with too much CPU allocated. You also get it by allocating more cores than you need. Remember – you are in a virtual world now. You can start smaller and add. Try it! Keep the socket:core ratio from above in mind – but start lower and add. You&#8217;ll find it easier to do that than take away once you add. You&#8217;ll also find that by reducing the number of cores and running that VM a little &#8220;hotter&#8221; than maybe you would otherwise, you ask the ESXi host for fewer cores to be ready – which means less waiting on these waits.</p>



<p>You should have a solid VMware monitoring tool. We know a thing or two about VMs here, and we can help clients out – but we aren&#8217;t VMware admins – for us, the monitoring capabilities built into SolarWinds SQL Sentry (formerly SentryOne) are PERFECT. We can see noisy neighbors. We can see which hosts are busy. We can see which VMs on a host are consuming most of the CPU/IO/Memory. And we can see when ready time and co-stop waits occur.</p>



<p><strong>Recommendation: </strong>Monitor for Co-Stop and Ready time waits. Don&#8217;t add &#8220;all the cores&#8221; because you think you want it and you paid for virtual unlimited licensing. Stick to what you need.</p>



<p><strong>PS &#8211; If you are one of those folks who actually does CPU hot-add &#8211; it&#8217;s no longer supported in SQL Server 2025 by Microsoft &#8211; but we didn&#8217;t want you doing it well before that change anyway, so knock it off.</strong></p>



<h2 class="wp-block-heading" id="h-noisy-neighbors-and-the-wrath-they-bring-your-sql-servers">Noisy Neighbors – and the wrath they bring your SQL Servers</h2>



<p>Virtualization is a powerful tool. And it&#8217;s great. But we&#8217;ve often seen a SQL Server stacked onto a host with far too many VMs. And we&#8217;ve seen the DRS/vMotioning of VMs killing SQL Server performance. Know your neighbors. See what else is on the host. I&#8217;m not saying you need 1:1 ratios (though, sometimes you may!) but you shouldn&#8217;t have your mission-critical SQL Server as just one of the VMs on a crowded host. Look into the entire estate. Get a trial of SolarWinds SQL Sentry and use the VM monitoring capabilities – and see what your host looks like.</p>



<p><strong>Recommendation: </strong>Be a good neighbor &#8211; but really talk to your VM admin team &#8211; make sure you aren&#8217;t sitting on a VM that is moving from host to host all day and make sure your neighbors don&#8217;t sit there with the CPU volume blaring all day.</p>



<h2 class="wp-block-heading" id="h-high-performance-everywhere">High Performance (Everywhere….)</h2>



<p>You need to have your Windows OS running in HIGH PERFORMANCE, not balanced mode (I don&#8217;t understand why we still bump into that so much!) But not just that – you should have your BIOS set to that, and you should have your ESXi host set to High Performance. Again – we&#8217;ve seen 5-10% performance improvements from this change alone.</p>



<p><strong>Why this still matters:</strong> The default &#8220;Balanced&#8221; power plan can cause CPU throttling and P-state changes that introduce latency. For production SQL Server workloads, you want consistent, predictable performance – not power savings.</p>



<p><strong>Recommendation: </strong>Change to high performance mode &#8211; at the host &#8211; in the BIOS &#8211; on the guest. Everywhere. Stay there. SQL server doesn&#8217;t usually sustain high CPU &#8211; so it&#8217;s bursty and balanced is terrible with bursty&#8230;</p>



<h2 class="wp-block-heading" id="h-snapshots-handle-with-care">Snapshots: Handle With Care</h2>



<p>I need to expand on something I only briefly mentioned in the original post: <strong>snapshots are not backups and can seriously impact SQL Server performance.</strong></p>



<p>Here&#8217;s what we see all the time:</p>



<ul class="wp-block-list">
<li>Someone takes a snapshot &#8220;just in case&#8221; before a deployment</li>



<li>They forget about it</li>



<li>Days or weeks later, SQL Server performance has mysteriously degraded</li>



<li>The snapshot has grown to hundreds of GB and is causing I/O bottlenecks</li>
</ul>



<p><strong>Best practices for snapshots:</strong></p>



<ul class="wp-block-list">
<li>Keep them short-lived (hours, not days or weeks)</li>



<li>Never use them as a backup strategy</li>



<li>Monitor snapshot sizes – they grow quickly with SQL Server</li>



<li>Consider using SQL Server-native backup technologies instead</li>



<li>If you must use snapshots, plan to remove them as soon as possible</li>
</ul>



<p>The delta disks created by snapshots introduce additional I/O overhead that compounds over time as the snapshot grows. For write-heavy workloads like SQL Server, this can significantly degrade performance.</p>



<p>We have often chased our tails for &#8220;odd performance&#8221; situations that can&#8217;t be explained and finally a VM admin says &#8220;all that was happening was some snapshot maintenance&#8230;&#8221; OUCH.<br><br><strong>Recommendation: </strong>First off &#8211; don&#8217;t trust us for VMware snapshot advice &#8211; then make sure your VM team has a proper resource for that. Be suspicious of snapshots on performance &#8211; and take native backups in SQL if you can on a side note.</p>



<h2 class="wp-block-heading" id="h-modern-storage-considerations">Modern Storage Considerations</h2>



<p>Since our original VMware  post, NVMe storage has become much more common in virtualized environments. If you&#8217;re using NVMe-backed datastores:</p>



<ul class="wp-block-list">
<li>The performance difference between PVSCSI and NVMe controllers is minimal</li>



<li>PVSCSI remains the recommended choice for compatibility and maturity</li>



<li>Ensure your VMware version supports NVMe correctly (ESXi 6.5+)</li>



<li>Don&#8217;t assume NVMe solves all performance problems – configuration still matters</li>
</ul>



<h2 class="wp-block-heading" id="h-memory-management">Memory Management</h2>



<p>While the original post focused on CPU and storage, let&#8217;s be explicit about memory:</p>



<ul class="wp-block-list">
<li><strong>Avoid memory overcommitment</strong> for production SQL Server VMs</li>



<li>Use memory reservations to guarantee resources for critical SQL Server instances</li>



<li>Transparent Page Sharing (TPS) is disabled by default in modern ESXi versions, which is actually fine for SQL Server</li>



<li>Monitor memory ballooning – if you see it on SQL Server VMs, you&#8217;ve overcommitted</li>
</ul>



<p><strong>Recommendation: </strong>Overcommit a little on CPU and monitor and make sure you aren&#8217;t being killed as per above &#8211; but do not overcommit on the memory your SQL Server uses. It&#8217;s for SQL &#8211; nothing else &#8211; and if you want more guests using more RAM than the host will allow &#8211; put it somewhere else.</p>



<h2 class="wp-block-heading" id="h-network-considerations">Network Considerations</h2>



<p>For SQL Server VMs, especially those handling significant network traffic:</p>



<ul class="wp-block-list">
<li>Use <strong>VMXNET3</strong> network adapters (paravirtualized, better performance than E1000)</li>



<li>Enable Receive Side Scaling (RSS) for better network throughput</li>



<li>Consider Network I/O Control (NIOC) for QoS if you have multiple workloads competing for bandwidth</li>



<li>For Always On Availability Groups, ensure your network is properly configured for low latency</li>
</ul>



<h2 class="wp-block-heading" id="h-hardware-version-and-vmware-tools">Hardware Version and VMware Tools</h2>



<p>Keep these current! Seriously.</p>



<ul class="wp-block-list">
<li>Modern VMware Tools include performance improvements and bug fixes</li>



<li>Hardware version updates enable access to newer VM features</li>



<li>Aim for the latest hardware version</li>



<li>Test in non-production first, but don&#8217;t let your VMs languish on ancient hardware versions</li>
</ul>



<h2 class="wp-block-heading" id="h-some-closing-thoughts">Some closing thoughts….</h2>



<p>There are many more considerations. HA/DR with SQL Server technology vs. VMware HA. Advanced storage features. DRS rules and affinity settings. But just following the tips here – we&#8217;ve seen a 10-15% improvement from PVSCSI alone, 5-10% from Power Settings alone, 5-10% from right-sizing (lowering!) core counts or fixing Sockets:Cores – that&#8217;s a lot of performance optimization you can do right now without spending a dime on SQL Server consultants like us. (We&#8217;re happy to help. But we&#8217;re happy for you to handle these low hanging fruit items first yourself too!)</p>



<p>So. That&#8217;s what I wish you knew about VMware and SQL Server performance. VMware has some great materials too. I&#8217;ve linked some above. </p>



<h2 class="wp-block-heading" id="h-the-virtualization-decision-in-2026">The Virtualization Decision in 2026</h2>



<p>Look, I get it. The Broadcom situation has many folks reconsidering their virtualization strategy. We&#8217;re seeing organizations:</p>



<ul class="wp-block-list">
<li>Move to <a href="https://straightpathsql.com/archives/2025/10/hyper-v-and-sql-server-best-practices-what-we-wish-you-knew/">Hyper-V</a> for cost savings</li>



<li>Look to IaaS options in the cloud</li>



<li>Shift workloads to Azure SQL or AWS RDS</li>



<li>Return to bare metal for their most demanding instances</li>



<li>Negotiate hard with Broadcom on licensing (with mixed results)</li>



<li>Consider open source options at your own risk. </li>



<li>Consider hyperconverged platforms like Nutanix AHV at potential risk to performance (or cost if you get roped in and then have to buy more to get the performance you expected)</li>
</ul>



<p><strong>Whatever path you choose, the fundamentals remain: SQL Server needs predictable resources, proper configuration, and monitoring. Whether that&#8217;s on VMware, Hyper-V, cloud platforms, or bare metal, these principles translate.</strong></p>



<p>If you need help navigating the virtualization landscape, optimizing your SQL Server performance, or planning a migration strategy, <a href="https://straightpathsql.com/contact-us/">we&#8217;re here to help</a>. We&#8217;ve been working with virtualized SQL Server for over a decade, and we&#8217;ve seen it all.</p>



<p>And as always, if you&#8217;re experiencing performance issues you can&#8217;t quite pin down, drop us a line. Sometimes it takes an outside perspective to spot what&#8217;s been hiding in plain sight. And if it&#8217;s a quick e-mail &#8211; we&#8217;re not looking to make money off of every interaction &#8211; happy to point you in a direction.</p>



<p>This post covers virtualization-specific best practices, but we&#8217;ve put together a comprehensive <a href="https://straightpathsql.com/archives/2026/03/sql-server-best-practices/">SQL Server Best Practices Guide</a> covering everything from configuration to security to maintenance.</p>



<p></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/">VMware SQL Server Best Practices</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/vmware-sql-server-best-practices/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
