What’s My Lane?

Yesterday a fellow #SQLFamily member, Brent Ozar tweeted about how someone objected to some content in his latest email he sends out to subscribers. Based on the response, I’m guessing it was this email.

Now, let me back up and in full disclosure say I’ve met Brent once or twice, sat in on a SQLSaturday session of his and one User Group meeting where he presented, but don’t know him well. We’ve never sat down and had a beer or discussed DBA topics together. And, in fairness, my blog on a good day probably gets 1/1000th the reads his blog will get on a bad day. He’s what some might call “a big name” in the industry. He’s an expert on SQL Server and well worth reading for that reason alone. I can’t guess how many people read his blog or newsletter, but I can say it has influence.

And so, someone felt that him writing about something other than how to build an index, or why not to use an update in a trigger was him straying from his lane and he should stick with data related topics. He’s already responded in some tweets and I presume elsewhere but I figured it was a good topic for me to blog about.

As long-time readers know, I don’t write just about SQL or PowerShell, but I also write about cave rescue or marshmallows or Safety (one of my more popular pages strangely). In other words I have an eclectic array of topics. But I also have some themes and I’ve written about (not) being an ally, or gender factors in giving blood. There are others, but the general point is I sometimes also write about social issues I think that are important. I think I’d be hard pressed to say what my lane is here; perhaps it’s more like a curvy mountain road?

But let’s go back to the person who told Brent he should stay in his lane. What lane did that reader refer to? I’m presuming it’s a narrow lane of “topics related to databases”. But, I think that person is wrong and I fully support Brent’s “straying from his lane.” Why? Because of power and privilege.

I’m going to go out on a limb (though I suspect it’s not a very far one) and state that I suspect Brent and I share much of the same privileges simply by being born the gender we are and skin color we have. There are other aspects we probably share.

These innate privileges give us power. And sometimes we are consciously aware of that power and other times unconsciously blind to it. Having the power and privilege itself isn’t an issue. It’s how it’s used that is important.

For example, all too often, I forget that I’m more likely to be taken seriously when I talk about a technical topic than some of my fellow DBAs, simply because of my gender and/or skin color. I can be unconscious to that power and privilege or I can work to be conscious of it. And by being conscious I can try to improve the situation for my fellow DBAs who don’t have my innate privileges.

I can be ignorant of that fact that no one questions my marriage and be oblivious to how some had to wait for the Supreme Court to recognize the validity of their love for their partners. Or, I can be aware of that and support my LGBTQI brethren in being allowed to live with who they choose and to marry them if I wish. This shapes my political opinions and who I will vote for. For example, I won’t vote for someone that I think will act to take away same sex marriage or will enact legislation that hurts such folks.

But there’s also more conscious forms of power. Simply being aware is not enough. Making room for others to be heard is a positive use of power. This is what Brent did and I fully support it. But, he didn’t simply make room, he provided the metaphorical microphone and the loudspeakers. If you didn’t look at the link above, look now. You’ll note that Brent didn’t write the email in question, but rather he gave space to a fellow DBA, Andy Mallon. This wasn’t an accident, this wasn’t Brent being lazy and not wanting to write an email, this was a conscious choice. This is using his power as a well known DBA and “big name in the industry” as well as his privileges to give a voice to others. (Please note, Andy’s a friend of mine, I’ve spoken with him at SQL Saturdays and he’s no slouch, but as far as I know he doesn’t have the audience that Brent has.)

I can support that use of power and if it’s “straying from his lane” so be it!

That said, as I wrote in my article in giving blood, as DBAs, we can NOT simply divorce ourselves from social issues. It’s not as simple as “well I just write SELECT statements and create tables.” The very data we record encodes social standards. When we make gender a bit field, we’re enshrining a very binary view of gender that does not reflect the lived lives of those around us. When we make fields that say Husband or Wife, rather than Spouse 1/Spouse 2, we are saying that only a certain form of marriage is valid (And for that matter, why stop at Spouse 2, why not make it a separate table for the day when someone walks in and claims to have more than one spouse.)

In other words, even if Brent had never strayed from writing about SQL Server, his lane would properly include social issues. Data isn’t nor should it be completely separate from social issues.

And I’ll toss out a few URLs here:

P.S. for those who read my post last week, I’m happy to say I got my slide deck and recording uploaded for presentation at PASS Virtual Summit 2020: PowerShell for DBA Beginners! So join me on Nov 11th at 2:00 PM! And use code LGDISIIK3 and save $50!

A Speaker’s Timeline

This post will be short, for reasons that are hopefully obvious by the end.

Sometime in February

Hmm, I should put together some ideas to submit to present to SQL Summit in Houston (not Dallas as Mistress SQL pointed out to me) this year.

March 16th

An update, the call for speakers has been postponed. Darn.

March 23rd

Call for speakers is finally open!

March 30th

Submit 3 possible topics.

April 1st

Approach a fellow speaker about a possible joint session, but after discussion, decide not to go ahead with the idea.

June 3rd

Get an update, Summit will be virtual this year. Thankfully I didn’t book any tickets or hotel rooms in Dallas.

July 20th 6:49 PM EDT

Woohoo! I got the email! One of my submissions got selected to present!

July 20th 6:50 PM EDT

Crap, now I actually have to write the entire thing!

July 20th 6:51 PM EDT

Wait, and it’s going to be virtual too. That’s going to make it a bit more of a challenge to present. But I’m up to it!

Sometime in August

I really should get started. Hmm, here’s one of the scripts I want to present.

But honestly, I’m preparing to teach a bunch of cavers and medical students cave rescue, I need to concentrate on that first.

September 5th

I just biked over 100 miles. I’m certainly not working on my presentation THIS weekend.

