Home  >  Article  >  Backend Development  >  Is Go SQLCMD slower than the Windows native version?

Is Go SQLCMD slower than the Windows native version?

PHPz
PHPzforward
2024-02-08 23:57:09405browse

Go SQLCMD 比 Windows 原生版本慢吗?

php editor Xiaoxin, do you often use SQLCMD tools to manage and operate databases? Have you ever compared the performance difference between the Windows native version and Go SQLCMD? If you have these questions, then let’s discuss this topic today. In this article, we will compare the performance of these two versions and give the answer, whether Go SQLCMD is slower than the native Windows version. Let’s take a look!

Question content

I have been using Windows local sqlcmd to run scripts on a local SQL Server database. I have a set of script files that create a database, add tables and indexes, populate domain data, add stored procedures, etc. Running the script is accomplished by executing one sqlcmd -i <file>.sql per file. This works well and is fast enough. After switching to the new Go implementation of sqlcmd, database build times are several times slower.

I haven't been able to find any way to get timing type statistics from sqlcmd to determine if it's a connection issue, connection pooling, or something else. I can see what appears to be an improvement if I pass multiple files as additional -i <file.sql> options, which indicates to me that this is either the Go command startup or the initial database connection establishment The problem. p>

I did a test where I took ten SQL files and ran them as ten separate sqlcmd executions and also as one sqlcmd execution, These ten files serve as separate -i input files. Individual commands take 20 seconds, combined commands take 4 seconds. So this seems to be an issue with startup overhead or connection overhead.

Following @siggemannen's suggestion, I tested the connection using AD credentials and a direct database user. AD credentials are much slower than direct database connections, which means this is the source of the slowness I'm seeing in my scenario.

I'm looking for any suggestions or ideas to resolve the issue or troubleshoot further. Is there any way to speed up AD authentication?

Solution

Go sqlcmd is not slower than the native version. Using Windows/AD credentials to establish a connection increases the startup time required to establish the connection and adds additional overhead by running one SQL file for each sqlcmd instance in the use case.

We can rewrite the build script to run many SQL files for each individual sqlcmd, which will restore the performance we need. However, an alternative that we can use without any rework is to use SQL Server level principal sa created when creating the database. This restores performance comparable to native sqlcmd using AD login.

The above is the detailed content of Is Go SQLCMD slower than the Windows native version?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete