Go SQLCMD比Windows原生版本慢吗?

vmjh9lq9  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(99)

我一直在使用windows原生sqlcmd在本地SQL Server数据库上运行脚本。我有一组脚本文件,可以创建数据库,添加表和索引,填充域数据,添加数据库,等等。运行脚本完成了每个文件执行一个sqlcmd -i <file>.sql。这工作得很好,速度足够快。切换到sqlcmd的新Go实现后,数据库构建时间要慢几倍。
我还没有找到任何方法从sqlcmd获取时间类型的统计信息来确定它是连接问题,连接池还是其他问题。我可以看到如果我传递多个文件作为额外的-i <file.sql>选项,我可以看到什么看起来像是一个改进,这表明这是Go命令启动或初始DB连接建立的问题。
我做了一个测试,我把我的10个SQL文件作为10个单独的sqlcmd执行,也作为一个sqlcmd执行,10个文件作为单独的-i输入文件。单独的命令需要20秒,一体化需要4秒。所以这似乎是一个启动开销或连接开销的问题。
正如@siggemannen所建议的那样,我使用我的AD凭据和直接DB用户测试了连接。AD凭据比直接DB连接慢得多,这意味着这是我在场景中看到的缓慢的根源。
我正在寻找任何建议或想法,以解决问题或进一步排除故障。可以做些什么来加快AD身份验证?

mfuanj7w

mfuanj7w1#

Go sqlcmd并不比原生版本慢。使用Windows/AD凭据建立连接会增加建立连接时的启动时间,并且由于用例为每个sqlcmd示例运行SQL文件,因此额外的开销会增加。
我们可以重新编写构建脚本,以便在每个sqlcmd上运行许多SQL文件,这将恢复我们所需的性能。然而,我们可以使用另一种无需任何修改的方法,即使用在创建数据库时创建的SQL Server-level principalsa进行连接。这将恢复与使用AD登录的本机sqlcmd相当的性能。

相关问题