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!

New Pluralsight course: SQL Server: Using SentryOne Plan Explorer

Jonathan’s latest Pluralsight course has been published: SQL Server: Using SentryOne Plan Explorer. It’s almost 3 hours long, and from the course description:

Query plan analysis is both a science and an art, and the best tool for the job is SentryOne Plan Explorer. In this course, SQL Server: Using SentryOne Plan Explorer, you will learn how to make the most of the tool to make query plan analysis and performance tuning much easier and more intuitive than using SQL Server Management Studio. First, you will gain an understanding of how Plan Explorer compares to Management Studio, demonstrating how Plan Explorer solves the problems and shortcomings that Management Studio has. Next, you will discover how to use the the Plan Explorer user interface, including how the various information displays can help with performance analysis and tuning, and the various methods for getting query plans into the tool. Finally, you will explore how to use the more advanced features of the tool like index and statistics analysis, and profiling query performance using live query statistics. When you are finished with this course, you will have the skills and knowledge to start using the powerful SentryOne Plan Explorer tool to greatly improve your query plan analysis and performance tuning capabilities.

It’s a complete update for his 2013 course, and covers the very latest release of SentryOne’s fantastic (and free!) tool.

The modules are:

  • Introduction
  • Comparing Plan Explorer to SSMS
  • Using the Plan Explorer UI
  • Getting Execution Plans to Plan Explorer
  • Using Index and Statistics Analysis
  • Profiling Query Performance

Check it out here.

We now have more than 180 hours of SQLskills online training available (see all our courses here), all for as little as $29/month through Pluralsight (including more than 6,000 other developer and IT training courses). That’s unbeatable value that you can’t afford to ignore.

Enjoy!