<?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>#sqlserver Archives | SQL Solutions Group</title>
	<atom:link href="https://sqlsolutionsgroup.com/tag/sqlserver/feed/" rel="self" type="application/rss+xml" />
	<link>https://sqlsolutionsgroup.com/tag/sqlserver/</link>
	<description></description>
	<lastBuildDate>Mon, 30 Mar 2026 03:33:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://sqlsolutionsgroup.com/wp-content/uploads/2021/01/cropped-SSG_FAVICON0002-32x32.png</url>
	<title>#sqlserver Archives | SQL Solutions Group</title>
	<link>https://sqlsolutionsgroup.com/tag/sqlserver/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Still Running SQL Server 2016? Here’s Why It’s Time to Upgrade</title>
		<link>https://sqlsolutionsgroup.com/still-running-sql-server-2016-heres-why-its-time-to-upgrade/</link>
					<comments>https://sqlsolutionsgroup.com/still-running-sql-server-2016-heres-why-its-time-to-upgrade/#respond</comments>
		
		<dc:creator><![CDATA[A.K. Gonzalez]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 03:16:37 +0000</pubDate>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2025]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#sql2016]]></category>
		<category><![CDATA[#sql2025]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7459</guid>

					<description><![CDATA[<p>Many organizations are still relying on SQL Server 2016 to power critical systems. It’s familiar, stable, and “still working”—so it’s easy to push an upgrade down the priority list. But here’s the reality: SQL Server 2016 has reached end of life. And that shouldn&#8217;t be ignored. What “End of Life” Actually Means When Microsoft ends [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/still-running-sql-server-2016-heres-why-its-time-to-upgrade/">Still Running SQL Server 2016? Here’s Why It’s Time to Upgrade</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="p1"><em><strong><span class="s1">Many organizations are still relying on <span class="s2">SQL Server 2016</span> to power critical systems. It’s familiar, stable, and “still working”—so it’s easy to push an upgrade down the priority list.</span></strong></em></p>
<p class="p1"><em><strong><span class="s1">But here’s the reality: SQL Server 2016 has reached end of life. And that shouldn&#8217;t be ignored.</span></strong></em></p>
<hr />
<h2><span class="s1">What “End of Life” Actually Means</span></h2>
<p class="p1"><span class="s1">When Microsoft ends support for a product, it’s not just a technical milestone—it’s a risk shift. The list of &#8216;cons&#8217; becomes much longer than the list of  &#8216;pros&#8217; when deciding if an upgrade is neccesary yet, or if you can put it off another year. </span></p>
<p class="p1"><span class="s1">Officially SQL Server 2016 will have:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">No more security updates</span></p>
</li>
<li>
<p class="p1"><span class="s1">No bug fixes or patches</span></p>
</li>
<li>
<p class="p1"><span class="s1">No official Microsoft support</span></p>
</li>
<li>
<p class="p1"><span class="s1">Increased exposure to vulnerabilities and compliance risks</span></p>
</li>
</ul>
<p class="p1"><span class="s1">Even if your system seems stable today, it’s now operating without a safety net. And in today’s environment, that’s a serious concern.</span></p>
<h2><span class="s1">The Hidden Cost of Staying Put</span></h2>
<p class="p1"><span class="s1">Delaying an upgrade might feel like the easier (and cheaper) option—but it often comes with hidden costs such as security risks, compliance issues, performance limiations and the need for emergency migrations.</span></p>
<p class="p1"><span class="s1">Without ongoing patches, your database becomes more vulnerable to attacks, especially ransomware targeting outdated systems. </span><span class="s1">Many industries require supported software. Running end-of-life systems can put you out of compliance with security standars. </span><span class="s1">Older systems miss out on years of performance improvements, optimization features, and efficiency gains. </span><span class="s1">Waiting too long often leads to rushed, reactive upgrades after a failure or breach—which are far more expensive and disruptive.</span></p>
<h2><span class="s1">What You Gain by Upgrading</span></h2>
<p class="p1"><span class="s1">Moving to a modern platform like <span class="s2">S</span><span class="s2">QL Server 2025</span> isn’t just about staying supported, it’s about unlocking better performance, resilience, and flexibility. </span><span class="s1">Newer versions bring query optimization, smarter resource usage, and faster processing, improving overall performance. There&#8217;s also some exciting new ways to make backup recovery smarter like: </span></p>
<ul>
<li>
<p class="p1"><span class="s1">True full and differential backups on secondary replicas</span></p>
</li>
<li>
<p class="p1"><span class="s1">Improved compression with ZSTD</span></p>
</li>
<li>
<p class="p1"><span class="s1">Immutable backup storage options</span></p>
</li>
</ul>
<p><span class="s1">The new upgrade also means stronger security and cloud-ready flexibility. </span><span class="s1">Modern encryption, threat detection, and tighter integration with cloud security tools help protect your data. And e</span><span class="s1">asier integration with Azure and hybrid environments gives you more options for scaling and disaster  recoverry.</span></p>
<h2><span class="s1">Migration Doesn’t Have to Be Overwhelming</span></h2>
<p class="p1"><span class="s1">One of the biggest reasons businesses delay upgrading is fear of disruption. </span><span class="s1">Downtime, data loss, compatibility issues, etc.  </span><span class="s1">But with the right strategy migrations can be smoooth, controlled, and predictable.</span></p>
<p class="p1"><span class="s1">A well executed upgrade includes:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">A full assessment of your current environment</span></p>
</li>
<li>
<p class="p1"><span class="s1">Compatibility and workload analysis</span></p>
</li>
<li>
<p class="p1"><span class="s1">A clear migration plan with rollback options</span></p>
</li>
<li>
<p class="p1"><span class="s1">Testing before going live</span></p>
</li>
<li>
<p class="p1"><span class="s1">Minimal downtime during cutover</span></p>
</li>
</ul>
<h2><span class="s1">How We Help</span></h2>
<p class="p1"><span class="s1">We specialize in helping businesses move from outdated systems to modern, optimized environments—without the chaos.</span></p>
<p class="p1"><span class="s1">Our approach focuses on:</span></p>
<p class="p1"><span class="s1">✔️ Safe, secure data migration</span></p>
<p class="p1"><span class="s1">✔️ Minimal disruption to your operations</span></p>
<p class="p1"><span class="s1">✔️ Performance tuning post-upgrade</span></p>
<p class="p1"><span class="s1">✔️ Modern backup and recovery setup</span></p>
<p class="p1"><span class="s1">✔️ Long-term scalability and support</span></p>
<p class="p1"><span class="s1">Whether you’re running a single database or a complex environment, we make the transition manageable and worth it.</span></p>
<h2><span class="s1">Ready to Modernize Your SQL Environment?</span></h2>
<p class="p1"><span class="s1">If you’re still on SQL Server 2016, now is the time to act. </span><span class="s1">Let’s build a plan to upgrade your system, migrate your data safely, and set you up with a faster, more secure, and more resilient environment.</span></p>
<p class="p1"><span class="s1">Reach out today to start your upgrade the right way.</span></p>
<p>The post <a href="https://sqlsolutionsgroup.com/still-running-sql-server-2016-heres-why-its-time-to-upgrade/">Still Running SQL Server 2016? Here’s Why It’s Time to Upgrade</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/still-running-sql-server-2016-heres-why-its-time-to-upgrade/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why use PowerShell when you can use T-SQL?</title>
		<link>https://sqlsolutionsgroup.com/why-use-powershell/</link>
					<comments>https://sqlsolutionsgroup.com/why-use-powershell/#comments</comments>
		
		<dc:creator><![CDATA[Kyle Burwell]]></dc:creator>
		<pubDate>Wed, 11 Mar 2026 20:27:28 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#microsftcertifedmaster #microsftpartner]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<guid isPermaLink="false">https://sqlgroupstg.wpengine.com/?p=7450</guid>

					<description><![CDATA[<p>Why use PowerShell? I’ve lost count of how many times I have been asked this question. Most of the time, the inquirer is asking out of genuine curiosity. Other times, there is some obvious (negative) judgement in the question. Either way, my answer is the same: “It’s easier.” I will go through a couple of [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/why-use-powershell/">Why use PowerShell when you can use T-SQL?</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em><strong><span style="color: #f25e00;">Why use PowerShell?</span></strong></em> I’ve lost count of how many times I have been asked this question. Most of the time, the inquirer is asking out of genuine curiosity. Other times, there is some obvious (negative) judgement in the question. Either way, my answer is the same: “<span style="color: #f25e00;"><strong>It’s easier</strong></span>.”</p>
<p>I will go through a couple of common scenarios that we frequently encounter and give T-SQL and PowerShell solutions.</p>
<h3>Is Max Memory Set Appropriately?</h3>
<p>Let’s start small: Finding max memory values and evaluating if they are appropriate.</p>
<p><strong>T-SQL Script:</strong></p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="tsql" style="font-family:monospace;"><span class="kw1">SELECT</span> mem.<span class="me1">total_physical_memory_kb</span> <span class="sy0">/</span> <span class="nu0">1024</span> <span class="st0">'server memory (MB)'</span>
&nbsp;
,configs.<span class="me1">value_in_use</span> <span class="st0">'max server memory (MB)'</span>
&nbsp;
<span class="kw1">FROM</span> sys.<span class="me1">dm_os_sys_memory</span> mem
&nbsp;
cross apply <span class="br0">&#40;</span>
&nbsp;
<span class="kw1">SELECT</span> value_in_use
&nbsp;
<span class="kw1">FROM</span> sys.<span class="me1">configurations</span>
&nbsp;
<span class="kw1">WHERE</span> name <span class="sy0">=</span> <span class="st0">'max server memory (MB)'</span>
&nbsp;
<span class="br0">&#41;</span> configs</pre></div></div>
<p><strong>T-SQL Results:</strong><br />
<img decoding="async" width="277" height="46" class="wp-image-7451" src="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-1.png" /></p>
<p>With that information, I can make a determination if Max Memory is set appropriately. If not, I can calculate an appropriate value and go implement the change.</p>
<p><strong>PowerShell Script:</strong></p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="powershell" style="font-family:monospace;">Test<span class="sy0">-</span>DbaMaxMemory <span class="sy0">-</span>SqlInstance SSG<span class="kw4">-LT</span><span class="sy0">-</span>KBURWELL</pre></div></div>
<p><strong>PowerShell Results:<br />
<img decoding="async" width="250" height="130" class="wp-image-7452" src="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-screen-ai-generated-co.png" alt="A screenshot of a computer screen AI-generated content may be incorrect." /></strong></p>
<p>Again, this is a basic example, and the T-SQL isn’t exactly complex, but the PowerShell is much easier and even gives you a recommendation for Max Memory.</p>
<h3>LastFullBackup</h3>
<p>The T-SQL for this is also rather easy, but the tricky part is running it against multiple instances and returning a single result set.</p>
<p><strong>T-SQL Script:</strong></p>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="tsql" style="font-family:monospace;"><span class="kw1">SELECT</span> database_name
&nbsp;
,<span class="kw2">MAX</span><span class="br0">&#40;</span>backup_start_date<span class="br0">&#41;</span> latest_full
&nbsp;
<span class="kw1">FROM</span> msdb.<span class="me1">dbo</span>.<span class="me1">backupset</span> s
&nbsp;
<span class="kw1">WHERE</span> s.<span class="me1">type</span> <span class="sy0">=</span> <span class="st0">'D'</span>
&nbsp;
<span class="kw1">GROUP</span> <span class="kw1">BY</span> s.<span class="me1">database_name</span></pre></div></div>
<p><strong>T-SQL Results:</strong></p>
<p><strong><img decoding="async" width="352" height="110" class="wp-image-7453" src="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-ai-generated-content-m.png" alt="A screenshot of a computer AI-generated content may be incorrect." srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-ai-generated-content-m.png 352w, https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-ai-generated-content-m-300x94.png 300w" sizes="(max-width: 352px) 100vw, 352px" /></strong></p>
<p>As I mentioned, this is a very simple script, but this is <span style="color: #f25e00;"><strong>only for one instance</strong></span>. If you want to run this against multiple instances, you will need to do some additional setup, such as configuring linked servers or a Central Management Server, neither of which I will be detailing here. Instead, I will show how easy it is to query multiple instances in PowerShell.</p>
<p><strong>PowerShell Script:</strong></p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="powershell" style="font-family:monospace;">Get<span class="sy0">-</span>DbaLastBackup <span class="sy0">-</span>SqlInstance SSG<span class="kw4">-LT</span><span class="sy0">-</span>KBURWELL</pre></div></div>
<p><strong>PowerShell Results:<br />
<img loading="lazy" decoding="async" width="377" height="555" class="wp-image-7454" src="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-4.png" srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-4.png 377w, https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-4-204x300.png 204w" sizes="(max-width: 377px) 100vw, 377px" /></strong></p>
<p>One simple command and I get the same info, plus details for latest diff and log backups as well. Now let’s make a couple of changes so we can get results for multiple instances and make the output a little more friendly.</p>
<p><strong>PowerShell Script:</strong></p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="powershell" style="font-family:monospace;">Get<span class="sy0">-</span>DbaLastBackup <span class="sy0">-</span>SqlInstance SSG<span class="kw4">-LT</span><span class="sy0">-</span>KBURWELL<span class="sy0">,</span>SSG<span class="kw4">-LT</span><span class="sy0">-</span>KBURWELL\MSSQLSERVER01 <span class="sy0">-</span>ExcludeDatabase msdb<span class="sy0">,</span>model<span class="sy0">,</span>master <span class="sy0">|</span> <span class="kw1">Format-Table</span></pre></div></div>
<p>I made 3 minor changes to the script, but it is still a single line of code and now reads from multiple instances and formats the output as a table.</p>
<ul>
<li><span style="color: #f25e00;"><strong>Change 1</strong></span>: Added an additional SQL instance to the -SqlInstance parameter.</li>
<li><span style="color: #f25e00;"><strong>Change 2</strong></span>: Added the -ExcludeDatabase parameter and passed in the system databases.</li>
<li><span style="color: #f25e00;"><strong>Change 3</strong></span>: Piped the results to Format-Table</li>
</ul>
<p><strong>PowerShell Results:</strong></p>
<p><strong><img loading="lazy" decoding="async" width="1185" height="182" class="wp-image-7455" src="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-5.png" srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-5.png 1185w, https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-5-300x46.png 300w, https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-5-1024x157.png 1024w, https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/word-image-7450-5-768x118.png 768w" sizes="(max-width: 1185px) 100vw, 1185px" /></strong></p>
<p>Let’s take it one step further and generate a spreadsheet from the results.</p>
<p><strong>PowerShell Script:</strong></p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="powershell" style="font-family:monospace;">Get<span class="sy0">-</span>DbaLastBackup <span class="sy0">-</span>SqlInstance SSG<span class="kw4">-LT</span><span class="sy0">-</span>KBURWELL<span class="sy0">,</span>SSG<span class="kw4">-LT</span><span class="sy0">-</span>KBURWELL\MSSQLSERVER01 <span class="sy0">-</span>ExcludeDatabase msdb<span class="sy0">,</span>model<span class="sy0">,</span>master <span class="sy0">|</span> Export<span class="sy0">-</span>Excel <span class="kw5">-Path</span> C:\Temp\LastBackups.xlsx</pre></div></div>
<p>Instead of piping the results to Format-Table, I am piping the results to Export-Excel and providing a file path and name. Now I have a spreadsheet that I can share with whomever might want to see it.</p>
<p><img loading="lazy" decoding="async" width="327" height="153" class="wp-image-7456" src="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-ai-generated-content-m-1.png" alt="A screenshot of a computer AI-generated content may be incorrect." srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-ai-generated-content-m-1.png 327w, https://sqlsolutionsgroup.com/wp-content/uploads/2026/03/a-screenshot-of-a-computer-ai-generated-content-m-1-300x140.png 300w" sizes="(max-width: 327px) 100vw, 327px" /></p>
<p>Getting results from SSMS into Excel is obviously possible, it just requires extra manual steps. It&#8217;s much quicker to just have PowerShell do it for you.</p>
<h3>“It’s easier”</h3>
<p>When I say PowerShell is easier, I’m not just talking about the simplicity of commands. I’m also talking about how easy it is to add in functionality, such as querying multiple instances, combining the results, and exporting them to Excel.</p>
<p>If you are perfectly happy using T-SQL and SSMS, then by all means, continue to do so. <em><strong>But</strong></em>, I do encourage you to explore PowerShell, specifically the <a href="dbatools.io">DBATools</a> module. I will be following up this post with more complex Powershell examples such as copying databases between SQL instances and keeping AG objects synchronized between replicas. Stay tuned for more answers to the question &#8220;why use PowerShell?&#8221;</p>
<p>&nbsp;</p>
<p>The post <a href="https://sqlsolutionsgroup.com/why-use-powershell/">Why use PowerShell when you can use T-SQL?</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/why-use-powershell/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Backup Just Got Smarter: What’s New in Microsoft SQL Server 2025</title>
		<link>https://sqlsolutionsgroup.com/backup-just-got-smarter-whats-new-in-microsoft-sql-server-2025/</link>
					<comments>https://sqlsolutionsgroup.com/backup-just-got-smarter-whats-new-in-microsoft-sql-server-2025/#respond</comments>
		
		<dc:creator><![CDATA[A.K. Gonzalez]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 06:29:59 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatino]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlimerbymay]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#sqlite3]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlrun]]></category>
		<category><![CDATA[#sqlsaturday2017]]></category>
		<category><![CDATA[#sqlsatvienna]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLserver2012]]></category>
		<category><![CDATA[#sqlserver2014]]></category>
		<category><![CDATA[#sqlserver2017]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLServeronLinux]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7438</guid>

					<description><![CDATA[<p>In a recent webinar, Randy Knight walked through the backup enhancements in SQL Server 2025—and one update in particular changes everything for Availability Groups. True Full and Differential Backups on Secondary Replicas For years, database professionals faced a frustrating limitation. With Availability Groups, you could offload some workloads to secondary replicas—but not your real backup [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/backup-just-got-smarter-whats-new-in-microsoft-sql-server-2025/">Backup Just Got Smarter: What’s New in Microsoft SQL Server 2025</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="p1"><em><strong><span class="s1">In a recent webinar, <a href="chatgpt://generic-entity?number=0"><span class="s2">Randy Knight</span></a> walked through the backup enhancements in <a href="chatgpt://generic-entity?number=1"><span class="s2">SQL Server 2025</span></a>—and one update in particular changes everything for Availability Groups.</span></strong></em></p>

<h3><span class="s1">True Full and Differential Backups on Secondary Replicas</span></h3>
<p class="p1"><span class="s1">For years, database professionals faced a frustrating limitation. With Availability Groups, you could offload some workloads to secondary replicas—but not your real backup strategy.</span><span class="s1">Yes, you could run copy-only backups on a secondary. But true full backups? Differential backups that maintain the LSN chain? Those had to run on the primary replica, u</span><span class="s1">ntil now. </span><span class="s1">SQL Server 2025 introduces the ability to run </span><span class="s4">true full backups and true differential backups on secondary replicas</span><span class="s1">.</span></p>
<p class="p1"><span class="s1">That means:</span></p>

<ul>
 	<li>
<p class="p1"><span class="s1">You can move your entire backup workload off the primary.</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">Your backup plan behaves exactly the same as if it were running on the primary.</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">You potentially reduce your RPO by running backups more frequently.</span></p>
</li>
</ul>
<p class="p1"><span class="s1">This isn’t just a convenience feature—it’s a performance and resilience upgrade.</span></p>


<hr />

<h3><span class="s1">ZSTD Backup Compression</span></h3>
<p class="p1"><span class="s1">Another enhancement is the introduction of </span><span class="s4">ZSTD backup compression</span><span class="s1">, an algorithm originally developed at Facebook. </span><span class="s1">Until now, SQL Server used MSXpress as the default compression method. ZSTD brings:</span></p>

<ul>
 	<li>
<p class="p1"><span class="s1">Slightly better compression ratios</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">Faster compression in many cases</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">Less CPU overhead during decompression</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">Potentially faster restores</span></p>
</li>
</ul>
<p class="p1"><span class="s1">In Randy’s testing—and in benchmarking done by <a href="chatgpt://generic-entity?number=2"><span class="s2">Aaron Bertrand</span></a> on an 8TB Stack Overflow database—backup sizes weren’t dramatically smaller. A 50GB database might shrink from 15GB to 14.5GB. </span><span class="s1">That doesn’t sound revolutionary, b</span><span class="s1">ut at scale it really adds up!</span></p>
<p class="p1"><span class="s1">If you’re backing up multi-terabyte databases with long retention periods, even small savings compound quickly. Smaller backups also mean improved storage efficiency and potential restore performance gains. </span><span class="s1">It’s not flashy—but it’s practical, which matters. </span></p>


<hr />

<h3><span class="s1">Immutable Backups in Azure Blob Storage</span></h3>
<p class="p1"><span class="s1">Backing up directly to Azure Blob Storage isn’t new. But SQL Server 2025 now supports backups to </span><span class="s4">immutable Azure Blob storage accounts</span><span class="s1">.</span><span class="s1">This enhancement strengthens ransomware protection. </span><span class="s1">Immutable storage ensures that once a backup is written, it cannot be modified. The only permitted action is deletion under defined rules. While not truly air-gapped, this approach creates a powerful safeguard against backup tampering. </span><span class="s1">In a world where ransomware targets backups first, this feature significantly improves recovery confidence.</span></p>


<hr />

<h3><span class="s1">Why These Enhancements Matter</span></h3>
<p class="p1"><span class="s1">SQL Server 2025 doesn’t reinvent backup strategy—it strengthens it.</span></p>

<ul>
 	<li>
<p class="p1"><span class="s1">Offload backup workloads to secondary replicas</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">Improve compression efficiency at scale</span></p>
</li>
 	<li>
<p class="p1"><span class="s1">Harden backup security against ransomware</span></p>
</li>
</ul>
<p class="p1"><span class="s1">Individually, these updates are incremental. Together, they represent a meaningful evolution in database resilience and performance. F</span><span class="s1">or organizations running mission-critical systems, that’s an especially big deal.</span></p>
<!-- /wp:post-content --><p>The post <a href="https://sqlsolutionsgroup.com/backup-just-got-smarter-whats-new-in-microsoft-sql-server-2025/">Backup Just Got Smarter: What’s New in Microsoft SQL Server 2025</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/backup-just-got-smarter-whats-new-in-microsoft-sql-server-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server 2025 Performance Enhancements: What Developers and DBAs Need to Know</title>
		<link>https://sqlsolutionsgroup.com/sql-server-2025-performance-enhancements-what-developers-and-dbas-need-to-know/</link>
					<comments>https://sqlsolutionsgroup.com/sql-server-2025-performance-enhancements-what-developers-and-dbas-need-to-know/#respond</comments>
		
		<dc:creator><![CDATA[A.K. Gonzalez]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 19:01:28 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatino]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlimerbymay]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#sqlite3]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlrun]]></category>
		<category><![CDATA[#sqlsaturday2017]]></category>
		<category><![CDATA[#sqlsatvienna]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLserver2012]]></category>
		<category><![CDATA[#sqlserver2014]]></category>
		<category><![CDATA[#sqlserver2017]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLServeronLinux]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7391</guid>

					<description><![CDATA[<p>SQL Server 2025 continues Microsoft’s steady focus on performance, reliability, and intelligent automation. Rather than introducing one dramatic overhaul, this release delivers a collection of meaningful, incremental improvements that—when combined—can result in noticeable gains for many workloads. During a recent discussion, Rich and Kyle walked through several of the most impactful enhancements, focusing on Intelligent [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/sql-server-2025-performance-enhancements-what-developers-and-dbas-need-to-know/">SQL Server 2025 Performance Enhancements: What Developers and DBAs Need to Know</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<blockquote>
<p><em><strong>SQL Server 2025 continues Microsoft’s steady focus on performance, reliability, and intelligent automation. Rather than introducing one dramatic overhaul, this release delivers a collection of meaningful, incremental improvements that—when combined—can result in noticeable gains for many workloads.</strong></em></p>
</blockquote>
<p><span style="font-weight: 400;">During a recent discussion, Rich and Kyle walked through several of the most impactful enhancements, focusing on Intelligent Query Processing, concurrency improvements, columnstore indexes, and long-awaited TempDB upgrades.</span></p>
<h3><b>Smarter Query Performance with Intelligent Query Processing (IQP)</b></h3>
<p><span style="font-weight: 400;">Intelligent Query Processing isn’t new, but SQL Server 2025 refines it further. IQP is an umbrella term covering a set of features designed to make the query optimizer more adaptive and accurate over time.</span></p>
<p><span style="font-weight: 400;">One key area of improvement is cardinality estimation—the process SQL Server uses to estimate how many rows will flow through each step of a query plan. Anyone who has tuned performance knows how damaging a mismatch between estimated and actual rows can be. SQL Server 2025 introduces incremental enhancements to these estimations, which, in most cases, translate to better execution plans and improved default performance without any code changes.</span></p>
<p><span style="font-weight: 400;">As with any optimizer change, edge cases still exist. Large jumps in behavior—such as the one between SQL Server 2014 and 2016—sometimes caused regressions in specific workloads. While the changes in 2025 are far less dramatic, testing remains essential when upgrading.</span></p>
<p><span style="font-weight: 400;">Another IQP enhancement is parameter-sensitive optimization, which addresses long-standing issues related to parameter sniffing. When query parameters vary significantly between executions, SQL Server can now better recognize those differences and adjust execution strategies accordingly, reducing performance instability.</span></p>
<p><span style="font-weight: 400;">Degree of parallelism (DOP) feedback also continues to evolve. Rather than making a one-time decision based solely on cost thresholds and configuration values, SQL Server now evaluates how well a query performs when running in parallel and adjusts its behavior over time. This allows the engine to fine-tune parallelism instead of blindly running at maximum settings. While powerful, it does require familiarity with execution plans to fully understand how SQL Server is adapting behind the scenes.</span></p>
<h3><b>Adaptive Joins That Adjust on the Fly</b></h3>
<p><span style="font-weight: 400;">Adaptive joins build on SQL Server’s ability to recover from imperfect statistics. Traditionally, SQL Server commits to a join strategy—such as nested loops or hash joins—based on cardinality estimates. If those estimates are wrong, the query can suffer dramatically.</span></p>
<p><span style="font-weight: 400;">With adaptive joins, SQL Server can change its mind mid-execution. If a join starts as a loop join but processes far more rows than expected, the engine can switch to a more appropriate join type, such as a hash join, while the query is still running.</span></p>
<p><span style="font-weight: 400;">SQL Server 2025 improves adaptive joins further, especially in complex scenarios involving multiple joins. This makes the engine more resilient in real-world environments where statistics are rarely perfect.</span></p>
<h3><b>Improved Concurrency Through Smarter Locking</b></h3>
<p><span style="font-weight: 400;">Concurrency is another area receiving meaningful attention. SQL Server has long relied on various lock types—row, key, page, range, and table locks—with relatively rigid thresholds for escalation.</span></p>
<p><span style="font-weight: 400;">Historically, modifying a few thousand rows could trigger escalation to a full table lock, leading many teams to design batch operations around that behavior. SQL Server 2025 is more nuanced. It can now hold thousands of locks without immediately escalating to a table lock when doing so would be unnecessary or harmful.</span></p>
<p><span style="font-weight: 400;">These optimized locking improvements, especially when combined with accelerated database recovery, have already shown dramatic reductions in blocking in real-world workloads. The engine is simply making better decisions about how much data truly needs to be locked.</span></p>
<h3><b>Faster and More Efficient Columnstore Indexes</b></h3>
<p><span style="font-weight: 400;">For organizations using columnstore indexes—particularly in data warehouse and analytics workloads—SQL Server 2025 brings performance gains across the board.</span></p>
<p><span style="font-weight: 400;">Compression is faster, index rebuilds complete more quickly, and the engine handles delta stores more efficiently. Delta stores, which temporarily hold newly inserted uncompressed data before it’s merged into compressed columnstore segments, are now managed more intelligently. This improves both data ingestion and query performance.</span></p>
<p><span style="font-weight: 400;">Reading from columnstore indexes has also been optimized, meaning analytics queries can run faster with no changes required at the application level.</span></p>
<h3><b>TempDB Enhancements That DBAs Will Appreciate</b></h3>
<p><span style="font-weight: 400;">TempDB has long been one of SQL Server’s most critical—and fragile—components. SQL Server 2025 introduces several enhancements that directly address common pain points.</span></p>
<p><span style="font-weight: 400;">One of the most significant changes is the ability to govern TempDB usage using Resource Governor. DBAs can now set quotas that prevent individual queries or workloads from consuming excessive TempDB space. When a query exceeds its limit, SQL Server cancels it before TempDB fills up, preventing server-wide outages.</span></p>
<p><span style="font-weight: 400;">This is especially valuable in environments where large reports or unfiltered queries can consume hundreds of gigabytes and bring systems to a halt—often in the middle of the night.</span></p>
<p><span style="font-weight: 400;">SQL Server 2025 also brings accelerated database recovery (ADR) to TempDB. Large rollbacks that previously took minutes can now complete almost instantly, reducing downtime and improving system responsiveness during heavy workloads.</span></p>
<p><span style="font-weight: 400;">To support monitoring and alerting, new DMV columns expose detailed TempDB usage metrics, including current usage, peak usage, and the number of TempDB limit violations. These additions make it far easier for DBAs and monitoring tools to detect issues before they escalate into outages.</span></p>
<h3><b>A Practical Step Forward</b></h3>
<p><span style="font-weight: 400;">Rather than reinventing SQL Server, the 2025 release refines the engine’s intelligence. Query plans adapt more effectively, locking decisions are smarter, analytics workloads run faster, and TempDB becomes far more manageable.</span></p>
<p><span style="font-weight: 400;">For teams considering an upgrade, SQL Server 2025 offers tangible performance and reliability improvements—especially for environments that struggle with concurrency, large analytical workloads, or TempDB pressure. As always, thorough testing is key, but for many workloads, the benefits will be felt immediately.</span></p>
<p class="p1"> </p>

<p>&nbsp;</p>
<p>The post <a href="https://sqlsolutionsgroup.com/sql-server-2025-performance-enhancements-what-developers-and-dbas-need-to-know/">SQL Server 2025 Performance Enhancements: What Developers and DBAs Need to Know</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/sql-server-2025-performance-enhancements-what-developers-and-dbas-need-to-know/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why a SQL Server Health Check isn’t a Luxury</title>
		<link>https://sqlsolutionsgroup.com/sql-server-health-check-isnt-a-luxury/</link>
					<comments>https://sqlsolutionsgroup.com/sql-server-health-check-isnt-a-luxury/#respond</comments>
		
		<dc:creator><![CDATA[Jason Russell]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 22:08:30 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#SQLPerformance]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLServerHealthCheck]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7374</guid>

					<description><![CDATA[<p>Does the integrity of your SQL Server databases keep you up at night? Is an outage of your system a matter of when and not if? Do you dread a call from the C-suite asking why everything is down?</p>
<p>The post <a href="https://sqlsolutionsgroup.com/sql-server-health-check-isnt-a-luxury/">Why a SQL Server Health Check isn’t a Luxury</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><span style="color: #f25e00;"><strong><a style="color: #f25e00;" href="https://sqlsolutionsgroup.com/sql-server-health-check/&quot; \t &quot;_blank">Request&nbsp;a SQL Server Health Check</a> and reduce the cost of downtime before it happens.</strong></span></p>



<p><em>Does the&nbsp;integrity of your SQL Server databases&nbsp;keep you up at night?&nbsp;Is an&nbsp;outage&nbsp;of your&nbsp;system&nbsp;a matter of&nbsp;when&nbsp;and not&nbsp;if?&nbsp;Do you dread a call from the C-suite asking why everything is down?</em> If your heart rate went up just reading those scenarios, you can see why an SSG SQL Server Health&nbsp; isn’t a luxury but a necessity.&nbsp;Don’t&nbsp;leave your business continuity up to chance.</p>



<h3 class="wp-block-heading"><strong>Everything Runs on Data</strong></h3>



<p>Data is the currency of&nbsp;business,&nbsp;and unplanned database outages&nbsp;don’t&nbsp;just disrupt IT.</p>



<p>Industry reports from&nbsp;<a href="https://www.erwoodgroup.com/blog/the-true-costs-of-downtime-in-2025-a-deep-dive-by-business-size-and-industry/" target="_blank" rel="noopener">Gartner, ITIC, and others</a>&nbsp;show that the&nbsp;financial impact&nbsp;of IT and database outages has reached historic highs, with costs for large enterprises often exceeding $1 million per hour.&nbsp;Gartner&#8217;s historical baseline of $5,600 per minute (~$336,000 per hour)&nbsp;remains&nbsp;a widely cited metric, but 2025-2026 data&nbsp;shows&nbsp;this has escalated to approximately $9,000 per minute for many firms. U.S. companies suffer an average of one unplanned&nbsp;downtime incident per month.</p>



<p>These days,&nbsp;database&nbsp;failure is likely to halt operations, impact customers, interrupt sales, and put revenue at risk. <span style="color: #f25e00;"><strong>It could also get someone fired</strong></span>.</p>



<h3 class="wp-block-heading"><strong>Our SQL Server Health Check</strong></h3>



<p>Be proactive and&nbsp;find problems in your&nbsp;SQL Server instances before they blow up.&nbsp;A&nbsp;Health&nbsp;Check&nbsp;from SQL Solutions Group<strong>&nbsp;</strong>helps you identify risks and how to fix issues, as we test everything from hardware to hypervisor/cloud configuration to OS to your SQL Server installation itself.&nbsp;Once&nbsp;we complete a Health Check on your&nbsp;instances, you receive:</p>



<ul class="wp-block-list">
<li>A comprehensive, executive-ready risk report</li>



<li>Prioritized remediation roadmap</li>



<li>Practical recommendations aligned to your business goals</li>
</ul>



<h3 class="wp-block-heading"><strong>Health Check Take-aways</strong></h3>



<p>In other words,&nbsp;you’ll&nbsp;have a clear plan for&nbsp;getting your instances as healthy as possible. You can do that work yourself, or you can&nbsp;leverage&nbsp;our&nbsp;expertise&nbsp;to get it done.&nbsp;Our goal&nbsp;with each SQL Server Health Check is to:</p>



<ul class="wp-block-list">
<li>Restore confidence in your databases</li>



<li>Reduce downtime</li>



<li>Improve resilience</li>



<li>Support uninterrupted business operations</li>



<li>Reduce your stress</li>



<li>Give you peace of mind</li>
</ul>



<p>If SQL Server supports your core systems, a proactive health check&nbsp;is so much more than a useful&nbsp;technical exercise.&nbsp;It’s&nbsp;a <strong>risk-management&nbsp;and ROI decision</strong>. You can’t afford the risk to your databases because the problems won’t go away if you ignore them. Address your ticking timebombs before your phone rings when you least want it to with a Health Check from SQL Solutions Group.</p>
<p>The post <a href="https://sqlsolutionsgroup.com/sql-server-health-check-isnt-a-luxury/">Why a SQL Server Health Check isn’t a Luxury</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/sql-server-health-check-isnt-a-luxury/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Track Database File Sizes with PowerShell: A Quick Guide for DBAs</title>
		<link>https://sqlsolutionsgroup.com/track-database-file-sizes-with-powershell/</link>
					<comments>https://sqlsolutionsgroup.com/track-database-file-sizes-with-powershell/#comments</comments>
		
		<dc:creator><![CDATA[Kyle Burwell]]></dc:creator>
		<pubDate>Mon, 29 Dec 2025 10:48:30 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#PowerShell]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[DBA]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7348</guid>

					<description><![CDATA[<p>Database files (mdf, nds, ldfs, etc.) can get out of hand quickly and easily, leading to issues down the road. This can be due to improper planning, large data loads, and bad code run in production, just to list a few. As unglamorous as disk space monitoring is, we need to do our part as [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/track-database-file-sizes-with-powershell/">Track Database File Sizes with PowerShell: A Quick Guide for DBAs</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Database files (mdf, nds, ldfs, etc.) can get out of hand quickly and easily, leading to issues down the road. This can be due to improper planning, large data loads, and bad code run in production, just to list a few. As unglamorous as disk space monitoring is, we need to do our part as DBAs. This post is a quick guide on how to track database file sizes with PowerShell.</p>
<h3>Getting Started</h3>
<p>If you haven’t already, make sure you have <a href="https://dbatools.io/">DBATools</a> installed. We are going to be using a command called <strong>Get-DbaDbFile</strong> to gather the information for us. This command only requires one parameter, <strong>-SqlInstance</strong>. Here is a snippet of what I get when I run it against my local dev instance:</p>
<p><figure id="attachment_7349" aria-describedby="caption-attachment-7349" style="width: 757px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-7349" src="https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m.png" alt="A screenshot of a computerAI-generated content may be incorrect." width="757" height="632" srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m.png 757w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m-300x250.png 300w" sizes="(max-width: 757px) 100vw, 757px" /><figcaption id="caption-attachment-7349" class="wp-caption-text">Figure 1: Really Kyle? Data files on the C: drive?</figcaption></figure></p>
<p>&nbsp;</p>
<p>This is a bit more information than we really need right now, so let’s trim it down and get some parameters added. For this script, we really only need SqlInstance, Database, TypeDescription, LogicalName, PhysicalName, Size, UsedSpace, and AvailableSpace. We can also exclude system databases from the result set. For readability, I am going to use Format-Table. I will also start to add in some parameters:</p>
<p><div id="wpshdo_7" class="wp-synhighlighter-outer"><div id="wpshdt_7" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_7"></a><a id="wpshat_7" class="wp-synhighlighter-title" href="#codesyntax_7"  onClick="javascript:wpsh_toggleBlock(7)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_7" onClick="javascript:wpsh_code(7)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_7" onClick="javascript:wpsh_print(7)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_7" class="wp-synhighlighter-inner" style="display: block;"><pre class="powershell" style="font-family:monospace;"><span class="re0">$SqlInstance</span> <span class="sy0">=</span> <span class="st0">&quot;SSG-LT-KBURWELL&quot;</span>
&nbsp;
Get<span class="sy0">-</span>DbaDbFile <span class="sy0">-</span>SqlInstance <span class="re0">$SqlInstance</span>
&nbsp;
Get<span class="sy0">-</span>DbaDbFile <span class="sy0">-</span>SqlInstance <span class="re0">$SqlInstance</span> <span class="sy0">-</span>ExcludeDatabase master<span class="sy0">,</span>model<span class="sy0">,</span>msdb<span class="sy0">,</span>tempdb <span class="sy0">|</span>
&nbsp;
    <span class="kw1">Select-Object</span> SqlInstance<span class="sy0">,</span> Database<span class="sy0">,</span> TypeDescription<span class="sy0">,</span> LogicalName<span class="sy0">,</span> PhysicalName<span class="sy0">,</span> Size<span class="sy0">,</span> UsedSpace<span class="sy0">,</span> AvailableSpace <span class="sy0">|</span> <span class="kw1">Format-Table</span></pre></div></div></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-7350" src="https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/word-image-7348-2.png" alt="track database file sizes with Powershell" width="1410" height="138" srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/word-image-7348-2.png 1410w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/word-image-7348-2-300x29.png 300w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/word-image-7348-2-1024x100.png 1024w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/word-image-7348-2-768x75.png 768w" sizes="(max-width: 1410px) 100vw, 1410px" /></p>
<h3>Using Custom Objects</h3>
<p>This will be much easier to work with, but it is important to be aware that the columns related to file size have GB, MB, and KB values, depending on what is most appropriate for that file size. This is great when just looking at the data like this, but can be a bit problematic for mathematical comparisons, which we will be doing later. To get around this, we can just use some custom objects:</p>
<p><div id="wpshdo_8" class="wp-synhighlighter-outer"><div id="wpshdt_8" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_8"></a><a id="wpshat_8" class="wp-synhighlighter-title" href="#codesyntax_8"  onClick="javascript:wpsh_toggleBlock(8)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_8" onClick="javascript:wpsh_code(8)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_8" onClick="javascript:wpsh_print(8)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_8" class="wp-synhighlighter-inner" style="display: block;"><pre class="powershell" style="font-family:monospace;"><span class="re0">$SqlInstance</span> <span class="sy0">=</span> <span class="st0">&quot;SSG-LT-KBURWELL&quot;</span>
&nbsp;
Get<span class="sy0">-</span>DbaDbFile <span class="sy0">-</span>SqlInstance <span class="re0">$SqlInstance</span> <span class="sy0">-</span>ExcludeDatabase master<span class="sy0">,</span>model<span class="sy0">,</span>msdb<span class="sy0">,</span>tempdb <span class="sy0">|</span>
&nbsp;
    <span class="kw1">Select-Object</span> SqlInstance<span class="sy0">,</span> TypeDescription<span class="sy0">,</span> LogicalName<span class="sy0">,</span> PhysicalName<span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st0">'DatabaseName'</span>; Expression<span class="sy0">=</span><span class="br0">&#123;</span><a href="about:blank"><span class="kw6">$_</span></a>.Database<span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st0">'SizeMB'</span>; Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="br0">[</span>math<span class="br0">]</span>::Round<span class="br0">&#40;</span><a href="about:blank"><span class="kw6">$_</span></a>.Size <span class="sy0">/</span> 1MB<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st0">'UsedSpaceMB'</span>; Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="br0">[</span>math<span class="br0">]</span>::Round<span class="br0">&#40;</span><a href="about:blank"><span class="kw6">$_</span></a>.UsedSpace <span class="sy0">/</span> 1MB<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st0">'AvailableSpaceMB'</span>; Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="br0">[</span>math<span class="br0">]</span>::Round<span class="br0">&#40;</span><a href="about:blank"><span class="kw6">$_</span></a>.AvailableSpace <span class="sy0">/</span> 1MB<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st0">'FreeSpacePercent'</span>; Expression<span class="sy0">=</span><span class="br0">&#123;</span>
&nbsp;
    <span class="kw3">if</span> <span class="br0">&#40;</span><a href="about:blank"><span class="kw6">$_</span></a>.Size <span class="kw4">-gt</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="re0">$sizeMB</span> <span class="sy0">=</span> <span class="br0">[</span>math<span class="br0">]</span>::Round<span class="br0">&#40;</span><a href="about:blank"><span class="kw6">$_</span></a>.Size <span class="sy0">/</span> 1MB<span class="sy0">,</span> 2<span class="br0">&#41;</span>
&nbsp;
        <span class="re0">$availMB</span> <span class="sy0">=</span> <span class="br0">[</span>math<span class="br0">]</span>::Round<span class="br0">&#40;</span><a href="about:blank"><span class="kw6">$_</span></a>.AvailableSpace <span class="sy0">/</span> 1MB<span class="sy0">,</span> 2<span class="br0">&#41;</span>
&nbsp;
        <span class="br0">[</span>math<span class="br0">]</span>::Round<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$availMB</span> <span class="sy0">/</span> <span class="re0">$sizeMB</span><span class="br0">&#41;</span> <span class="sy0">*</span> 100<span class="sy0">,</span> 2<span class="br0">&#41;</span>
&nbsp;
        <span class="br0">&#125;</span> <span class="kw3">else</span> <span class="br0">&#123;</span> <span class="nu0">0</span> <span class="br0">&#125;</span>
&nbsp;
    <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
    <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st0">'CaptureTimestamp'</span>; Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="kw1">Get-Date</span> <span class="kw5">-Format</span> <span class="st0">&quot;yyyy-MM-dd HH:mm:ss&quot;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span>
&nbsp;
    <span class="sy0">|</span> <span class="kw1">Format-Table</span></pre></div></div></p>
<p>This converts all sizes to MB, which will make any mathematical operations much easier. I also included a custom object for DatabaseName, FileSpacePercent, and CaptureTimestamp. DatabaseName really just acts as a custom column name, which is necessary when loading the data into SQL.</p>
<h3>On To The Comparisons</h3>
<p>Now that we are getting only the data we need, we need to save it to a table so we can do point in time comparisons. As with everything else, DBATools makes this ridiculously easy. We just need to point it to an instance and a database, it will take care of the rest. Instead of piping our results to Format-Table, I am going to pipe them to a command that will build and load a SQL table:</p>
<p><div id="wpshdo_9" class="wp-synhighlighter-outer"><div id="wpshdt_9" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_9"></a><a id="wpshat_9" class="wp-synhighlighter-title" href="#codesyntax_9"  onClick="javascript:wpsh_toggleBlock(9)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_9" onClick="javascript:wpsh_code(9)" title="Show code only"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_9" onClick="javascript:wpsh_print(9)" title="Print code"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" border="0" style="border: 0 none" src="https://sqlsolutionsgroup.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_9" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="re0">$SqlInstance</span> <span class="sy0">=</span> <span class="st0">&quot;SSG-LT-KBURWELL&quot;</span>
&nbsp;
<span class="re0">$WriteInstance</span> <span class="sy0">=</span> <span class="st0">&quot;SSG-LT-KBURWELL&quot;</span>
&nbsp;
<span class="re0">$WriteDB</span> <span class="sy0">=</span> <span class="st0">&quot;DBA&quot;</span>
&nbsp;
<span class="re0">$WriteTable</span> <span class="sy0">=</span> <span class="st0">&quot;FileSizesAndUsage&quot;</span>
&nbsp;
Get<span class="sy0">-</span>DbaDbFile <span class="sy0">-</span>SqlInstance <span class="re0">$SqlInstance</span> <span class="sy0">-</span>ExcludeDatabase master<span class="sy0">,</span>model<span class="sy0">,</span>msdb<span class="sy0">,</span>tempdb <span class="sy0">|</span>
&nbsp;
    Select<span class="sy0">-</span>Object SqlInstance<span class="sy0">,</span> TypeDescription<span class="sy0">,</span> LogicalName<span class="sy0">,</span> PhysicalName<span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st_h">'DatabaseName'</span><span class="sy0">;</span> Expression<span class="sy0">=</span><span class="br0">&#123;</span><span class="re0">$_</span><span class="sy0">.</span>Database<span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st_h">'SizeMB'</span><span class="sy0">;</span> Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="br0">[</span>math<span class="br0">]</span><span class="sy0">::</span><a href="http://www.php.net/round"><span class="kw3">Round</span></a><span class="br0">&#40;</span><span class="re0">$_</span><span class="sy0">.</span>Size <span class="sy0">/</span> 1MB<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st_h">'UsedSpaceMB'</span><span class="sy0">;</span> Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="br0">[</span>math<span class="br0">]</span><span class="sy0">::</span><a href="http://www.php.net/round"><span class="kw3">Round</span></a><span class="br0">&#40;</span><span class="re0">$_</span><span class="sy0">.</span>UsedSpace <span class="sy0">/</span> 1MB<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st_h">'AvailableSpaceMB'</span><span class="sy0">;</span> Expression<span class="sy0">=</span><span class="br0">&#123;</span> <span class="br0">[</span>math<span class="br0">]</span><span class="sy0">::</span><a href="http://www.php.net/round"><span class="kw3">Round</span></a><span class="br0">&#40;</span><span class="re0">$_</span><span class="sy0">.</span>AvailableSpace <span class="sy0">/</span> 1MB<span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
     <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st_h">'FreeSpacePercent'</span><span class="sy0">;</span> Expression<span class="sy0">=</span><span class="br0">&#123;</span>
&nbsp;
    <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_</span><span class="sy0">.</span>Size <span class="sy0">-</span>gt 0<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="re0">$sizeMB</span> <span class="sy0">=</span> <span class="br0">[</span>math<span class="br0">]</span><span class="sy0">::</span><a href="http://www.php.net/round"><span class="kw3">Round</span></a><span class="br0">&#40;</span><span class="re0">$_</span><span class="sy0">.</span>Size <span class="sy0">/</span> 1MB<span class="sy0">,</span> 2<span class="br0">&#41;</span>
&nbsp;
        <span class="re0">$availMB</span> <span class="sy0">=</span> <span class="br0">[</span>math<span class="br0">]</span><span class="sy0">::</span><a href="http://www.php.net/round"><span class="kw3">Round</span></a><span class="br0">&#40;</span><span class="re0">$_</span><span class="sy0">.</span>AvailableSpace <span class="sy0">/</span> 1MB<span class="sy0">,</span> 2<span class="br0">&#41;</span>
&nbsp;
        <span class="br0">[</span>math<span class="br0">]</span><span class="sy0">::</span><a href="http://www.php.net/round"><span class="kw3">Round</span></a><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$availMB</span> <span class="sy0">/</span> <span class="re0">$sizeMB</span><span class="br0">&#41;</span> <span class="sy0">*</span> 100<span class="sy0">,</span> 2<span class="br0">&#41;</span>
&nbsp;
        <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="nu0">0</span> <span class="br0">&#125;</span>
&nbsp;
    <span class="br0">&#125;</span><span class="br0">&#125;</span><span class="sy0">,</span>
&nbsp;
    <span class="sy0">@</span><span class="br0">&#123;</span>Name<span class="sy0">=</span><span class="st_h">'CaptureTimestamp'</span><span class="sy0">;</span> Expression<span class="sy0">=</span><span class="br0">&#123;</span> Get<span class="sy0">-</span><a href="http://www.php.net/date"><span class="kw3">Date</span></a> <span class="sy0">-</span>Format <span class="st0">&quot;yyyy-MM-dd HH:mm:ss&quot;</span> <span class="br0">&#125;</span><span class="br0">&#125;</span>
&nbsp;
    <span class="sy0">|</span> Write<span class="sy0">-</span>DbaDbTableData <span class="sy0">-</span>SqlInstance <span class="re0">$WriteInstance</span> <span class="sy0">-</span>Database <span class="re0">$WriteDB</span> <span class="sy0">-</span>Table <span class="re0">$WriteTable</span> <span class="sy0">-</span>AutoCreateTable</pre></div></div></p>
<p>Now I have the data in SQL Server:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-7351" src="https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m-1.png" alt="track database file sizes with Powershell" width="1267" height="207" srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m-1.png 1267w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m-1-300x49.png 300w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m-1-1024x167.png 1024w, https://sqlsolutionsgroup.com/wp-content/uploads/2025/12/a-screenshot-of-a-computer-ai-generated-content-m-1-768x125.png 768w" sizes="(max-width: 1267px) 100vw, 1267px" /></p>
<p>With this information being collected regularly, via scheduled task or agent job, we can easily trend out how much our database files are growing. It will also make potential misconfigurations stand out, such as a 1TB mdf with 99% free space. Personally, I use it in client environments to find over-allocated files that can be shrunk to reclaim some space. I know, “shrink bad”, but sometimes you just need to do it. As you can see, it&#8217;s quite straightforward and rather easy to track database file sizes with Powershell!</p>
<p>The post <a href="https://sqlsolutionsgroup.com/track-database-file-sizes-with-powershell/">Track Database File Sizes with PowerShell: A Quick Guide for DBAs</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/track-database-file-sizes-with-powershell/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Contained Availability Groups in SQL Server 2022: What You Need to Know</title>
		<link>https://sqlsolutionsgroup.com/contained-availability-groups-in-sql-server-2022-what-you-need-to-know/</link>
					<comments>https://sqlsolutionsgroup.com/contained-availability-groups-in-sql-server-2022-what-you-need-to-know/#respond</comments>
		
		<dc:creator><![CDATA[A.K. Gonzalez]]></dc:creator>
		<pubDate>Sat, 22 Nov 2025 19:40:40 +0000</pubDate>
				<category><![CDATA[Contained AG's]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2022]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#parallelism #azure]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatino]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlimerbymay]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#sqlite3]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlrun]]></category>
		<category><![CDATA[#sqlsaturday2017]]></category>
		<category><![CDATA[#sqlsatvienna]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLserver2012]]></category>
		<category><![CDATA[#sqlserver2014]]></category>
		<category><![CDATA[#sqlserver2017]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLServeronLinux]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[availability groups]]></category>
		<category><![CDATA[contained ag]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7298</guid>

					<description><![CDATA[<p>Overview One of the more intriguing features introduced in SQL Server 2022 is Contained Availability Groups (AGs). At first glance, they look very similar to traditional AGs — but there are some key differences that can trip you up if you’re not prepared. In this post, we’ll walk through: What a normal AG looks like [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/contained-availability-groups-in-sql-server-2022-what-you-need-to-know/">Contained Availability Groups in SQL Server 2022: What You Need to Know</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><em><span class="s1">Overview</span></em></h1>
<p class="p3"><em><strong><span class="s2">One of the more intriguing features introduced in SQL Server 2022 is </span><span class="s3">Contained Availability Groups (AGs)</span><span class="s2">. At first glance, they look very similar to traditional AGs — but there are some key differences that can trip you up if you’re not prepared.</span></strong></em></p>
<p class="p1"><span class="s1">In this post, we’ll walk through:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">What a normal AG looks like (and its limitations)</span></p>
</li>
<li>
<p class="p1"><span class="s1">How Contained AGs change the game</span></p>
</li>
<li>
<p class="p1"><span class="s1">The pitfalls we’ve seen in real-world use</span></p>
</li>
<li>
<p class="p1"><span class="s1">Practical solutions if you run into these issues</span></p>
</li>
</ul>
<h2><em><span class="s1">A Quick Refresher: Always On Availability Groups</span></em></h2>
<p class="p3"><span class="s2">Availability Groups, introduced back in SQL Server 2012, are Microsoft’s built-in solution for </span><span class="s3">high availability and disaster recovery</span><span class="s2">. They let you replicate databases across multiple instances, managed by a Windows Server Failover Cluster (WSFC).</span></p>
<p class="p1"><span class="s1">Key benefits:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">Seamless failover between primary and secondary nodes</span></p>
</li>
<li>
<p class="p1"><span class="s1">Read-only replicas to offload workloads</span></p>
</li>
<li>
<p class="p1"><span class="s1">The ability to perform backups and DBCC checks on secondaries, easing the load on your primary</span></p>
</li>
</ul>
<p class="p1"><span class="s1">But AGs have always had one big limitation: </span><span class="s2">only user databases are replicated.</span><span class="s1"> System databases like </span><span class="s3">msdb</span><span class="s1"> and </span><span class="s3">master</span><span class="s1"> stay local to each node.</span></p>
<p class="p1"><span class="s1">Why does that matter? Think about Agent jobs:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">You have to manually install jobs on every node (and keep them in sync).</span></p>
</li>
<li>
<p class="p1"><span class="s1">Jobs need to be AG-aware — otherwise they might try to run against a read-only secondary.</span></p>
</li>
<li>
<p class="p1"><span class="s1">Job history lives only on the current primary, which makes tracking a little messy.</span></p>
</li>
</ul>
<p class="p1"><span class="s1">For years, DBAs have worked around these issues, but it’s always been a pain point.</span></p>
<h2><em><span class="s1">*Enter Contained Availability Groups*</span></em></h2>
<p class="p3"><span class="s2">Contained AGs look and act like traditional AGs, but with one important twist: they include their own </span><span class="s3">contained system databases.</span></p>
<p class="p3"><span class="s2">For example, if you create a Contained AG called </span><span class="s4">MyAg</span><span class="s2">, you’ll see:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">MyAg_master</span></p>
</li>
<li>
<p class="p1"><span class="s1">MyAg_msdb</span></p>
</li>
</ul>
<p class="p3"><span class="s2">These are replicated to all nodes in the AG, just like user databases.</span></p>
<h3><span class="s1">Why this matters</span></h3>
<ul>
<li>
<p class="p1"><span class="s1">Agent jobs now live inside the contained msdb.</span><span class="s2"> No more duplicating jobs on every node.</span></p>
</li>
<li>
<p class="p1"><span class="s1">Job history is replicated.</span><span class="s2"> After failover, you don’t lose tracking.</span></p>
</li>
<li>
<p class="p1"><span class="s1">System tables travel with the AG.</span><span class="s2"> Everything stays consistent across nodes.</span></p>
</li>
</ul>
<p class="p3"><span class="s2">That’s a big win for manageability and one of the headline features of SQL Server 2022.</span></p>
<h2><em><span class="s1">Gotchas Seen in the Wild</span></em></h2>
<p class="p3"><span class="s2">As with most “new shiny” features, Contained AGs aren’t a silver bullet. There&#8217;s a few things to watch out for:</span></p>
<ol start="1">
<li>
<p class="p1"><span class="s1">No more job offloading to secondaries.</span><span class="s2"> Jobs inside the contained msdb only run on the primary. If you used secondaries to handle CHECKDB or backups, you’ll need to rethink.</span></p>
</li>
<li>
<p class="p1"><span class="s1">Replication is not supported.</span><span class="s2"> If transactional replication is part of your design, contained AGs may not be an option.</span></p>
</li>
<li>
<p class="p1"><span class="s1">Seeding is clunky.</span><span class="s2"> The GUI doesn’t support manual seeding yet. You’ll need to fall back to T-SQL.</span></p>
</li>
<li>
<p class="p1"><span class="s1">No distributed AG support.</span><span class="s2"> If you rely on DAGs for hybrid or geo-distributed HA, contained AGs won’t help.</span></p>
</li>
<li>
<p class="p1"><span class="s1">Confusion with system databases.</span><span class="s2"> When you connect to the listener, the </span><span class="s3">msdb</span><span class="s2"> and </span><span class="s3">master</span><span class="s2"> you see belong to the contained AG — not the local system copies.</span></p>
</li>
</ol>
<p>&nbsp;</p>
<h2><em><span class="s1">Workarounds &amp; Solutions</span></em></h2>
<h3><span class="s1">For Agent Jobs</span></h3>
<p class="p3"><span class="s2">If you truly need jobs to run on a secondary node, you still can — but you’ll have to install them in the </span><span class="s3">local msdb</span><span class="s2"> outside the contained AG. That means:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">Jobs must be AG-aware again</span></p>
</li>
<li>
<p class="p1"><span class="s1">You’ll have to maintain them separately</span></p>
</li>
</ul>
<p class="p3"><span class="s2">It’s not elegant, but it gets the job done.</span></p>
<h3><span class="s1">For System Databases</span></h3>
<p class="p3"><span class="s2">This is case-by-case. If your code doesn’t touch </span><span class="s4">master</span><span class="s2"> or </span><span class="s4">msdb</span><span class="s2">, you’re fine. But if you do, you’ll need to carefully evaluate whether those objects belong in the contained copies or the traditional system DBs.</span></p>
<p class="p3"><span class="s2">Remember: you can query both contained and local msdbs — just make sure your scripts account for both.</span></p>
<p>&nbsp;</p>
<h2><em><span class="s1">Final Word</span></em></h2>
<p class="p3"><span class="s2">Contained Availability Groups solve one of the long-standing headaches of AGs — managing Agent jobs across nodes. But they come with trade-offs that every DBA needs to be aware of.</span></p>
<p class="p3"><span class="s2">Test carefully. Know where your jobs live. And make sure your disaster recovery plan accounts for these differences.</span></p>
<p class="p3"><span class="s2">If you want to see them in action, check out our webinar on SQL Server 2022 features, where we demo Contained AGs in detail.</span></p>
<p>The post <a href="https://sqlsolutionsgroup.com/contained-availability-groups-in-sql-server-2022-what-you-need-to-know/">Contained Availability Groups in SQL Server 2022: What You Need to Know</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/contained-availability-groups-in-sql-server-2022-what-you-need-to-know/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Understanding Wait Stats in SQL Server: A Practical Guide</title>
		<link>https://sqlsolutionsgroup.com/understanding-wait-stats-in-sql-server-a-practical-guide/</link>
					<comments>https://sqlsolutionsgroup.com/understanding-wait-stats-in-sql-server-a-practical-guide/#respond</comments>
		
		<dc:creator><![CDATA[A.K. Gonzalez]]></dc:creator>
		<pubDate>Thu, 14 Aug 2025 20:47:34 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#parallelism #azure]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatino]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlimerbymay]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#sqlite3]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlrun]]></category>
		<category><![CDATA[#sqlsaturday2017]]></category>
		<category><![CDATA[#sqlsatvienna]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLserver2012]]></category>
		<category><![CDATA[#sqlserver2014]]></category>
		<category><![CDATA[#sqlserver2017]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLServeronLinux]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7293</guid>

					<description><![CDATA[<p>When working with SQL Server, one of the best tools DBA&#8217;s can use for diagnosing performance issues is wait statistics (or wait stats for short). But what exactly are they, and how are you supposed to interpret them? In this guide, I’ll break down what wait stats are, why they matter, and how to use [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/understanding-wait-stats-in-sql-server-a-practical-guide/">Understanding Wait Stats in SQL Server: A Practical Guide</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="p1" style="text-align: left;"><strong><em><span class="s1">When working with SQL Server, one of the best tools DBA&#8217;s can use for diagnosing performance issues is </span><span class="s2">wait statistics</span><span class="s1"> (or </span><span class="s3">wait stats</span><span class="s1"> for short). </span></em></strong><strong><em><span class="s1">But what exactly are they, and how are you supposed to interpret them? </span></em></strong><strong><em><span class="s1">In this guide, I’ll break down what wait stats are, why they matter, and how to use them to troubleshoot performance problems. </span></em></strong></p>
<p>Thank you to our SQL Server Expert and Senior DBA, Rich Benner for providing the valuable Technical info behind this blog. To learn more about Wait Statistics from Rich, check out his recent <a href="https://www.youtube.com/watch?v=rw9il1pJtdI&amp;t=1s">webinar</a> and two new YouTube videos- an <a href="https://www.youtube.com/watch?v=IwXcIoEnauE&amp;t=518s">explainer</a> and a <a href="https://www.youtube.com/watch?v=6BBhQyKxMSQ">demo</a>, on our channel.</p>
<h2><span class="s1">What Are Wait Stats?</span></h2>
<p class="p3"><span class="s2">Anytime something inside Microsoft SQL Server is </span><span class="s3">waiting</span><span class="s2"> for a resource, it’s assigned a wait stat. For </span><span class="s2">example: </span></p>
<ul>
<li>
<p class="p1"><span class="s1">A query waiting for CPU or memory resources</span></p>
</li>
<li>
<p class="p1"><span class="s1">A query waiting to access a data object like a data page or table</span></p>
</li>
<li>
<p class="p1"><span class="s1">An internal SQL Server process waiting to complete a task</span></p>
</li>
</ul>
<p class="p3"><span class="s2">Some waits are completely normal. For example, in </span><span class="s3">Availability Groups</span><span class="s2">, certain threads simply wait to synchronize data with secondary nodes. That’s expected behavior and not necessarily a sign of trouble.</span></p>
<h3><span class="s1">Key Things to Know About Wait Stats</span></h3>
<ol start="1">
<li>
<p class="p1"><span class="s1">They’re cumulative</span><span class="s2"> – Wait times are aggregated since the last time the data was cleared, usually at the last server restart (though other events can reset them).</span></p>
</li>
<li>
<p class="p1"><span class="s1">They measure time in seconds or milliseconds</span><span class="s2"> – depending on the stat you’re viewing.</span></p>
</li>
<li>
<p class="p1"><span class="s1">They’re invaluable for troubleshooting</span><span class="s2"> – By looking at wait stats, you can quickly zero in on what’s slowing down your system.</span></p>
</li>
</ol>
<h3><span class="s1">How to Find Wait Stats</span></h3>
<p class="p3"><span class="s2">The primary DMV for retrieving wait stats is:</span></p>
<p><strong>SELECT * FROM sys.dm_os_wait_stats;</strong></p>
<p class="p1"><span class="s1">On a SQL Server 2022 instance, you might see over </span><span class="s2">1,300 different wait types</span><span class="s1">. Even seasoned DBAs only know a fraction of them by heart. </span><span class="s1">That’s where resources like the </span><span class="s2">SQLskills Wait Types Library</span><span class="s1"> come in handy. This community-maintained list covers around 95% of known waits, detailing whether they’re benign or problematic and suggesting possible resolutions.</span></p>
<h3><span class="s1">Useful Tools for Analyzing Wait Stats</span></h3>
<ul>
<li>
<p class="p1"><span class="s1"><a href="https://whoisactive.com/">sp_WhoIsActive</a></span><span class="s2"> – An enhanced version of </span><span class="s3">sp_who2</span><span class="s2"> that shows what queries are running, their process IDs, and any current waitss.</span></p>
</li>
<li>
<p class="p1"><span class="s1"><a href="https://www.brentozar.com/blitz/">sp_BlitzFirst</a></span><span class="s2"> – A free tool that captures your current wait stats along with other diagnostic information.</span></p>
</li>
<li>
<p class="p1"><span class="s1">Custom Queries</span><span class="s2"> – Many DBAs have their own scripts for retrieving &amp; formatting wait stats. A quick search for “Wait Stats query” will yield plenty of examples.</span></p>
</li>
</ul>
<h3><span class="s1">The Top 5 Most Common Wait Types </span></h3>
<h3><span class="s1">1. </span><span class="s1">LCK_</span><span class="s1">* – Lock Waits</span></h3>
<p class="p3"><span class="s2">Occurs when one query locks a resource (e.g., a data page) and another query has to wait for it to be released. </span><span class="s2">Example: An </span><span class="s3">UPDATE</span><span class="s2"> query locks a row, preventing a </span><span class="s3">SELECT</span><span class="s2"> query from reading it until the update completes.</span></p>
<h3><span class="s1">2. </span></h3>
<h3><span class="s1">CXPACKET / CXCONSUMER</span></h3>
<h3><span class="s1"> – Parallelism Waits</span></h3>
<p class="p3"><span class="s2">Happens when a query is split across multiple CPU cores. If one thread finishes before the others, it waits for the slowest one to catch up. </span><span class="s2">Normal in moderation, but excessive CX waits can indicate an inefficient parallelism setup.</span></p>
<h3><span class="s1">3. </span></h3>
<h3><span class="s1">ASYNC_NETWORK_IO </span></h3>
<h3><span style="font-size: 16px;">– Application Processing Delays</span></h3>
<p class="p3"><span class="s2">Indicates SQL Server has finished processing results but is waiting for the application to consume them. </span><span class="s2">Often caused by applications retrieving rows one at a time instead of in batches.</span></p>
<h3><span class="s1">4. </span></h3>
<h3><span class="s1">LATCH_</span><span class="s1">* and </span><span class="s1">PAGE_LATCH_</span><span class="s1">* – Structure &amp; Page Locks</span></h3>
<ul>
<li>
<p class="p1"><span class="s1">LATCH_</span><span class="s2">*: Locks on internal structures (not data pages)</span></p>
</li>
<li>
<p class="p1"><span class="s1">PAGE_LATCH_</span><span class="s2">*: Locks on data pages themselves. </span><span class="s2">These can signal contention in memory structures or data access patterns.</span></p>
</li>
</ul>
<h3><span class="s1">5. </span></h3>
<h3><span class="s1">WRITELOG</span></h3>
<h3><span class="s1"> – Transaction Log Bottlenecks</span></h3>
<p class="p3"><span class="s2">This occurs when SQL Server is waiting to write to the transaction log. </span><span class="s2">Common causes include slow disk performance, excessive write activity, or log file contention.</span></p>
<p>&nbsp;</p>
<h2><span class="s1">Why Wait Stats Matter</span></h2>
<p class="p3"><span class="s2">Wait stats provide a </span><span class="s3">high-level overview</span><span class="s2"> of where SQL Server is spending its time waiting.</span></p>
<p class="p3"><span class="s2">They help you answer questions like:</span></p>
<ul>
<li>
<p class="p1"><span class="s1">Is my performance issue due to locking, disk speed, or parallelism?</span></p>
</li>
<li>
<p class="p1"><span class="s1">Is the problem in SQL Server or in the application consuming data?</span></p>
</li>
<li>
<p class="p1"><span class="s1">Are my hardware resources (CPU, memory, storage) configured optimally?</span></p>
</li>
</ul>
<p class="p3"><span class="s2">By combining wait stats with tools like </span><span class="s4">sp_WhoIsActive</span><span class="s2"> and </span><span class="s4">sp_BlitzFirst</span><span class="s2">, you can pinpoint bottlenecks faster and focus your tuning efforts where they’ll make the biggest impact. </span><span class="s1">Not all waits are bad — many are just part of normal SQL Server operations. The key is knowing </span><span class="s2">which waits are worth investigating</span><span class="s1"> and which you can safely ignore. </span><span class="s1">With a solid understanding of wait stats, you’ll be better equipped to diagnose issues, improve query performance, and keep your SQL Server running smoothly.</span></p>
<p class="p1"><strong><em><span class="s1">Need help interpreting your wait stats?</span></em></strong></p>
<p class="p1"><span class="s2">At SQL Solutions Group, we work with clients every day to identify and fix performance issues. <a href="https://sqlsolutionsgroup.com/contact/">Contact us</a> for a health check and start optimizing your environment today.</span></p>
<p>The post <a href="https://sqlsolutionsgroup.com/understanding-wait-stats-in-sql-server-a-practical-guide/">Understanding Wait Stats in SQL Server: A Practical Guide</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/understanding-wait-stats-in-sql-server-a-practical-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Working with Customer Requirements: Is the Customer Always Right?</title>
		<link>https://sqlsolutionsgroup.com/working-with-customer-requirements-is-the-customer-always-right/</link>
					<comments>https://sqlsolutionsgroup.com/working-with-customer-requirements-is-the-customer-always-right/#respond</comments>
		
		<dc:creator><![CDATA[Jason Russell]]></dc:creator>
		<pubDate>Tue, 17 Jun 2025 09:33:00 +0000</pubDate>
				<category><![CDATA[SQL Group]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatino]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlimerbymay]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#sqlite3]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlrun]]></category>
		<category><![CDATA[#sqlsaturday2017]]></category>
		<category><![CDATA[#sqlsatvienna]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLserver2012]]></category>
		<category><![CDATA[#sqlserver2014]]></category>
		<category><![CDATA[#sqlserver2017]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLServeronLinux]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=5232</guid>

					<description><![CDATA[<p>As SQL Server consultants, we’re always working with customer requirements and tackling diverse database needs, from the mundane to the critical. Clients turn to us for various reasons—maybe they don’t have the personnel, maybe the challenge is beyond their skill—but regardless of the circumstance, without question we have more SQL Server knowledge than they do. [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/working-with-customer-requirements-is-the-customer-always-right/">Working with Customer Requirements: Is the Customer Always Right?</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="356" class="wp-image-5230" src="https://sqlsolutionsgroup.com/wp-content/uploads/2020/09/Define_problem-1024x356.png" alt="Working with Customer Requirements" srcset="https://sqlsolutionsgroup.com/wp-content/uploads/2020/09/Define_problem-1024x356.png 1024w, https://sqlsolutionsgroup.com/wp-content/uploads/2020/09/Define_problem-300x104.png 300w, https://sqlsolutionsgroup.com/wp-content/uploads/2020/09/Define_problem-768x267.png 768w, https://sqlsolutionsgroup.com/wp-content/uploads/2020/09/Define_problem.png 1207w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>

<p>As SQL Server consultants, we’re always working with customer requirements and tackling diverse database needs, from the mundane to the critical. Clients turn to us for various reasons—maybe they don’t have the personnel, maybe the challenge is beyond their skill—but regardless of the circumstance, without question we have more SQL Server knowledge than they do.</p>
<p>That probably doesn’t read very well, and it’s not meant as a knock on our clients. But, if it weren’t true, they wouldn’t hire us, right?</p>
<p>Back to working with customer requirements. I <a href="https://sqlsolutionsgroup.com/fixing-sql-problems-do-you-know-too-much/">recently blogged</a> about times when too much knowledge could impede problem solving. This sparked further internal discussions about potentially uncomfortable situations where the customer provide solutions, especially when the problem is ill-defined. (This is a plate of spaghetti&#8230;let&#8217;s see if it will stick to the wall). This invariably leads to lots of wheel spinning. Here&#8217;s <a href="https://theoatmeal.com/comics/design_hell">a comical look</a> at how this might go.</p>
<p>In contrast, when the client provides <strong>accurate business requirements</strong>, we can get right down to brass tacks. </p>
<h3>Acting like a Consultant</h3>
<p>This is where soft skills are so important. You clearly don’t want to alienate or offend a client. And, after all, you’re working with their data and their systems. On the other hand, if they could have solved it, they wouldn’t have called you. The challenge of the client presenting consultants—a team of experts—with a solution to an urgent problem is that the identified problem may very well <strong>not be the root cause</strong> of the issue and even if it is, the proposed solutions may not be the best way to solve the problem. </p>
<p>So how do we, at SSG, handle “solutions” that are brought to us when a customer has an urgent crisis or emergency? First, we hope that our customers realize that SQL Server is what we do day in and day out. That, collectively, there is more than <span style="color: #000000;"><b>95 </b></span>years of SQL Server experience at SSG. We’ve seen it all and done it all, which is why our clients trust us to fix their problems.  </p>
<p>Secondly, we take the time to talk to our customers and listen to their experiences so we can get to the highly useful accurate business requirements. What problem do they perceive, and what are the symptoms? What is the pain that motivated them to seek out a team with more knowledge and experience with SQL? Did they develop a solution? </p>
<p>When a customer comes to us with a requirement for solving a problem, we have to step back and evaluate if the customer even wants us to make sure they have identified the real problem. Sometimes, customers really do just want us to quickly throw together their solution and worry about the next problem later. Honestly, we do that sometimes. We let customers know that there may be a bigger issue, that there may be other things that arise later. Or, that ultimately down the road they will run into more problems. If that is the path they choose, that’s OK as well. </p>
<h3>Getting to the Solution</h3>
<blockquote>
<p>Well I tell them there&#8217;s no problems&#8230;only solutions.</p>
<p>— John Lennon</p>
</blockquote>
<p>Ultimately, if you want to get your problem solved quickly, correctly, and efficiently, you don’t need to spend a ton of time creating a list of requirements. Bring us the problem, and let us work with you as we make sure the real problem has been identified and then develop a robust solution. In this sense, it doesn’t really matter if the customer is always right. It only matters if we can come to grips with the problem and find the appropriate solution in short order.</p>
<p>We&#8217;ll come back to this issue again in the near future to address proper collection of requirements. </p><p>The post <a href="https://sqlsolutionsgroup.com/working-with-customer-requirements-is-the-customer-always-right/">Working with Customer Requirements: Is the Customer Always Right?</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/working-with-customer-requirements-is-the-customer-always-right/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Safeguarding Your Data: Navigating SQL Backup, Compliance, Maintenance, and Support Challenges</title>
		<link>https://sqlsolutionsgroup.com/safeguarding-your-data-navigating-sql-backup-compliance-maintenance-and-support-challenges/</link>
					<comments>https://sqlsolutionsgroup.com/safeguarding-your-data-navigating-sql-backup-compliance-maintenance-and-support-challenges/#respond</comments>
		
		<dc:creator><![CDATA[A.K. Gonzalez]]></dc:creator>
		<pubDate>Fri, 30 May 2025 19:36:51 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[#microsftcertifedmaster]]></category>
		<category><![CDATA[#microsftpartner]]></category>
		<category><![CDATA[#parallelism #azure]]></category>
		<category><![CDATA[#SQLAB]]></category>
		<category><![CDATA[#SQlatino]]></category>
		<category><![CDATA[#SQlatinoamerica]]></category>
		<category><![CDATA[#sqldatabase]]></category>
		<category><![CDATA[#sqldeveloper]]></category>
		<category><![CDATA[#SQLgroupie]]></category>
		<category><![CDATA[#sqlimer]]></category>
		<category><![CDATA[#sqlimerbymay]]></category>
		<category><![CDATA[#sqlinjection]]></category>
		<category><![CDATA[#sqlinternals]]></category>
		<category><![CDATA[#sqlite]]></category>
		<category><![CDATA[#sqlite3]]></category>
		<category><![CDATA[#SQLLearning]]></category>
		<category><![CDATA[#SQLMagazine]]></category>
		<category><![CDATA[#sqlmanagementstudio]]></category>
		<category><![CDATA[#sqlmanager]]></category>
		<category><![CDATA[#Sqlmap]]></category>
		<category><![CDATA[#sqlrun]]></category>
		<category><![CDATA[#sqlsaturday2017]]></category>
		<category><![CDATA[#sqlsatvienna]]></category>
		<category><![CDATA[#sqlserver]]></category>
		<category><![CDATA[#SQLserver2012]]></category>
		<category><![CDATA[#sqlserver2014]]></category>
		<category><![CDATA[#sqlserver2017]]></category>
		<category><![CDATA[#sqlserver2022]]></category>
		<category><![CDATA[#SQLServeronLinux]]></category>
		<category><![CDATA[#SQLsolutionsgroup]]></category>
		<category><![CDATA[#SQLTraining]]></category>
		<category><![CDATA[#SQLYog]]></category>
		<category><![CDATA[Christmas]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLPASS]]></category>
		<category><![CDATA[SQLSaturday]]></category>
		<category><![CDATA[SSG]]></category>
		<guid isPermaLink="false">https://sqlsolutionsgroup.com/?p=7257</guid>

					<description><![CDATA[<p>As businesses become increasingly data-driven, the role of SQL databases has become critical to day-to-day operations. Yet, many organizations underestimate the ongoing demands of managing these systems securely and efficiently. In this article, we dive into four often overlooked—but vital—areas of SQL database management: backup and recovery, compliance and governance, maintenance and upgrades, and the [&#8230;]</p>
<p>The post <a href="https://sqlsolutionsgroup.com/safeguarding-your-data-navigating-sql-backup-compliance-maintenance-and-support-challenges/">Safeguarding Your Data: Navigating SQL Backup, Compliance, Maintenance, and Support Challenges</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="7257" class="elementor elementor-7257" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-33a15772 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="33a15772" data-element_type="section" data-e-type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-28a67839" data-id="28a67839" data-element_type="column" data-e-type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-39cc616 elementor-widget elementor-widget-text-editor" data-id="39cc616" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p data-start="191" data-end="633">As businesses become increasingly data-driven, the role of SQL databases has become critical to day-to-day operations. Yet, many organizations underestimate the ongoing demands of managing these systems securely and efficiently. In this article, we dive into four often overlooked—but vital—areas of SQL database management: backup and recovery, compliance and governance, maintenance and upgrades, and the need for skilled technical support.</p>
<h3 data-start="635" data-end="691">1. Backup and Recovery: Preparing for the Unexpected</h3>
<p data-start="693" data-end="767">Every company <em data-start="707" data-end="715">thinks</em> they have a backup plan—until something goes wrong.</p>
<p data-start="769" data-end="963">Backups are your first line of defense against data loss caused by system failures, human error, cyberattacks, or natural disasters. But it’s not enough to just schedule backups and forget them.</p>
<p data-start="965" data-end="984"><strong data-start="965" data-end="983">Key challenges</strong>:</p>
<ul data-start="985" data-end="1202">
<li data-start="985" data-end="1070">
<p data-start="987" data-end="1070"><strong data-start="987" data-end="1019">Incomplete backup strategies</strong> (e.g., only full backups with no transaction logs)</p>
</li>
<li data-start="1071" data-end="1121">
<p data-start="1073" data-end="1121"><strong data-start="1073" data-end="1110">Backups stored on the same server</strong> that fails</p>
</li>
<li data-start="1122" data-end="1202">
<p data-start="1124" data-end="1202"><strong data-start="1124" data-end="1147">Unverified restores</strong>—you don’t know if the backups work until you need them</p>
</li>
</ul>
<p data-start="1204" data-end="1223"><strong data-start="1204" data-end="1222">Best practices</strong>:</p>
<ul data-start="1224" data-end="1439">
<li data-start="1224" data-end="1297">
<p data-start="1226" data-end="1297">Use a layered approach: full, differential, and transaction log backups</p>
</li>
<li data-start="1298" data-end="1372">
<p data-start="1300" data-end="1372">Store backups in geographically redundant locations, including the cloud</p>
</li>
<li data-start="1373" data-end="1439">
<p data-start="1375" data-end="1439">Regularly test restores—don’t assume your backups are functional</p>
</li>
</ul>
<p data-start="1441" data-end="1575">A tested, well-architected backup and recovery plan ensures business continuity and protects your company from catastrophic data loss.</p>
<h3 data-start="1577" data-end="1637">2. Compliance and Governance: Meeting Industry Standards</h3>
<p data-start="1639" data-end="1756">With growing scrutiny around data privacy and security, compliance isn’t optional—it’s a legal and ethical necessity.</p>
<p data-start="1758" data-end="1780"><strong data-start="1758" data-end="1779">Common challenges</strong>:</p>
<ul data-start="1781" data-end="1947">
<li data-start="1781" data-end="1860">
<p data-start="1783" data-end="1860">Navigating complex regulations like <strong data-start="1819" data-end="1827">GDPR</strong>, <strong data-start="1829" data-end="1838">HIPAA</strong>, <strong data-start="1840" data-end="1847">SOX</strong>, or <strong data-start="1852" data-end="1860">CCPA</strong></p>
</li>
<li data-start="1861" data-end="1909">
<p data-start="1863" data-end="1909">Inadequate <strong data-start="1874" data-end="1890">audit trails</strong> or change tracking</p>
</li>
<li data-start="1910" data-end="1947">
<p data-start="1912" data-end="1947">Poor <strong data-start="1917" data-end="1947">role-based access controls</strong></p>
</li>
</ul>
<p data-start="1949" data-end="1976"><strong data-start="1949" data-end="1975">Why governance matters</strong>:</p>
<ul data-start="1977" data-end="2138">
<li data-start="1977" data-end="2034">
<p data-start="1979" data-end="2034">It builds customer trust and safeguards your reputation</p>
</li>
<li data-start="2035" data-end="2083">
<p data-start="2037" data-end="2083">It protects you from legal penalties and fines</p>
</li>
<li data-start="2084" data-end="2138">
<p data-start="2086" data-end="2138">It supports internal transparency and accountability</p>
</li>
</ul>
<p data-start="2140" data-end="2307">A mature SQL environment includes automated audit logs, encryption protocols, clearly defined user roles, and documented policies to handle sensitive data responsibly.</p>
<h3 data-start="2309" data-end="2365">3. Maintenance and Upgrades: Avoiding Technical Debt</h3>
<p data-start="2367" data-end="2514">SQL Server isn’t a “set it and forget it” system. Ongoing maintenance is essential to keeping your environment secure, efficient, and future-ready.</p>
<p data-start="2516" data-end="2546"><strong data-start="2516" data-end="2545">Risks of poor maintenance</strong>:</p>
<ul data-start="2547" data-end="2772">
<li data-start="2547" data-end="2639">
<p data-start="2549" data-end="2639">Performance degradation over time due to bloated indexes, fragmentation, or outdated stats</p>
</li>
<li data-start="2640" data-end="2701">
<p data-start="2642" data-end="2701">Missed patches that leave you open to known vulnerabilities</p>
</li>
<li data-start="2702" data-end="2772">
<p data-start="2704" data-end="2772">Falling behind on SQL Server versions, creating compatibility issues</p>
</li>
</ul>
<p data-start="2774" data-end="2805"><strong data-start="2774" data-end="2804">Smart maintenance includes</strong>:</p>
<ul data-start="2806" data-end="3012">
<li data-start="2806" data-end="2848">
<p data-start="2808" data-end="2848">Regular index and statistics maintenance</p>
</li>
<li data-start="2849" data-end="2899">
<p data-start="2851" data-end="2899">Applying critical patches and cumulative updates</p>
</li>
<li data-start="2900" data-end="2953">
<p data-start="2902" data-end="2953">Scheduled downtime for proactive performance tuning</p>
</li>
<li data-start="2954" data-end="3012">
<p data-start="2956" data-end="3012">Planning for version upgrades before end-of-life support</p>
</li>
</ul>
<p data-start="3014" data-end="3121">Ignoring maintenance is like skipping oil changes—eventually, your engine (or server) will grind to a halt.</p>
<h3 data-start="3123" data-end="3191">4. Technical Support and Expertise: When You Need a Second Brain</h3>
<p data-start="3193" data-end="3317">Even with strong internal IT teams, SQL Server can throw curveballs. That’s where expert-level support makes the difference.</p>
<p data-start="3319" data-end="3346"><strong data-start="3319" data-end="3345">Why companies struggle</strong>:</p>
<ul data-start="3347" data-end="3530">
<li data-start="3347" data-end="3417">
<p data-start="3349" data-end="3417">DBAs wear too many hats and don’t have time for deep problem-solving</p>
</li>
<li data-start="3418" data-end="3475">
<p data-start="3420" data-end="3475">Complex issues require years of SQL-specific experience</p>
</li>
<li data-start="3476" data-end="3530">
<p data-start="3478" data-end="3530">Emergency situations demand fast, accurate solutions</p>
</li>
</ul>
<p data-start="3532" data-end="3567"><strong data-start="3532" data-end="3566">Benefits of expert SQL support</strong>:</p>
<ul data-start="3568" data-end="3757">
<li data-start="3568" data-end="3624">
<p data-start="3570" data-end="3624">Quick diagnosis of performance or configuration issues</p>
</li>
<li data-start="3625" data-end="3692">
<p data-start="3627" data-end="3692">Help with high-availability setups and disaster recovery planning</p>
</li>
<li data-start="3693" data-end="3757">
<p data-start="3695" data-end="3757">Optimization strategies tailored to your business and workload</p>
</li>
</ul>
<p data-start="3759" data-end="3882">Partnering with seasoned SQL professionals gives your team the support it needs—without the cost of a full-time specialist.</p>
<hr data-start="3884" data-end="3887" />
<h2 data-start="3889" data-end="3906">Final Thoughts</h2>
<p data-start="3908" data-end="4224">SQL Server is a powerful engine, but like any high-performance machine, it requires care, precision, and expertise to run at its best. By prioritizing backup and recovery, ensuring compliance and governance, staying on top of maintenance, and investing in expert support, you can protect your data—and your business.</p>
<p data-start="3908" data-end="4224"> </p>
<p data-start="3908" data-end="4224">SQL Backup and Recovery, Database Compliance, SQL Governance, SQL Server Maintenance, SQL Upgrades, SQL Technical Support, SQL DBA Services, SQL Performance, SQL Disaster Recovery, Enterprise Database Management</p>


<p></p>
								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://sqlsolutionsgroup.com/safeguarding-your-data-navigating-sql-backup-compliance-maintenance-and-support-challenges/">Safeguarding Your Data: Navigating SQL Backup, Compliance, Maintenance, and Support Challenges</a> appeared first on <a href="https://sqlsolutionsgroup.com">SQL Solutions Group</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlsolutionsgroup.com/safeguarding-your-data-navigating-sql-backup-compliance-maintenance-and-support-challenges/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
