各位前輩好
小弟目前有一段SQL 語法,於SSMS 執行都可正常執行,耗時約9-10秒即可完成
但如果透過CMD使用SQLCMD 的方式執行,執行的時間會變成1000多秒
請問這種狀況有可能是因為什麼原因
Server 會有許多作業在背景跑,正常情況下,也會服務許多連線同時作業,
所以你一道指令的執行速度會變動,是正常的情況.資源被其他連線佔著,
或是你要查詢的table,其他連線正在更新等等,情況非常多.
現在不流行通靈
改成 ChatGPT 了
以下為 ChatGPT 回答
差異如此之大的執行時間差異可能是由多種原因引起的。以下是一些可能導致透過 SQLCMD 的方式執行速度較慢的常見原因:
1. **網絡延遲:** SQLCMD 可能需要花費更多時間與 SQL Server 建立連接,尤其是如果在不同的網絡環境中執行。確保網絡連接是穩定的,並且SQL Server 位於您的 SQLCMD 計算機可以直接訪問的位置。
2. **認證方式:** SQLCMD 可能使用不同的身份驗證方式(例如 Windows 身份驗證或 SQL Server 身份驗證)來連接 SQL Server,這可能會影響連接速度。確保兩種方式的設置都是正確的。
3. **本地設定:** SQL Server 的本地設定,例如日期時間格式、地區和語言,可能會影響執行時間,尤其是如果 SQLCMD 的執行環境與 SSMS 的設定不同。
4. **SQLCMD 設定:** SQLCMD 本身有一些配置選項,例如連接超時時間等,這些可以影響執行速度。檢查 SQLCMD 的設定以確保它們與 SSMS 一致。
5. **查詢計畫:** SSMS 和 SQLCMD 可能在查詢執行期間生成不同的查詢計畫,這可能導致不同的執行效能。使用 SQL Server Management Studio (SSMS) 查看 SSMS 生成的查詢計畫,然後在 SQLCMD 中嘗試相同的計畫。
6. **SQLCMD 命令:** 確保您的 SQLCMD 命令是正確的且不包含不必要的選項或參數。不正確的命令可能導致執行效能問題。
7. **資源限制:** 檢查 SQL Server 的資源限制和查詢執行計畫,以確保不會因為資源限制而導致執行效能下降。
8. **防火牆和安全性設定:** 防火牆和安全性設定可能會影響 SQL Server 和 SQLCMD 之間的通信,這可能導致連接速度變慢。
總之,要解決這個問題,您可能需要比較 SQLCMD 和 SSMS 的設置,並嘗試一些不同的設置來找出根本原因。如果可能,嘗試在相同的環境中執行 SQLCMD 和 SSMS,以減少不同環境引起的影響。
我個人的建議是
多找幾個 SQL 來測試,是否
「用SQLCMD執行都會比SSMS慢一大截」
如果是:就是SQLCMD和SSMS環境設定
的原因
如果否:就是SQL指令本身(及相關)
的原因
SSMS 使用 .NET Sql Client Data Provider 是微軟優化過的,所以效能較好。
SQLCMD 使用 ODBC 是一種通用標準接口,相容性較好。
相差成千秒, 有沒有可能是table lock?
SSMS 與 CMD 的方式, 都是在同一台client, 在差不多同一時間的測試嗎?
用 ssms 維護計畫試試
看看是否正常
維護計畫 可排程 也可呼叫外部程式
我是放到裡面處理做 TRUNCATE LOG
GO
EXEC master..xp_CMDShell 'C:\script\do_sent_mail.exe'