首頁  >  文章  >  後端開發  >  Go SQLCMD 比 Windows 原生版本慢嗎?

Go SQLCMD 比 Windows 原生版本慢嗎?

PHPz
PHPz轉載
2024-02-08 23:57:09453瀏覽

Go SQLCMD 比 Windows 原生版本慢吗?

php小編小新,你是否常用SQLCMD工具來管理和操作資料庫?你是否曾經比較過Windows原生版本和Go SQLCMD的效能差異?如果你有這些疑問,那麼今天我們就來探討這個主題。在本文中,我們將比較這兩個版本的效能,並給出答案,Go SQLCMD是否比Windows原生版本慢。讓我們一起來看看吧!

問題內容

我一直在使用 Windows 本機 sqlcmd 在本機 SQL Server 資料庫上執行腳本。我有一組腳本文件,用於建立資料庫、新增表格和索引、填充網域資料、新增預存程序等。運行腳本是透過每個檔案執行一個 sqlcmd -i <file>.sql 來完成的。這運作良好且足夠快。 切換到 sqlcmd 的新 Go 實作後,資料庫建置時間慢了幾倍。

我一直無法找到任何方法從sqlcmd獲取計時類型的統計資料來確定是否是連接問題、連接池或其他問題。如果我將多個文件作為附加的-i <file.sql> 選項傳遞,我可以看到看起來有什麼改進,這向我表明這是Go 命令啟動或初始資料庫連接建立的問題。 p>

我做了一個測試,我拿了十個SQL 文件,並將它們作為十個單獨的sqlcmd 執行來運行,也作為一個sqlcmd 執行來運行,這十個檔案作為單獨的-i 輸入檔。單獨的命令需要 20 秒,綜合命令需要 4 秒。因此,這似乎是啟動開銷或連線開銷的問題。

根據 @siggemannen 的建議,我使用 AD 憑證和直接資料庫使用者測試了連線。 AD 憑證比直接資料庫連線慢得多,這意味著這是我在場景中看到的緩慢的根源。

我正在尋找任何建議或想法來解決問題或進一步排除故障。有什麼辦法可以加快 AD 身份驗證的速度嗎?

解決方法

Go sqlcmd 並不比原生版本慢。使用 Windows/AD 憑證建立連線會增加建立連線所需的啟動時間,並且在用例中為每個 sqlcmd 執行個體執行一個 SQL 文件,這會增加額外的開銷。

我們可以重新編寫建置腳本,以便為每個單獨的 sqlcmd 運行許多 SQL 文件,這將恢復我們所需的效能。但是,我們無需任何返工即可使用的替代方案是使用 SQL Server 級別主體 sa 在建立資料庫時建立。這恢復了與使用 AD 登入的本機 sqlcmd 相當的效能。

以上是Go SQLCMD 比 Windows 原生版本慢嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除