Later in September

Ok, now I’m going to sit down and really work through this. Here’s a basic outline.

October 1st

Oh wait, it’s going to be virtual AND I have to prerecord it? How is that supposed to work? I had better read up at the speaker portal!

October 2nd

Huh, ok, that sorta makes sense, upload the slides, do a recording, but I still don’t get how it’ll work with a presentation like mine with lots of demos. Well I’ll figure it out.

October 6th around 11 PM EDT

Well the PowerPoint template deck they provided looks pretty slick. I should start prepping my slides.

October 6th, approximately 5 minutes later

There, got the first slide done. Of course it’s only my name and pronouns, etc. But it’s a start.

Oh and the 2nd slide is done, but that’s simply the default PASS slide talking about chapters, SQL Saturday etc, so technically I didn’t do anything there.

I’ll start working on the closing slides.

October 7th, sometime after midnight

Ok, about 5 slides done. I’ll like to myself and say I’ve made great progress!

October 9th, approximately 10:00 PM EDT

Ok, I’ll at least start writing out the scripts I need.

October 9th, 20 minutes later

What the bloody hell? Why is this script failing? I’ve got to present this. If I can’t get this script working how is anyone going to believe that I know PowerShell, let alone actually use it.

October 9th, 5 minutes later

Well, damn, that was an embarrassing mistake, just had the , in the wrong place

October 10th around 9:00 PM EDT

Hmm, to properly demo this, I really need to run against 3-4 SQL Servers and I really don’t want to spin up a bunch of VMS and I can’t use my development one, too much proprietary data there.

I know, NOW is a perfect time to start to learn to use Docker! Why not? And besides Cathrine Wilhemsen has a great post on it. I’ll simply follow that.

2 hours and 1 reboot later

Hey, would you look at that? I’ve actually got a docker container running SQL. This is awesome!

Another minute later

But why can’t I actually connect? What network is it on? Why did I decide docker was easier? Why did I even submit this proposal? What the heck am I doing here? What is the meaning of life?

5 more minutes

That’s it, I’m going to bed.

October 11th, late night

Oh, I get it it now, I didn’t setup a full separate network, it’s bridged and that’s why it’s showing 0.0.0.0. I just need to change the port and I’m good to go!

A minute later

This is pretty awesome. Not what I’d do for a production setup, but definitely works for my demos. Now if I were really smart, I’d also setup persistent storage and the like, but this is good enough. And honestly now, setup a loop, increment a variable and bam, I’ve got 4 instances of SQL running in docker, 2 are 2017 and 2 are 2019. This is really incredible. I’m proud of myself.

Oh and even better, I’m doing all this in a PowerShell script, so I can actually make it PART of my presentation!

October 12th 2:26 PM EDT

Send off an email to the Program folks at PASS asking about how the recording stuff works with demos. Eagerly awaiting a reply.

October 15th, another late night

Yes, there’s a theme here, much of my work is being done late at night. It seems to work for me. But dang that deadline is getting closer!

October 16th, late night, again

Watched some Schitt$ Creek with the family. “Why didn’t we start watching this sooner? It’s hilarious! But I need to work on my presentation some more.”

Get all the PowerShell scripts basically done. I’m happy with it, need to work on my speaking script some.

October 19th 3:00 PM EDT

Get off the phone with a fellow Cave Rescue expert. Just before I get off, I mention my upcoming virtual, prerecorded session I have to finish. He says, “Oh, you know I just did 2-3 of those for a rescue conference, exact same format. It worked out really well. I can send you some details and feedback.”

I find that reassuring.

Also recheck email, still no answer from the folks at PASS on my questions about demos, etc.

October 19th, guess what time

I’ve finished everything, even updated the slides and scripts a bit more. I’m a bit worried I’m going to run too long, but decide to do my first of several practice run throughs.

Do my first full run through. Stop and correct a few mistakes or rough edges here and there. I’m not too worried if I run over now since I know I’ve artificially added some time.

October 19th, 42 minutes later

I get done, look at the PowerPoint timer: 42 minutes. “CRAP! I need this to be 60 minutes!” I’m not too worried, I can add more, but I’m not sure where and I don’t want to simply add fluff for the sake of fluff. I need to give this some thought.

Later on October 19th

Talking to a friend of mine who among other things has a background in adult education. She doesn’t know SQL or PowerShell, but she’s a good sounding board and she’s going to sit through my next run-through, not so much for the technical details but to give feedback on the flow and perhaps suggestions on where I may be making too many assumptions on what my listeners will know.

October 20th Early Morning

It’s a Tuesday, time to blog. As always I face that question, what should I blog about?

“I know, I’ll blog about how I’m getting my presentation together and the deadline is fast approaching. I can’t be the only speaker that often finds themselves up against the deadline and panicking.”

Next 36 hours

Add a bit more content and run through it 2-3 more time and then… RECORD! (technically it looks like I have until the 26th to upload my recording, but I want to get done early).

Conclusion

The above may or may not be a wholly accurate timeline or description of the process I’ve gone through trying to get my presentation ready for Pass Virtual Summit. I may have elided a few details and over-hyped a few others, but in general it’s close to true and accurate. Despite my always best intentions, I find myself often working up close to the deadline for submissions. Since for Summit they want NEW presentations, I can’t simply dust-off one of my previous presentations and use that, so there’s definitely more work involved here.

And honestly up until I learned it was going to be prerecorded, I thought I’d have most of October to work on it. The deadline to get the slides and recordings submitted sort of threw my original timeline for working on it in the dumpster so I’m actually a bit further behind than I expected to be.

On the other hand, I really did learn to use Docker and I think that’s valuable and I am making that part of my presentation. And, when all is said and done, I think I’ll be happy with it. I think though like any good speaker, I’ll look back and think “well next time, I’ll have to improve this or that.” There’s always room for improvement. I’m not keen on giving it prerecorded. I value the instantaneous feedback I get from the audience. So that will be different. But I at least can elicit questions during the presentation and there’s a life Q&A afterwards. But, I’ll still be nervous.

I’m in awe of speakers who get their presentations all prepped and prepared months in advance, but I suspect there’s a number out there like me, that don’t operate that way. And I suspect there’s a few who are even more nervous than I thinking, “OMG, am I the only one in this spot?” Nope, you’re not. Or rather, “Please let me know I’m not the only one!”

See you all at Summit, at least virtually!

And in the meantime there’s another possible deadline coming up I need to think about…

Privilege is a Tailwind

I’ve written about how much I enjoy bicycling previously. Besides being good exercise and a decent way getting from point A to point B, it gives me a chance to think about things. Sometimes it’s deep thoughts, sometimes it’s simply prosaic, as in “hmm, how fast do I need to do this section to keep my average speed up.”

One thought that has run through my head often is the impact of a tailwind or headwind on my average speed. There’s certain truth that I think many bicyclists will agree with and that’s a headwind somehow always finds you. Seriously I’ve done in/out loops (i.e. out X miles and make on the same route) and it seems the wind will reverse directions about half-way through.

In any impact, air resistance is one of the banes of speed. What makes it worse, is the impact is really a square factor, i.e. if you go twice as fast, the impact of air resistance is 4 times as much. This is why it’s fairly easy to bike at say 5 mph, not to bad at 10 mph and much harder at 20 mph and unless you’re a star athlete, to go 40 mph for any real distance on a flat path.

Now, if you’re trying to bike into a headwind, that just multiplies the impact of air resistance. Even a slight headwind can really slow you down.

Fortunately, a tailwind has the opposite impact and can help.

Saturday it was in the 70s here so I decided to get in a longer ride (a bit over 20 miles). It was a fairly blustery day and I didn’t expect to have a great average speed. And I was right. For most of the ride I was actually heading into a headwind and on the sections where I did have a decent tailwind I was climbing hills and already moving slowly so the impact wasn’t very much.

But enough about aerodynamics and back to thinking while biking. While I’ve often thought about the impacts of a headwind vs. tailwind a new analogy dawned on me: tailwind as privilege.

Privilege in this case refers to the systemic advantages one has because simply because of the circumstances of their birth. It doesn’t necessarily mean you had it easy, for example you may have been born into a low-income household, but it does mean you didn’t have artificial constructs placed in front of you as you tried to navigate life. In addition it doesn’t necessarily mean you didn’t have certain advantages, you may be a person of color born into a high-income household.

Let me continue with the analogy.

While biking, if I’ve got a nice tailwind, it feels great. In fact I’m pedaling along effortlessly and don’t have to give much thought to my ride. If I’ve got a headwind, I may be pedaling with all my effort but not moving very fast. And I definitely notice the extra effort.

Privilege is not the quality of my bike. Privilege is not the hills I have to climb or go down.

Privilege is not being born into a neighborhood that suffered with redlining, which means even decades layer home values are depressed which makes it harder to get loans and harder to improve the neighborhood in general.

Privilege is being able to wear what clothing you like without people immediately thinking you’re a criminal.

Privilege is being able to put a photo of your family on your desk without worrying about if your homophobic coworkers will make comments or your boss will consciously or subconsciously take it into consideration at your next review.

Privilege is being able to walk out of a bar holding hands with your sweetie and not worrying if someone is laying in wait to beat you up solely because of who you love.

Privilege is being able to walk into a car dealership and not worrying about if the dealer will take you seriously because of the gender you present.

Privilege is going into a meeting and not having someone ask you to take notes simply because they think women have neater handwriting.

Privilege is being given a 3-speed bike, but being on a course that automatically has a tailwind. When it’s level, you might struggle a bit, but you don’t really notice the air resistance. Hills are an issue, but everyone has trouble with those.

Lack of privilege may be being given a beautiful 21 speed graphite frame bike that weighs practically nothing, but being put on a course with a headwind. For practically the entire ride, you notice the headwind. On level ground, you’re pedaling as hard as you can, but you realize you’re not having it as easy as the bicyclist with the tailwind, regardless of your respective bicycles. On downhills, yeah, gravity helps, but again, you notice the headwind and can’t even coast as easily as the person on the other bike. Sure, both of you may struggle on the uphills, but you realize that once you’re both at the top, again they’re going to have an easier time.

And what’s worse, is the person on the 3-speed will complain about the horrible bike they’ve been given, how lucky you are to have been given the 21 speed and then have the audacity to suggest that you just need to bike harder to keep up, after all, they’re doing just fine on a 3-speed and the tailwind they have has nothing to do with their advantages.

I also noticed something else my ride. The headwind was from the south, and the flattest portion I was biking was southbound. For much of it I had some shelter from the headwind because of trees and the like so it was less noticeable, but the minute I was in an open area without trees, the headwind was definitely noticeable and definitely slowed me down.

Now if the person with the tailwind can upgrade to the same 21 speed graphite frame bike, they will be able to go even faster, but that tailwind will always be there, assisting them. The person with the headwind, no mater how much better their bike is will always have a built-in disadvantage until the wind changes.

In reality, I really only encounter tailwinds while biking. For the other areas of my life, I’ve had a tailwind. I’m not aware of it unless I think about it but it’s there. Don’t mistake for the bicycle you ride for privilege or the lack of privilege. It’s the tailwind that’s the privilege.

I wish everyone, bicycling or not, a strong tailwind.

Projects You’re Proud Of?

When I present, I start my presentations with a brief bio of myself and one item on there I generally have is a comment that I like to solve problems. This may sound obvious, but it’s true and I think describes my goal well. Yesterday, while on a 3 hour zoom call with a client, we got talking about various projects and it made me think about some of the problems I’ve solved over the years.

There are several I could talk about, but one came up yesterday. Several years ago at a previous client, the head of their call center came to me with an issue. They had a process where they’d export their call center logs and input them into SQL Server. Except to call it a process was a bit of an overstatement. It was a series of about 4-5 steps, all except the initial export were done manually. This meant that every morning one of their IT people would take a file from a Linux server, copy it locally, and then import it into Access where several macros were run on it to transform it and then the person would import it into the SQL Server where they could then run reports. There were several possible areas for mistakes to happen and while mistakes weren’t routine, they tended to happen about once or twice a month. On a good day, it would take about 1/2 an hour to do the manual import, on a bad day, over an hour. So in a month, one of their IT people could easily spend 15 or more hours on it, or over 180 hours a year.

In addition, adding new meta-data into the process was error-prone and he couldn’t do as often as he liked. He asked if I could take a look at it and automate it. While SSIS is not an area of expertise, I was familiar enough with it to know it was a good fit and said I’d work on a solution. It took some effort, but eventually I had a solution in place. The entire process now runs automatically in about 5 minutes and he can add or remove the meta-data he needs to by updating a single SQL table. He was quite pleased.

I’m also proud to say the only real time there’s been an issue with the process is when they had to for business reasons IP their entire internal network. They unfortunately scheduled this for a week when I was not only on vacation, but spending that week at some National Parks and Forests in the South Dakota area. The remoteness of these locations meant that my connectivity was very limited. I let their IP team know what changes had to be made to a config file to make things work, but in the aftermath of other issues they had to deal with this was missed. Fortunately, once I found the right place to sit in the National Forest we were camped in and get enough of a cell signal to log into their network, I was able to make the update and fix things. Since then, things have worked without a hitch.

I like this particular project, not just because it’s been so problem free, but because I think I can clearly point to a problem a client had and that I helped solve. Now that IT person can spend their time on more important issues.

It also is an example of a mantra I think is generally true:

Anything that can be automated should be automated.

There’s other projects I may write about at other times (including a few involving PowerShell) but that’s it for today.

What projects are YOU proud of? I’d love to hear from you.

Making an Omelet

Yesterday, in an email exchange with a fellow DBA I used the term “they’re trying to make an omelet without breaking any eggs” and this got me thinking.

Several years ago I was working with a client that was moving their development process to an agile process. Or more accurately, that was their goal. They started off fairly well, we had daily stand-up meetings where folks actually stood up and the entire thing was kept short.

But things started to change. Our user stories started to get more complex. The cycle between when we’d receive our story and deploy it grew longer and longer. Pretty soon we were talking about going back to an annual release, and only an annual release.

I started to call this agile-waterfall. It was clear they were simply falling back on their old habits and that their agile goal simply wasn’t going to happen.

More recently, I’ve had another client I’ve been working with to make some security changes to their databases. This is generally a good goal. But, it means some radical changes in a few of their processes. Meanwhile another manager in the company is pushing back on all the many of the changes because some would be disruptive to their current processes and arguably break how certain things are done. And breaking such things would have an immediate financial impact.

Now, I like a good hard-boiled egg. In fact I had one this weekend.

I also like a good omelet. Maybe I’ll make one this coming weekend.

Neither is necessarily better than the other. But you can’t make them the same way. You can’t really make an omelet out of a hard-boiled egg, and you can’t really hard-boil an omelet.

If you really want a omelet, you’re going to have to break a few eggs.

Just make sure you understand up front if you’re breaking an egg or not, because once broken, you’re pretty much committed that omelet.

And sometimes it’s necessary to make that omelet. Change can be necessary and good.

#SQLFamily

I’ve mentioned this in the past and thought I’d write something quick about it today. The quick is because I’m lacking time, not because the topic isn’t important or worthy of exposition.

Anyone who has spent much time at any PASS events such as SQL Saturday or Pass Summit has an inkling of what #SQLFamily is.

At its base, it’s a group of professionals who all have SQL Server in common. That might be a start, but it’s hardly a good definition. It’s also:

  • Professional contacts
  • LOTS of people willing to give SQL help when you need to solve a problem
  • Folks that will fact check your blog or post
  • It’s the folks willing to step up for a User Group Meeting talk

And that might be enough, but that’s not all it’s also:

  • Someone who loves bicycling as much or more than me.
  • At least one amateur radio operator (and quite the ham in other ways at times)
  • Several with 3D printers making mask band holders and the like
  • Several that sing karaoke
  • Someone who makes more homemade pizza than I do
  • At least one with cute puppies she’s been known to have on her webinars

But, honestly, it doesn’t end there. In this time of Covid it’s been more.

  • It’s been the folks who I get together with on Friday’s for a long-distance social hour
  • It’s the ones I’ve been able to talk about fears of COVID and schooling and kids
  • It’s been the ones I’ve reached out to to make sure they’re ok
  • It’s been the ones that have checked in on me
  • It’s the folks that write blog posts, sometimes daily, about how to support others

In short it really is a family. We’re not together by blood but we still share our thoughts and feelings and support each other. And you know what, right now I’m extremely grateful for that family.

So to my #SQLFamily, if I haven’t said it enough, thank you for who you are and for being there, especially during this time of Covid. I know I’ve needed it. And I really appreciate it.

And I can’t wait to see you all in person again at some point.

P.S. – if you’re shy or don’t think you’re welcome in the family, don’t worry, you are welcome. Pop in, say hi, or even just reach out to one person and say hi or ask for an introduction.

