Wait statistics workshop at SQLBits in London 2020 – finally!

We’re coming to SQLBits finally! Both Kimberly and I will be there for the first time in London in March/April – at long last the dates work for us – plus Erin will be there again too.

The training day schedule for the conference has been announced, and I will be presenting a full-day preconference workshop on Tuesday, 31st March. My workshop, Performance Troubleshooting using Waits and Latches, is my favorite thing to teach (yes, even more than corruption and DBCC CHECKDB!) and I really love helping people understand the common waits and debunking myths and misconceptions around them. Don’t waste time when it comes to performance troubleshooting; wait statistics are the easiest route to understanding your performance problems and I want to help you get there faster!

We’ve heard really good things about SQLBits so we’re really looking forward to going – hope to see you there!

PS Note that this will be the only chance to see us in Europe in 2020 as we won’t be back with Immersion Events in the UK until 2021.

Calling all user group leaders! We want to present for you in 2020!

By the end of December, we at SQLskills will have presented remotely (and a few in-person) to more than 100 user groups and PASS virtual chapters around the world in 2019!

We’d love to present remotely for your user group in 2020, anywhere in the world, as long as the time/timezone works reasonably. It’s not feasible for us to travel to user groups or SQL Saturdays unless we’re already in that particular city, but remote presentations are easy to do and are becoming more and more popular. We haven’t had any bandwidth problems doing remote presentations in 2019 to groups as far away as Australia and India, plus Canada and many countries in Europe. This way we can spread the community love around user groups everywhere that we wouldn’t usually get to in person.

Note: we have our own Webex accounts which we generally use, or we can use your GoToMeeting or Webex, but you must use computer audio – we won’t call in by phone as the sound quality is too poor. We also will not use Skype/Lync as we’ve had too many problems with it around user group laptops and sound.

So, calling all user group leaders! If you’d like one of us to present remotely for you in 2020 (or maybe even multiple times), send me an email and be sure to include:

  • Details of which user group you represent (and if sending from a shared user group account, your name)
  • The usual day of the month, meeting time, and timezone of the user group
  • Which months you have available, starting in January 2020 (a list of available dates would be ideal)
  • Whether you’d like just one or multiple

And I’ll let you know who’s available with what topics so you can pick. We have 12 favorite topics across the team that we can present on.

What’s the catch? There is no catch. We’re just continuing our community involvement next year and we all love presenting :-)

There’s no deadline for this – send me an email at any time and we’ll see what we can do.

We’re really looking forward to engaging with you all!

Cheers

The Curious Case of… the failing SQL Server 2019 install

(The Curious Case of… used to be part of our bi-weekly newsletter but we decided to make it a regular blog post instead so it can sometimes be more frequent. It covers something interesting one of us encountered when working with a client, doing some testing, or were asked in a random question from the community.)

This time the Curious Case is about something that happened to me: a failing SQL Server 2019 install.

I have a brand new Windows 10 laptop that I use solely for teaching, as the HDMI and SVGA connectors on my main laptop somehow have bad connections to the motherboard after a few years of traveling around the world. On the new laptop I have SQL Server 2017, and now that SQL Server 2019 RTM has shipped, and I’ve finished teaching for the year, I set out to install 2019 side-by-side with 2017 so I can move my teaching environment to 2019 and work on demos of the new features pertinent to what I teach.

Thinking this would be a smooth process, I kicked off the install wizard, went through it, hit go, and walked away. I came back half an hour later to see that all install steps had failed. I thought maybe it was some dependency issue, so did it all again, hit go and watched. Almost instant failure again.

The setup summary had this really unhelpful summary:

Overall summary:
Final result: Failed: see details below
Exit code (Decimal): -2068643839
Start time: 2019-11-23 14:27:14
End time: 2019-11-23 14:30:28
Requested action: Install

Setup completed with required actions for features.
Troubleshooting information for those features:
Next step for sql_inst_java: Use the following information to resolve the error, and then try the setup process again.
Next step for sql_inst_mpy: Use the following information to resolve the error, and then try the setup process again.
Next step for sql_inst_mr: Use the following information to resolve the error, and then try the setup process again.
Next step for AdvancedAnalytics: Use the following information to resolve the error, and then try the setup process again.
Next step for SQLEngine: Use the following information to resolve the error, and then try the setup process again.
Next step for Replication: Use the following information to resolve the error, and then try the setup process again.
Next step for SNAC_SDK: Use the following information to resolve the error, and then try the setup process again.

