Author: way0utwest

  • A Double Day

    I’m traveling back from Australia today. A few weeks ago I lost a day when I flew West across the Pacific. Today I get it back, with a different sort of time travel. I’ll leave Melbourne at 9:30am and land in Los Angeles at 6:30am.

    Three hours before I leave.

    Of course, but the time I get to Denver, I’ll be a little tired. Hopefully I get back on schedule quickly as work starts again tomorrow.

  • Republish: VMs are not VMs

    The last SQL in the City today for June. I’m in Melbourne, so you get VMs are not VMs.

  • Upgrading Your OS

    I loved Windows 7. I haven’t felt that way about many of the Windows systems. I tolerated 3.1, preferring DOS and Solaris at the time. Windows 95 was great, with me skipping Windows 98 after installing it on a few PCs at work. I thought Windows 2000 was OK, and did really like XP. I avoided Vista, running XP until I got a beta of Win 7. Then I thought Microsoft had made a great move, slimming down the OS and making it faster on the same hardware.

    I skipped Windows 8 and moved to Windows 10, so I guess I like every other version of Windows. That makes sense. I’ve often felt every other version of SQL Server was really good, with some slim, not quite sure I like this, not quite sure this is worth the money, in-between versions. That might be changing as I liked SQL Server 2016, 2017, and 2019 is looking good.

    I ran across an article on the move to Windows 10, which Microsoft has been pushing and which as proceeded very well. Many people upgraded, especially with the free offer to upgrade. However, the pace of change has leveled off, with Windows 10 at 44% recently and Windows 7 at nearly 37%. The disconcerting issue is that the latter number has barely changed from the end of 2018. With Windows 7 expected to EOL in Jan of 2020, Microsoft is trying to push people forward.

    There are all sorts of reasons people are loathe to update their OS. Compatability issues, the comfortable feeling of knowing how a system works, and certainly resource concerns. I wish security was a higher level of concern for more people. When Win7 EOLs, enterprises can pay $200/yr/machine to get patches, but there is no option for Home users. I think this is a little short sighted as many Home users might not see value in upgrading, but they (and the rest of us) need secure machines on the Internet. Why wouldn’t a $50/yr charge for security patches make sense?

    Modern hardware is powerful and lasts longer, so I could understand an individual that started running the OS in 2011 not seeing a need to change. They are happy with a PC that runs email, browses the web, plays solitaire, and manages money. Do these people need to upgrade to Win 10? I don’t know that they do, and the vast majority of the world are consumers, not creators, so the much of the work done in Win10 isn’t useful for them.

    There isn’t a right answer here, and certainly there are security concerns from an older OS, but at some point the OS and hardware will be good enough for most people to stick around a long time. Microsoft ought to be prepared in those cases to enable very long term support, perhaps with some yearly charge, to provide patches to the OS. I don’t know if Win7 is the place to do that, but I do think that Win10 ought to be around for a long, long time with paid support.

    Steve Jones

    Listen to the podcast at Libsyn.

  • Simulating Load

    I needed to generate some load for a demo and wasn’t looking forward to doing it. I was in a hurry, and didn’t want to deal with a lot of setup. Fortunately, I’d seen a technique for doing this in one of Brent Ozar’s classes. I’d taken a couple, and they’re good. One of the items I took away was the need to simulate a load that might help me analyze my system.

    Brent’s written about his technique, and I decided to adapt this to my own demo database. I took his code, and then added a few items.

    Examining Parameters

    I was happy with a load of ten items, so that makes things simple. I could reuse most of Brent’s code, but unlike his system, I have different parameters in use for different types of calls. In examining the types of procedures that might generate load, I found I had these types of parameters

    • Integers
    • Dates
    • Strings

    The basic code uses RAND() to generate a number, but what about the other items? I didn’t want scalars, so I needed random other items.

    For dates, I still used a similar random integer, but then used that with DATEADD() to alter an existing date. My code would generate a separate random number and then use that to go backward in time a certain number of days.

    SELECT @off = RAND() * 1000;
    SELECT @dt = DATEADD(DAY, 0 - @off, SYSDATETIME());

    For strings, it was different. In this case, it was search items and while there can be a (seemingly) infinite number of possibilities, I can simulate this. I can select from the table and use a random ordering to get different terms. If this isn’t efficient, that’s fine. I want a load on the system.

    DECLARE @term VARCHAR(100);
    SELECT @term = SearchTerm
    FROM dbo.SearchTerms
    ORDER BY NEWID();
    SELECT @term;

    Once I had these techniques, I built a stored procedure just like Brent’s, and then replaced his procs with my own. I built parameters in front of the CASE statement, and then use the appropriate random parameter for the procs as needed.

    Running the Load

    I used the same SQLQueryStress tool that Brent did, setting the connection credentials, threads, and iterations as needed to generate load. This gives me control over the load I need to generate.

    I had 10 possible procedures, each of which runs with different parameters each time the proc is called. For 100 iterations of 4 threads, I generate 400 calls to my load procedure, which generate 400 random calls to 10 other procs with different parameters

    A quick and dirty load on my server. Not representative of any production load, but good enough to stress the system and let me look for places to tune code. And, a way that I might get some of the weird random things users do.