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