The Value of Testing

This is one of those posts where I wish I could show actual code snippets, but since it involves a 3rd party vendor for one of my clients and I don’t have permission, I can’t.

So, I’m forced unfortunately to talk about the issue in a roundabout way.

My client uses a 3rd party tool to track documents. I’ve mentioned this before. They’ve been growing fairly fast and running into performance issues. I suppose growing fast is a good thing, but having performance issues is not.

In any case, using Query Store, I was able to send the vendor a list of queries and stats about them for them to review and to ideally improve the queries that needed work.

Yesterday they got back to me. The email was essentially we took this first query (let’s call it Doubly-Joined) and rewrote it as this second query (let’s call it Singly-Joined). I looked at the two queries, which join 4 tables. They’re very similar to each other, but the first one did join in the main table a second time (hence why I’m calling it Doubly-Joined). It’s not clear why this was done. The second query basically removed the second join and in the select clause, changed the aliases to the second join to the first join. This does give them a slightly different query plan, but ultimately, they return the same number of rows.

The first query plan
The second query plan

As you can see, the 2nd query plan is definitely a bit simpler (ignore the one warning, it’s not something that appears to be fixable here).

So, a naive take would be “we removed an unnecessary join, so of course it should be faster!” But is it?

Sometimes intuition can be correct, sometimes not so much. In this case though, it’s easy to confirm by seeing exactly how many rows are being read in each query.

I wrapped each query in a

Set Statistics IO ON/OFF
Set Statistics TIME ON/OFF

block and ran it. Here are the results

The Doubly-Joined

Table 'Table1'. Scan count 0, logical reads 337264, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table2'. Scan count 0, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table3'. Scan count 0, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table4'. Scan count 1, logical reads 396, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

The Singly-joined

Table 'Table1'. Scan count 0, logical reads 337260, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table2'. Scan count 0, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table3'. Scan count 0, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table4'. Scan count 1, logical reads 396, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

I’ve highlighted the relevant change. The single-joined query consistently performed with 4 fewer logical reads. Now, if the original number had been 8 and had dropped in half to 4, I’d be happy. But the change from 337264 to 337260 leaves me a bit underwhelmed. Furthermore, under multiple runs, the second query did not consistently use less CPU time, sometimes it took faster to run. Further testing was consistent in the lack of apparent improvement.

Needless to say, I don’t think this query improvement will help much. I’ve reached out to the vendor to see if they can provide more details, but honestly, I’m not hoping for much.

Goals

A week ago an email alerting me to a new post from Steve Jones showed up in my in-box. I had to chuckle a bit because the topic was one, Goal Progress, that I had seriously thought about writing about for last week’s blog.  But I decided to write about teaching instead and put off a post on goals. There was a reason for that. I thought it would make a better post for this week.

There are some goals I’m fairly public about. I’ve started to write about my yearly goals and my results at the start and end of each year. But often I have more private goals. These are usually of a more personal nature. This post is about one such goal.

My Biking History

Ever since I got my first 10 speed, on I think my 10th birthday, I’ve loved to bike. Learning to read gave me intellectual freedom, but learning to bike gave me physical freedom. Growing up in a small town meant that to go any place interesting, biking was often the fastest and easiest way to do so. I could cover miles in fairly short order. Before I knew it, I was biking everywhere.

In high school, in the spring sports season I continued my relationship with the outdoors with the Outdoor Experience (OE) program. Part of that time was spent biking. I quickly upgraded my original 10 speed to one I bought from my original OE coach, Ben Kaghan. It was a beautiful Italian bike I continued to ride through high school and college until I was in a serious accident with it where I ended up going head over the handle bars and destroying the front forks. Twice in high school, as part of the OE program I managed to get in a Century ride, once my freshman year and once my senior year. They were nice bookmarks to my high school experience. Surprisingly to me, my senior year ride was a bit tougher, I think the route selection was a bit worse and we ended up with more hills.

For college graduation, I received a beautiful Trek 520 from my mom. I continued to ride, though not as much as I’d like. But several times, in September or October, I would ride to an annual event that my college outing club hosted known as “Fall Lake George”. This was an IOCA event where as many as a dozen colleges would canoe, sail, swim (yes a few have over the years) or powerboat to Turtle Island and camp for the weekend. I’d send my gear up in another vehicle and arrange for a car-ride back. Depending on factors this was generally about a 65-70 mile ride. The last time I did this was in 2015, the day before my father died. For various reasons, including changing college policies which have resulted in cancellations of this event, I haven’t done it since.

That said, most years I’ve routinely gotten in at least a few rides over 30 miles, with a few 50 mile rides snuck in there. But the elusive 100 miles had not been accomplished.

Due in part to COVID and wanting to get out more, and long stretches of good weather, I’ve found myself riding more this year than any year in memory. As of this morning my mileage for the year is over 1200 miles in the saddle. That was sort of a personal goal I had set for myself without publicizing it.

But there was one more goal. One I finally managed to realize this past weekend: the Century ride.  I had actually already accomplished 2 half-Century rides this year which I had felt good about, including one with some significant altitude gain. So I felt good about my chances. But I still wasn’t 100% sure.

Near Lake George is an amusement park, The Great Escape. My entire family has season passes and while I enjoy a day or two there, the rest of the family loves it there. My original goal was bike there, join them for a ride or two, and then bike home. And if I felt my legs weren’t up to it, toss the bike on the back of my wife’s car and ride home with them. Alas, due to Covid-19, The Great Escape has not been open at all this year.