So I dug in to the Detail.txt file in C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log\20191123_142713 and eventually found the first thing that failed:

(01) 2019-11-23 14:30:23 Slp: Running Action: Install_sqlncli_Cpu64_Action
(01) 2019-11-23 14:30:23 Slp: SetFeaturePropsModifyInstallAction for sqlncli_Cpu64 
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to create base registry key HKEY_LOCAL_MACHINE, machine 
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to open registry subkey 
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to open registry subkey SOFTWARE\Microsoft\Microsoft SQL Server\RefCount\SNAC11
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to create base registry key HKEY_LOCAL_MACHINE, machine 
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to open registry subkey 
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to open registry subkey SOFTWARE\Microsoft\VisualStudio\14.0
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to get registry value InstallDir
(01) 2019-11-23 14:30:23 Slp: Checkpoint: PREINSTALL_SQLNCLI_CPU64_ACTION
(01) 2019-11-23 14:30:23 Slp: Sco: Waiting for service 'msiserver' to accept the stop request.
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to open SC Manager
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to open service handle for service msiserver
(01) 2019-11-23 14:30:23 Slp: Invoking QueryServiceStatus Win32 API
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to close service handle for service msiserver
(01) 2019-11-23 14:30:23 Slp: Sco: Attempting to close SC Manager
(01) 2019-11-23 14:30:23 Slp: Target package: "E:\1033_ENU_LP\x64\setup\x64\sqlncli.msi"
(01) 2019-11-23 14:30:23 Slp: InstallPackage: MsiInstallProduct returned the result code 1602.
(01) 2019-11-23 14:30:23 Slp: No retry-able MSI return code detected.
(01) 2019-11-23 14:30:23 Slp: ExecuteActionWithRetryHelper.Failed actionToExecute is 'Install_sqlncli_Cpu64_Action', stack trace    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<>c__DisplayClass2_0.<ExecuteActionWithRetryHelper>b__0()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker workerDelegate)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionWithRetryHelper(WorkflowObject metaDb, ActionKey action, ActionMetadata actionMetadata, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionEngine.RunActionQueue()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<>c__DisplayClass2_0.<ExecuteActionWithRetryHelper>b__0()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker workerDelegate)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionWithRetryHelper(WorkflowObject metaDb, ActionKey action, ActionMetadata actionMetadata, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionEngine.RunActionQueue()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.Workflow.RunWorkflow(WorkflowObject workflowObject, HandleInternalException exceptionHandler)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<>c__DisplayClass2_0.<ExecuteActionWithRetryHelper>b__0()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker workerDelegate)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionWithRetryHelper(WorkflowObject metaDb, ActionKey action, ActionMetadata actionMetadata, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionEngine.RunActionQueue()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.Workflow.RunWorkflow(WorkflowObject workflowObject, HandleInternalException exceptionHandler)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<>c__DisplayClass2_0.<ExecuteActionWithRetryHelper>b__0()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker workerDelegate)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionWithRetryHelper(WorkflowObject metaDb, ActionKey action, ActionMetadata actionMetadata, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionEngine.RunActionQueue()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Setup.Chainer.Workflow.Workflow.RunWorkflow(WorkflowObject workflowObject, HandleInternalException exceptionHandler)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Chainer.Setup.Setup.RunRequestedWorkflow()
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Chainer.Setup.Setup.Run(String[] args)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Chainer.Setup.Setup.Start(String[] args)
(01) 2019-11-23 14:30:23 Slp:    at Microsoft.SqlServer.Chainer.Setup.Setup.Main()
(01) 2019-11-23 14:30:23 Slp: Error: Action "Install_sqlncli_Cpu64_Action" failed during execution.

And this caused everything else to fail.

I went to Control Panel and looked in Apps and Features, and found Microsoft SQL Server 2012 Native Client. Thinking this was likely the issue, I de-installed it and ran 2019 setup again. Bingo! No problems this time.

I did a bit of poking around online and it’s a known issue that’s described in the 2019 release notes – see this Microsoft blog post.

PS Don’t forget to install the GDR hotfix after installing 2019!