Category: Blog

  • Advice I Like: Examining My Past Self

    If you are not embarrassed by your past self, you have probably not grown up yet. – from Excellent Advice for Living

    While I’d like to think most of us are true to who we are and act well in most situations, the reality is that we’re always learning and growing, and we will make mistakes. If we don’t find some of them embarrassing in our current world, we likely haven’t grown much.

    This isn’t being embarrassed by everything, but by some things. I would think many of us make mistakes, say things, do things, treat others poorly in the moment and we wish we hadn’t.

    I think a healthy part of life (or family or community, or organization or country or whatever) is making some mistakes, growing and learning not to do the same thing, or a worse thing. Becoming a better person is growing up and that should mean reflection on the past, with some embarrassment over how the past played out.

    At the same time, this doesn’t mean that you hold your past self to a higher standard. I recognize that it’s unlikely in many cases that I should have known/done/acted/said something better. I’m just embarrassed now.

    Examples for me include how I treated many girls/women, with not enough respect and with my own selfish goals of sex in mind. Poorly treating some coworkers that didn’t know as much as I did, with arrogance or derision. Certainly plenty of times I was upset with my children for what I now see were not good reasons.

    I’m mostly happy with who I’ve been, but I’m also embarrassed by some of my actions.

    I’ve been posting New Words on Fridays from a book I was reading, however, a friend thought they were a little depressing. They should be as they are obscure sorrows. I like them because they make me think.

    To counter-balance those, I’m adding in thoughts on advice, mostly from Kevin Kelley’s book. You can read all these posts under the advice tag.

  • DevOps Day – Atlanta

    No tour this year, but Redgate does have a few DevOps events scheduled. I’m hoping for more, and the first one for me this year is Atlanta. You can register for the DevOps Day Atlanta Workshop on May 15, just a few weeks away.

    I’ll be there to set the stage and give a high level view of how Redgate approaches better database code management and deployment with Flyway. We’ll also have a whiteboarding session if you have questions to solve some architectural challenges.

    If you can make it, please register today and come enjoy a day with us.

  • Index Maintenance Can Change NORECOMPUTE Settings

    I had a customer recently ask about a change in one of their constraints on production, where a new option appeared when they went to deploy some changes from QA. They asked how this could happen, and I’ll show how in this post.

    Suppose I create a table like this in a development environment.

    CREATE TABLE [dbo].[Logger](
         [LogID] [INT] NOT NULL CONSTRAINT LoggerPK PRIMARY KEY,
         [LogDate] [DATETIME] NULL,
         [LogMsg] [VARCHAR](2000) NULL
         )
    GO

    I (hopefully) have a process to get this to production (version control, automation, etc.). Once in production, if I were to script this on SQL Server 2022, I’d get this from SMO.

    CREATE TABLE [dbo].[Logger](
         [LogID] [INT] NOT NULL,
         [LogDate] [DATETIME] NULL,
         [LogMsg] [VARCHAR](2000) NULL,
      CONSTRAINT [LoggerPK] PRIMARY KEY CLUSTERED
    (
         [LogID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

    This looks different, but really this includes the defaults that existed in dev, and also in production. Hopefully all my SETtings and configuration is the same, to ensure no surprises.

    Now, let’s imagine a DBA has some index maintenance, perhaps Ola’s scripts or some other script that works through all tables and indexes. If a DBA decides they’d like to edit the script to change a setting, they might end up running this code for my Logger table:

    ALTER INDEX ALL ON dbo.logger
    REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);

    There’s a small change in here from the defaults, which I’d see if I were to run a SQL Compare comparison. Now I’d see this type of change, which might not be a problem, but it might be an issue where each deployment wants to reset this setting.

    2025-04_0139

    If you don’t think this is a big deal, here’s the deployment code:

    2025-04_0140

    I would not want this going through my deployments. And it might if our team were no diligent in looking at the deployment script.

    Be explicit with defaults, and be careful about making changes in production. You might end up creating problems in your update process if you don’t feed these changes back to development.

  • Speaking at SQL Saturday Austin 2025

    SQL Saturday Austin 2025 is in just a few days. I am honored to be speaking there, and glad to be going back. I’ve missed a number of the Austin events with schedule conflicts, but things worked out well this year, and I’ll be at the event.

    The schedule is out and it’s packed with some great sessions. I’ll be talking about zero downtime deployments, but there are some other nice ones:

    • MS Fabric and SQL from Bob Ward
    • AI for the data professional from Ginger Grant
    • SQL DBs in Fabric for Dashboards and Marts from Joey D’Antoni
    • Defending against Ransomware from Jeff Iannucci

    and plenty more. I’m sad to miss Conor Cunningham’s talk, but we’re at the same time.

    There’s also a Pre-con on Friday about Fabric if you want to attend. It’s a great chance to get very reasonable training at a low cost.

    If you’re anywhere near Austin, some out this Saturday and join us for a great day of learning.

    Now I’m off to pack as I leave tomorrow to head to the Redgate office in Austin for the rest of the week before the big event.