But, I still sort of wanted a bail-out option. So I came up with a back-up plan. Right across from The Great Escape is a really incredible ice-cream place known as Martha’s Dandee Creme, which is a traditional stop for the family after a day at The Great Escape. So, about a month ago, I figured, if the weather worked, this past Labor Day weekend would be a good weekend to attempt my ride. And I’ve got to say the weather was nearly perfect for it. Not to warm nor too cold (though the first few miles from the house which was mostly downhill so I had lots of wind, but little muscle action, and still early in the morning were noticeably chilly.)

So at 7:45 AM I set out. The first 2-3 miles are basically coasting downhill from my house to the Hudson River and then the next 5 or so are avoiding potholes and city traffic as I make my way north to the first river crossing.

20200905_094609

32 miles in and going strong, but fuel and bio break.

I find that on longer rides, after about 2 hours, I need generally need some sort of refueling stop. Fortunately, in my area there’s lots of Stewart’s Shops. It’s generally easy to plan a break around them and I did.

20200905_095543

Milk (and a brownie) does the body good!

At this point I was more than half-way to my turn-around point, which was actually at about 55 miles, not 50. Once I had taken care used the facilities and refueled, I was back into the saddle for another stint. This was a shorter stint, but finally I would be gaining some altitude. Up until now the ride was basically along the Hudson, but in about 15 miles, I’d pass through Fort Edward and Hudson Falls where the river turns west and I would have to do some, albeit minor hill-climbing.  

My original goal had been to hit Martha’s by 12:30 PM. I had given myself lots of time because I had no idea how fast or slow I’d be. Well at this point I texted my wife to say that my new goal was now Noon.

20200905_113408-1.jpg

11:45 at Martha’s Dandee Creme!

I beat even that goal and that included a stop to make sure I hadn’t missed a turn.

One of the peculiarities I’ve found with endurance events like this is that my appetite essentially disappears. I knew I needed calories and as such ordered a soda, some chicken fingers and fries. The soda I had no problem drinking. Of the 5 chicken fingers, I managed to down 2 and of the fries, not even 1/2 of them. I saved the rest for my family.

Once they showed up, we ordered ice cream. I mean, what’s the point of biking to an ice cream place if you don’t get ice cream?

A very surreal experience, The Great Escape on Labor Day weekend, empty, and soundless

Finally it was time to get back in the saddle and head southbound. I felt strong about it, but wasn’t sure about the wind and all. And the wind at spots was definitely a factor and it definitely slowed me down.

But….

The big 100!

I made it. There was just one problem. As I had mentioned, my turnaround point was about 55 miles from my house. This meant I was still over 10 miles from home. I made a quick pit stop just south of here (again at a Stewart’s) and then raced home. Honestly, the about 2 miles near the house was the worst, not because of the distance per se, but because I finally had to regain all the altitude I had lost from my house to the Hudson 9 hours previous.

But I pulled into my driveway right before 5:00 PM.

Finally home, 111.6 miles later

I had, for the first time in 35 years, finally completed another Century ride. Actually a bit more than a Century ride. Goal accomplished.

Final stats:

  • 9:44 Door to door including stops
  • 111.6 miles covered
  • Crossing the Hudson, 4 times
  • Altitude changes: 515->13 feet and then slowly back up to 476 feet. And then all that in reverse
  • 1 Stewart’s Chocolate Milk consumed
  • 1 Stewart’s large brownie devoured
  • 2 chicken fingers digested
  • Some french fries eaten
  • 1 small (which is actually quite large at Martha’s) salted-caramel soft-serve cream in a cone ingested
  • 7:16:12 actual riding time
  • 29.20 top speed on some random hill.
  • 15.3 mph average speed overall (down from 16.3 mph turn around and 15.8 at 100 mile mark, the hills at home and city traffic killed me)

Conclusion

So, the first question that comes to mind, “would I have written this blog post had I failed to achieve my private goal or always kept the failure private?” – Good question. I think it depends on the reason for the failure.

“How did you feel the next day?” – Honestly? Pretty good. Other than my knees, I find if I’m in shape, long rides like this don’t really leave me overly sore the next day. And taking doses of ibuprofen definitely helps with the knees and more.

And of course, “Would you do it again?” – Well I probably won’t wait another 35 years. We’ll see what happens next year or the year after that.

“What other private goals do you have?” – That would be telling! 🙂

Seriously, it was a great time for me, I’m SO glad I did it and am feeling great. Not to bad for someone my age in a year of Covid.

Learning and Teaching

This past weekend was the first of 3 weekends I’ll be spending in teaching a cave rescue class. As I’ve written before, I usually spend at least 1 week a year teaching students how to help rescue folks out of caves. I don’t get paid money, and in fact have to pay for my own travel and sometimes other expenses. But, I love it. Unfortunately, the large event we had planned for NY this year had to be postponed due to Covid-19.

A Little Background

Fortunately, New York is one state where folks have been very good about social distancing and wearing masks, so that gave me the opportunity to try something new: teaching what we call a “Modular Level 1” class. Instead of taking an entire week off to teach, we spread the teaching out over three weekends and several nights. This can often better accommodate peoples schedules. After a lot of planning and discussions I finally decided to go ahead and see if I could host a class. Through a series of fortunate events4, by the time I was ready to close registration, I actually had more than enough students. What makes this class different from other classes I’ve taught is that more than 1/2 the students have never been in a cave. However, most of those are in medical school and a goal of mine has been to get more highly trained medical folks into cave rescue. So, we greenlighted the class.

Teaching

The first day of class is really mostly about “check-ins”. Each student must demonstrate a certain set of skills. When I teach the Level 2 class, this generally goes quickly because the students have already gone through Level 1 and the students tend to be more serious in general about their caving skills. But for Level 1, we get a broader range of students with a broader range of skills. And in this case, some folks who were just entering the community of being knot tying and SRT (Single Rope Technique).

