<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SQL Maniak</title><link>https://sqlmaniak.blog/en/</link><description>Recent content on SQL Maniak</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 04 Nov 2026 08:00:00 +0100</lastBuildDate><atom:link href="https://sqlmaniak.blog/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Merging Tables Without Downtime: When Two Data Models Become One</title><link>https://sqlmaniak.blog/en/posts/merging-tables-without-downtime/</link><pubDate>Wed, 04 Nov 2026 08:00:00 +0100</pubDate><guid>https://sqlmaniak.blog/en/posts/merging-tables-without-downtime/</guid><description>&lt;p&gt;Splitting a table is one direction of schema evolution. Sometimes, after years of development, we need to do the opposite: combine several structures into a single model.&lt;/p&gt;&#10;&lt;h2 id="example"&gt;Example&lt;/h2&gt;&#10;&lt;p&gt;We have:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RetailCustomer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BusinessCustomer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;And we want to move to:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Customer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="the-new-model"&gt;The New Model&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CustomerV2&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CustomerId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bigint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CustomerType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DisplayName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TaxId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="map-the-semantics-first"&gt;Map the Semantics First&lt;/h2&gt;&#10;&lt;p&gt;Merging tables is not simply a matter of running &lt;code&gt;UNION ALL&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Splitting a Table Without a Big Bang: From One Data Model to Two</title><link>https://sqlmaniak.blog/en/posts/split-table-without-big-bang/</link><pubDate>Wed, 28 Oct 2026 08:00:00 +0100</pubDate><guid>https://sqlmaniak.blog/en/posts/split-table-without-big-bang/</guid><description>&lt;p&gt;Imagine that, over the years, a &lt;code&gt;Customer&lt;/code&gt; table has grown to contain dozens of columns.&lt;/p&gt;&#10;&lt;p&gt;We want to move some of the address information into a separate table.&lt;/p&gt;&#10;&lt;h2 id="the-new-table"&gt;The New Table&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CustomerAddress&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CustomerId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AddressType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AddressLine1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;City&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PostalCode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nvarchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CONSTRAINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PK_CustomerAddress&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CustomerId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AddressType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="step-1--introduce-the-new-structure-without-removing-the-old-one"&gt;Step 1 — Introduce the New Structure Without Removing the Old One&lt;/h2&gt;&#10;&lt;p&gt;The existing columns remain in place. The new table extends the data model.&lt;/p&gt;</description></item><item><title>About</title><link>https://sqlmaniak.blog/en/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sqlmaniak.blog/en/about/</guid><description>&lt;h2 id="hi-im-marcin-"&gt;Hi, I&amp;rsquo;m Marcin 👋&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;m a DBA and engineer working with &lt;strong&gt;SQL Server 2016–2022&lt;/strong&gt;, including Query Store, Extended Events, Always On, performance tuning, and security.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m especially interested in monitoring with Grafana, InfluxDB, and Telegraf, automating administrative tasks with PowerShell, and sharing practical technical knowledge.&lt;/p&gt;&#10;&lt;h3 id="what-youll-find-on-this-blog"&gt;What you&amp;rsquo;ll find on this blog&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;📊 Practical examples of DMVs, Extended Events, and query tuning&lt;/li&gt;&#10;&lt;li&gt;🛡️ Security checklists and operational best practices&lt;/li&gt;&#10;&lt;li&gt;🔧 Dashboards and downloadable scripts&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="technical-environment"&gt;Technical environment&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;🔧 Production and lab work: Windows Server 2022, SQL Server 2022 Developer, Docker Desktop&lt;/li&gt;&#10;&lt;li&gt;📊 Monitoring: InfluxDB 2.x, Telegraf, Grafana&lt;/li&gt;&#10;&lt;li&gt;🧰 Tools: VS Code, PowerShell, GitHub Actions&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="get-in-touch"&gt;Get in touch&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;📧 &lt;a href="mailto:marcin.pytlik@pracowniait.com"&gt;marcin.pytlik@pracowniait.com&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;💼 &lt;a href="https://www.linkedin.com/in/sqlmaniak"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;💻 &lt;a href="https://github.com/marcinpytlik/SQLManiak"&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;When an article includes downloadable materials, you&amp;rsquo;ll find them in the &lt;strong&gt;Downloads&lt;/strong&gt; section at the end of that article.&lt;/p&gt;</description></item><item><title>Contact</title><link>https://sqlmaniak.blog/en/contact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sqlmaniak.blog/en/contact/</guid><description>&lt;h2 id="send-a-message"&gt;Send a message&lt;/h2&gt;&#10;&lt;p&gt;Use this form to get in touch about SQL Server, technical questions, training, or consulting.&lt;/p&gt;&#10;&lt;form class="contact" action="https://formspree.io/f/mzzjpewn" method="POST"&gt;&#10; &lt;input type="hidden" name="_subject" value="New message from SQLManiak (EN)"&gt;&#10; &lt;input type="text" name="_gotcha" style="display:none" tabindex="-1" autocomplete="off" aria-hidden="true"&gt;&#10; &lt;label&gt;Name&#10; &lt;input type="text" name="name" autocomplete="name" required&gt;&#10; &lt;/label&gt;&#10; &lt;label&gt;Email&#10; &lt;input type="email" name="_replyto" autocomplete="email" required&gt;&#10; &lt;/label&gt;&#10; &lt;label&gt;Message&#10; &lt;textarea name="message" rows="6" required&gt;&lt;/textarea&gt;&#10; &lt;/label&gt;&#10; &lt;p class="meta"&gt;The contact form is processed by Formspree. See the &lt;a href="https://sqlmaniak.blog/polityka-prywatnosci/" lang="pl" hreflang="pl"&gt;privacy policy (in Polish)&lt;/a&gt; and &lt;a href="https://formspree.io/legal/privacy-policy/"&gt;Formspree's privacy policy&lt;/a&gt;. Please don't send passwords or confidential data.&lt;/p&gt;&#10; &lt;button type="submit"&gt;Send message&lt;/button&gt;&#10;&lt;/form&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;You can also contact me via:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;💼 &lt;a href="https://www.linkedin.com/in/sqlmaniak"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;💻 &lt;a href="https://github.com/marcinpytlik/SQLManiak"&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;style&gt;&#10;form.contact{max-width:640px;padding:1rem;background:var(--card);border:1px solid var(--border);border-radius:12px}&#10;form.contact label{display:block;margin-bottom:.6rem}&#10;form.contact input,form.contact textarea{width:100%;padding:.6rem;border:1px solid var(--border);border-radius:8px;background:inherit;color:inherit}&#10;form.contact button{margin-top:.8rem;padding:.55rem 1rem;border-radius:8px;border:1px solid var(--border);cursor:pointer;background:var(--accent);color:#000}&#10;&lt;/style&gt;</description></item><item><title>Services and Training</title><link>https://sqlmaniak.blog/en/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sqlmaniak.blog/en/services/</guid><description>&lt;section class="offer-hero"&gt;&#10;&lt;p class="offer-eyebrow"&gt;SQL Server · .NET · Azure · PowerShell · Monitoring · Consulting &amp; Training&lt;/p&gt;&#10;&lt;h2&gt;Practical engineering support for SQL Server and related technologies&lt;/h2&gt;&#10;&lt;p class="offer-lead"&gt;I work with existing production environments where availability, predictable operations, and evidence-based decisions matter. My work includes reviewing configurations, diagnosing problems, and preparing actionable recommendations. I also deliver hands-on technical training.&lt;/p&gt;&#10;&lt;div class="offer-actions"&gt;&#10;&lt;a class="offer-button offer-button--primary" href="https://www.malt.com/profile/marcinpytlik" target="_blank" rel="noopener noreferrer"&gt;View my Malt profile&lt;/a&gt;&#10;&lt;a class="offer-button offer-button--secondary" href="https://sqlmaniak.blog/en/contact/"&gt;Contact me directly&lt;/a&gt;&#10;&lt;/div&gt;&#10;&lt;/section&gt;&#10;&lt;h2 id="consulting-and-assessments"&gt;Consulting and assessments&lt;/h2&gt;&#10;&lt;section class="offer-section"&gt;&#10;&lt;div class="offer-grid"&gt;&#10;&lt;article class="offer-card"&gt;&#10;&lt;p class="offer-card__eyebrow"&gt;01 · Performance&lt;/p&gt;&#10;&lt;h3&gt;SQL Server Health Check &amp; Performance Review&lt;/h3&gt;&#10;&lt;p&gt;Review SQL Server performance, configuration, and possible bottlenecks.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Wait statistics, CPU, I/O, and memory&lt;/li&gt;&#10;&lt;li&gt;Query Store, execution plans, and expensive queries&lt;/li&gt;&#10;&lt;li&gt;Indexes, statistics, tempdb, blocking, and deadlocks&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p class="offer-result"&gt;&lt;strong&gt;Deliverable:&lt;/strong&gt; a diagnosis with prioritized recommendations.&lt;/p&gt;&#10;&lt;/article&gt;&#10;&lt;article class="offer-card"&gt;&#10;&lt;p class="offer-card__eyebrow"&gt;02 · High Availability&lt;/p&gt;&#10;&lt;h3&gt;High Availability &amp; FCI Review&lt;/h3&gt;&#10;&lt;p&gt;Assess SQL Server availability architecture and operational processes.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Failover Cluster Instances, Windows Server Failover Clustering, and Availability Groups&lt;/li&gt;&#10;&lt;li&gt;Quorum, storage, networking, service accounts, and patching&lt;/li&gt;&#10;&lt;li&gt;Failover procedures, single points of failure, and operational risks&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p class="offer-result"&gt;&lt;strong&gt;Deliverable:&lt;/strong&gt; technical and operational HA recommendations.&lt;/p&gt;&#10;&lt;/article&gt;&#10;&lt;article class="offer-card"&gt;&#10;&lt;p class="offer-card__eyebrow"&gt;03 · Recovery&lt;/p&gt;&#10;&lt;h3&gt;Backup, Recovery &amp; Disaster Recovery Assessment&lt;/h3&gt;&#10;&lt;p&gt;Review whether backup and recovery procedures can meet business recovery requirements.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;FULL, DIFF, and LOG backups; retention and log-chain continuity&lt;/li&gt;&#10;&lt;li&gt;RPO/RTO targets and restore testing&lt;/li&gt;&#10;&lt;li&gt;Integrity checks, recovery scenarios, and monitoring&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p class="offer-result"&gt;&lt;strong&gt;Deliverable:&lt;/strong&gt; a recovery plan review and an identified list of gaps and risks.&lt;/p&gt;&#10;&lt;/article&gt;&#10;&lt;/div&gt;&#10;&lt;/section&gt;</description></item></channel></rss>