Author: way0utwest

  • Removing a PowerShell Array Element–#SQLNewBlogger

    I saw an article on this and realized I had no idea how to do this, so I decided to practice a bit. I don’t work with PoSh arrays a lot, but with more and more DevOps work needing complex scripting, PoSh is a better environment for me than bash. At least for now.

    This post looks at the basics of creating an array and then removing elements.

    Another post for me that is simple and hopefully serves as an example for people trying to get blogging as #SQLNewBloggers.

    Creating a PoSh Array

    Creating an array in PowerShell is relatively easy. I use a variable and the @ sign, enclosing the elements inside parenthesis with comma separation. In code, that looks like this:

    $servers = @("server1", "server2", "server3")

    or this:

    $numbers = @(1,2,3,4,5,6,7,8,9,10)

    If I were to reference an array, I’d get results like this:

    PS E:\Documents\git\sqlsatwebsite> $servers
    server1
    server2
    server3

    PS E:\Documents\git\sqlsatwebsite> $numbers[2]
    3

    
    

    As you can see, I can get all elements or a single element with an index inside brackets. Note that the array is zero indexed as the index of 2 returns the third element.

    In code, I might use other variables to represent the index or maybe to store the results of an array. If I were trying to brute force the removal of an element, I might decide to copy items one at a time (iterating through the index and skipping the copy if I reached an item to skip.

    Removing an Element – Kind of

    The way to remove this is deceptively simple. The article referenced above shows the easy way, which is to set an element to $null. I’d have never thought of that, as I’d assume this would leave the element, but change the key.

    If I want to remove 5, I’d set $numbers[4]=$Null. Crazy, but let’s see this work. First, I’ll iterate the array, printing each index and the value with this code:

    for ($i = 0; $i -lt $numbers.Length; $i++) {

    Write-Host $i : $numbers[$i]

    
    

    }

    When I run this, I see these results:

    0 : 1
    1 : 2
    2 : 3
    3 : 4
    4 : 5
    5 : 6
    6 : 7
    7 : 8
    8 : 9
    9 : 10

    Now, I’ll run this:

    $numbers[4]=$null

    Now we re-run the iteration and see these results:

    0 : 1
    1 : 2
    2 : 3
    3 : 4
    4 :
    5 : 6
    6 : 7
    7 : 8
    8 : 9
    9 : 10

    Hmmm, the element is gone and isn’t. Nothing has moved, and in fact, the value of 6 remains in index 5. If I try to get element at index 4, I get this:

    2023-12-01 13_34_55-Window

    It’s not there, but the spot is held. That’s somewhat what I’d expect.

    Removing an Item – The Better Way

    PowerShell has a lot of flexibility in how variables work and how queries work. I found another blog that helped me understand a few things and experiment. Look at this code:

    $numbers = $numbers | Where-Object { $_ -ne 5}

    If I run my iterator on $numbers now I see:

    0 : 1
    1 : 2
    2 : 3
    3 : 4
    4 : 6
    5 : 7
    6 : 8
    7 : 9
    8 : 10

    That works much better, since I create a new array.

    Arrays in PowerShell are funny things, and the docs show some of the methods available don’t change the size of an array, they just operate on it. There isn’t a remove method, which is interesting. There is a Remove-Item cmdlet, but even the docs say assigning $null is faster. However, it doesn’t get the indexing right.

    If you have a better method, let me know.

    SQL New Blogger

    I spent about 10-15 minutes experimenting in PowerShell on various code elements trying to understand how different methods change the array. I read some docs, and ended up taking another 15 minutes to write this post and copy over some code.

    This was fun, but it also showcased some learning and methodology. You could easily do the same thing, with PowerShell, T-SQL, or any other coding or scripting you do at work. Show how you experiment and learn.

  • Be Careful with Missing Index Requests

    One of the things that has been interesting to watch over time is how the SQL Server platform has expanded the amount of information that we get back about the performance of the query optimizer and query processor. While it’s not perfect, and there is room for improvement, the advances made with intelligent query processing are helping many systems run faster. Not all queries, but some.

    As I’ve done a little work on other platforms, there are ways to look for potential missing indexes in PostgreSQL and MySQL, but these aren’t built into tools, nor are they easily accessible to developers or DBAs. There’s work to be done on many platforms, though I’m not sure if there is more work than required in SQL Server. On all these platforms, you need to dig into queries and understand why they are slow, though the tooling for SQL Server, with graphical plans in SSMS (or with Plan Explorer) can make the job easier.

    One thing SQL Server does is provide missing index recommendations in the query plan. You can find information on this in the docs, but you should make sure you read the limitations section. The recommendations returned should not just be run. I should repeat that for junior DBAs, accidental DBAs, and developers:

    DO NOT JUST RUN THE MISSING INDEX RECOMMENDATIONS WITHOUT TESTING LOTS OF QUERIES.

    I hate using all caps, but that is important. As an example of why, watch this short video from Erik Darling, where he shows that the simplistic view of the missing index is helpful, but not as helpful as it can be. In case that’s not enough, there are other issues that Brent Ozar, Phil Factor, and Aaron Bertrand share some of the problems they’ve found.

    There is a wealth of information that is available about queries in SQL Server and how they are processed. It will help you in your career to learn more about performance tuning and how to evaluate queries. We have articles here, there are more on Simple Talk, and Erik Darling produces information every week and also has training to help you learn to tune queries better. There are plenty of others that will help teach you as well.

    Maybe the best benefit of learning about tuning is that you can learn to write better queries the first time, which means no rework, no effort responding to complaints, and a cheaper bill if you move into the cloud. That might be something you point out to your boss and ask him or her to fund a little education to help you and your employer.

    Steve Jones

    Listen to the podcast at Libsyn, Spotify, or iTunes.

  • Using ThinOptics to Read Data

    As I’ve aged, I find myself struggling to read many things in my life. It started with difficulties seeing menus, but moved on to other areas. During the pandemic, I was coaching kids and taking stats. I realized at one point I couldn’t tell if I’d made 3 or 4 marks on the page to represent some action.

    Soon after, I got some reading glasses and started wearing them to do certain things. Over time, I’ve found that I needed these more and more for all sorts of computer work.

    I’ve actually ended up purchasing a few pairs and stashing them in various coats, bags, and cars. I’ve liked these slim ones with a hard case the best, but I still sometimes forget them, especially in the summer when I don’t wear a coat.

    Recently, I realized that I am struggling to read the labels in grocery stores, where I often run inside and forget my readers in the car. After we had a good laugh, my wife realized that I am a bit frustrated with my eyes and the inability to consume data in my daily life.

    ThinOptics

    My wife has taken pity on me, and decided to help me. She got me a pair of ThinOptics, which are in a case that sticks to my phone. You can see what I got in the mail below:

    These are flexible bodies that slip into a case that is always on my phone. I wasn’t sure this would work well, but I find I can still charge my phone wirelessly as well as pay with NFC despite the case being attached to the back of my phone.

    What’s more, they are always with me.

    I still prefer the slim REAVEE readers, and carry those in my bag, but I find the ThinOptics are very convenient. They do grab my nose a bit and feel like they are scratchy at times, but it’s not too bad.

    If you are struggling to read as you get older, you might check them out and see if they help you as much as they’ve helped me.

  • The Balanced Technical Manager

    I find there to be a lot of value in actively managing your career. This is part of a series of editorials based on advice I’ve read from Raylene Yung (Facebook and Stripe) on your engineering career.

    In the last few years I’ve started to see a number of organizations find ways to build technical career growth paths that don’t require someone to become a manager. A lot of technical people don’t want to manage others, and I’d argue that making the best technical person the lead or manager isn’t often the best decision. Those are two different skill sets and success in one doesn’t predict success in the other.

    There are technical people who would like to move into management. If you are one of those people, then you ought to tackle building skills in that area just as you might tackle learning Power BI, SQL window functions, or any other skill.

    Management requires a few different skills. Project management is important, as you will often be balancing a variety of work tasks for your direct reports. Another set of skills is people skills: leadership, listening, evaluating, and having hard conversations, none of which are easy.

    Part of the advice for technical people wanting to be managers is that you have to work on your emotional equilibrium, as the way your job works as a manager is different from that of an engineer. Your view of success, happiness, and your emotional takeaway from daily work is different. You also have to view the workings of your team at a higher level, understanding that your focus and goals can be slightly different than those of your engineers.

    I think you also have to learn to make hard decisions on what to prioritize or how to distribute your staff among the competing demands you face. Learning to make decisions and move forward, as well as apologize and change course when you realize you’ve made a mistake is something relatively few people do well.

    It’s also important to recognize that as your team grows, something will always be wrong. In any size organization, you’ll have a birthday every month and likely some sort of illness or other negative action. Have a large enough organization and someone will die on a regular basis. Keeping yourself balanced when something is always wrong (and something is always right) can be a challenge.

    Having done these jobs, I do think that one way to test the waters is to ask to lead a team on a small project. Getting a feel for balancing work, and learning that management is work that needs to be done differently, can help you decide if you want to go down this path. It’s not for everyone, but becoming a manager can be a good career path, though not necessarily easier than writing code or managing infrastructure.

    If you want to consider this path, ask others for advice, read books, and learn like you would if someone assigned you a new technology. I’ve enjoyed my time in some companies as a manager, and if I hadn’t been looking to move earlier in my career, I might still be running the technology organization at a previous company. It was one job I really enjoyed.

    Steve Jones

    Listen to the podcast at Libsyn, Spotify, or iTunes.