There’s a mantra, I first heard among the medical education community, but is hardly unique to them, “See one, do one, teach one.” There’s a logic to this. Obviously you have to see or learn a skill first. Then obviously you need to be able to do it. However, the purpose and goal of that last one eludes some people.

Without getting too technical, let me give an example: in SRT, cavers and rescuers need the ability to climb the rope and, while attached to the rope, successfully change-over to be able to descend the rope. I’ve literally done this 100s of times in my life. I obviously have the first two parts of that mantra down I’ve seen it, and and done it. But teaching it is a whole other ball game. Being able to DO something, doesn’t mean you can successfully teach it. We do many things based strictly on experience and muscle memory. If you think about walking, you may realize you do it naturally without any real thought. But imagine trying to teach someone how to do it. You probably can’t, unless you’re a trained physical therapist.

Much is the same with the aforementioned change-over. Just because I could do it, didn’t mean I could successfully teach it. However, over the years, as I’ve taught it more and more I’ve come to recognize certain mistakes and certain areas I need to focus on. I’ve gotten better at teaching it. So by teaching more, I’m learning to become a better teacher. By being able to teach it, I also understand it and know it better. The “teach one” part of the mantra is important because it means you can give forward the skills you’ve learned, but also means you have a better understanding of them in the first place. You can’t effectively teach what you don’t understand.

In addition to learning how to teach better, I’ve also realized that some approaches work better than others for people. There’s a common knot we tie in the rope community called an “alpine butterfly”. There are at least four ways I’m aware of to teach it. One method involves looping the rope over your hand 3 times in a certain pattern and then pulling on the right loop in the right way through the others, the knot “magically” appears.  I’ll admit I’ve never been able to master this and as a result, obviously don’t teach this way. The method I use is a bit more off-color in its description. Writing it down it comes down to:

  1. Take a bight of the rope
  2. Put two twists in it
  3. Take the loop, aka head, pass it between the legs of the rope
  4. Shove the head through the asshole formed between the two twists
  5. Pull tight and dress

At the end of that, you have a beautiful alpine butterfly. On Saturday night I was helping a student perfect her butterfly. She was having trouble with the 3 loops over the hand method. I showed her the asshole method. She almost instantly got it. Now, that’s NOT to say the asshole way is the better way, it’s simply the way that worked better for her.

Learning

Besides learning how to teach better, I actually learn a lot from my students. For example, one of the students who does have extensive alpine rescue experience was asking about our use of what are known as Prusik loops to tie Prusik Knots. In her training and experience she uses something similar called a VT Prusik. I had seen these before in previous training, but had not had a chance to see them in action or play with them. She did a quick demonstration and then on Monday sent me a link with more information. Needless to say, by the end I was ordering a pair so I could start to play with them myself. I can already see where I might use them in certain cases.

Another example of learning is that I’m starting to adopt a different way of tying what’s known as a Münter hitch. I’ve been tying these successfully for decades, but started noticing another method that’s fairly common and in my mind, if not more intuitive, it is at least a bit more of a visual mnemonic. I think it’ll reduce my chances of tying one poorly so I’ve started using it more and more. And this is because I saw how quickly students would pick it up.

Gelling

By Saturday night most of the students had passed their check-offs, but not in what I’d call a solid fashion. They were still at the stage where they were simply reproducing what they saw. This is common in the early stages of learning. As a result, I decided to adjust the Sunday morning schedule and spend a bit more time on simply practicing and honing their skills. What we really want at some point is for the skills to “gel” (i.e. go from a liquid state where their ability is in flux to a state where there abilities are more solid). What can be interesting about this is for some folks, this can be a fairly quick process and in fact I noticed by lunchtime for a number of students, their abilities had gone from simple rote reproduction to an actual more gelled state. After lunch we put in some more time and with some of the students I’d simply walk up, call out a knot for them to tie, walk away, give them a minute or so and come back to see what they had done. In most cases, they were successful. The night before that would not have worked. They’re still a long way to go from being as good as I or they might like, but they were no ready to go out in the field and safely put a patient over the edge.

Level 1 students pull a patient up over a cliff

Safely getting a patient over the edge

Concluding

So we have two more weekends to go before they can call themselves trained as Level 1 students and hopefully they’ll keep learning and improving beyond that. For me, as long and tiring as the weekend was (I think I got about 5-6 hours of sleep each night, at most) it was rewarding because I got to see students learn skills we taught AND because I got to learn stuff too. It was a great weekend and I look forward to the next two.20200829_134511

 

 

Caving and SQL

Longtime readers know that I spend a lot of my time talking about and teaching caving, more specifically cave rescue, and SQL Server, more specifically the operations side. While in some ways they are very different, there are areas where they overlap. In fact I wrote a book taking lessons from both, and airplane crashes to talk about IT Disaster Management.

Last week is a week where both had an overlap. One of the grottoes in the NSS (think like a SQL User Group) sponsored a talk on Diversity and Inclusion in the caving community. The next day, SQL Pass had a virtual panel on the exact same subject.

Welcoming

Let me start with saying that one thing I appreciate about both communities is that they will welcome pretty much anyone. You show up and ask to be involved and someone will generally point you in the right direction.  In fact several years ago, I heard an Oracle DBA mention how different the SQL community was from his Oracle experience, and how welcoming and sharing we could be.

This is true in the caving community. I recall an incident decades ago where someone from out of town called up a caving friend he found in the NSS memberhsip manual and said, “hey, I hear you go caving every Friday, can I join you?” The answer was of course yes.  I know I can go many places in this country, look up a caver and instantly be pointed to a great restaurant, some great caves and even possibly some crash space to sleep.

So let’s be clear, BOTH communities are very welcoming.

