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中文網其他相關文章!