And I hear that a lot when the topic of diversity and inclusion comes along. “Oh we welcome anyone. They just have to ask.”

But…

Well, there’s two issues there and they’re similar in both communities. The less obvious one is that often anyone is welcome, but after that, there’s barriers, some obvious, some less so. Newcomers start to hear the subtle comments, the subtle behaviors. For example, in caving, modesty is often not a big deal. After crawling out of a wet muddy hole, you may think nothing of tearing off your clothes in the parking lot and changing. Perhaps you’re standing behind a car door but that’s about it. It’s second nature, it’s not big deal. But imagine now that you’re the only woman in that group. Sure, you were welcomed into the fold and had a blast caving, how comfortable are you with this sudden lack of modesty? Or you’re a man, but come from a cultural or religious background where modesty is a high premium?

In the SQL world, no one is getting naked in the datacenters (I hope). But, it can be subtle things there too. “Hey dudes, you all want to go out for drinks?” Now many folks will argue, “dudes is gender neutral”. And I think in most cases it’s INTENDED to be. But, turn around and ask them, “are you attracted to dudes?” and suddenly you see there is still a gender attached.  There’s other behaviors to. There’s the classic case of when a manager switched email signatures with one of his reports and how the attitudes of the customers changed, simply based on whose signature was on the email.

So yes, both groups definitely can WELCOME new folks and folks outside of the majority, but do the folks they welcome remain welcomed? From talking to people who aren’t in the majority, the answer I often get is “not much.”

An Interlude

“But Greg, I know….” insert BIPOC or woman or other member of a minority.  “They’re a great DBA” or “They’re a great caver! Really active in the community.”  And you’re right. But you’re also seeing the survivorship bias. In some cases, they did find themselves in a more welcoming space that continued to be welcoming. In some cases you’re seeing the ones who forged on anyway. But think about it, half our population is made up of women. Why aren’t 1/2 our DBAs?  In fact, the number of women in IT is declining! And if you consider the number of women in high school or college who express an interest in IT and compare it to those in in their 30s, you’ll find the number drops. Women are welcome, until they’re not.

In the caving community during an on-line discussion where people of color were speaking up about the barriers they faced, one person, a white male basically said, “there’s no racism in caving, we’ll welcome anyone.”  A POC pointed out that “as a black man in the South, trust me, I do NOT feel safe walking through a field to a cave.”  The white man continued to say, “sure, but there’s no racism in caving” completely dismissing the other responder’s concerns.

There’s Still More…

The final point I want to make however is that “we welcome people” is a necessary, but not sufficient step. Yes, I will say pretty much every caver I know will welcome anyone who shows an interest. But that’s not enough. For one thing, for many communities, simply enjoying the outdoors is something that’s not a large part of their cultural.  This may mean that they’re not even aware that caving is a possibility. Or that even if it is, they may not know how to reach out and find someone to take them caving.

Even if they overcome that hurdle, while caving can be done on the cheap, there is still the matter of getting some clothing, a helmet, some lights. There’s the matter of getting TO the cave.

In the SQL world, yes anyone is welcome to a SQL Saturday, but what if they don’t have a car? Is mass transit an option? What if they are hearing impaired? (I’ve tried unsuccessfully 2 years in a row to try to provide an ASL interpreter for our local SQL Saturday. I’m going to keep trying). What if they’re a single parent? During the work week they may have school and daycare options, but that may not be possible for a SQL Saturday or even an afterhours event. I even had something pointed out to me, during my talk on how to present, that someone in the audience had not realized up until I mentioned it, that I was using a laser pointer. Why? Because they were colorblind and never saw the red dot. It was something that I, a non-colorblind person had never even considered. And now I wonder, how many other colorblind folks had the same issue, but never said anything?

In Conclusion

It’s easy and honestly tempting to say, “hey, we welcome anyone” and think that’s all there is to it. The truth is, it takes a LOT more than that. If nothing else, if you’re like me, an older, cis-het white male, take the time to sit in on various diversity panels and LISTEN. If you’re invited to ask questions or participate, do so, but in a way that acknowledges your position. Try not to project your experiences on to another. Only once have I avoided a field to get to a cave, because the farmer kept his bull there. But I should not project MY lack of fear about crossing a field onto members of the community who HAVE experienced that.

Listen for barriers and work to remove them. Believe others when they mention a barrier. They may not be barriers for you, but they are for others. When you can, try to remove them BEFORE others bring them up. Don’t assume a barrier doesn’t exist because no one mentions it. Don’t say, “is it ok if I use a red laser pointer?” because you’re now putting a colorblind person on the spot and singling them out. That will discourage them. For example find a “software” pointer (on my list of things to do) that will highlight items directly on the screen. This also works great for large rooms where there may be multiple projection screens in use.

If caving, don’t just assume, “oh folks know how to find us” reach out to community groups and ask them if they’re interested and offer to help. (note I did try this this year, but never heard back and because of the impact of Covid, am waiting until next year to try again.)

Don’t take offense. Unless someone says, “hey, Greg, you know you do…” they’re not talking about you specifically, but about an entire system. And no one is expecting you to personally fix the entire system, but simply to work to improve it where you can. It’s a team effort. That said, maybe you do get called out. I had a friend call me out on a tweet I made. She did so privately. And she did so because, she knew I’d listen. I appreciated that. She recognized I was human and I make mistakes and that given the chance, I’ll listen and learn. How can one take offense at that? I saw it has a sign of caring.

Finally realize, none of us are perfect, but we can always strive to do better.

So, today give some thought about how you can not only claim your community, whatever it may be, is welcoming, but what efforts you can make to ensure it is.

 

On a separate note, check out my latest writing for Red-Gate, part II on Parameters in PowerShell.