iT邦幫忙

0

使用SQLCMD 執行查詢非常耗時

  • 分享至 

  • xImage

各位前輩好
小弟目前有一段SQL 語法,於SSMS 執行都可正常執行,耗時約9-10秒即可完成
但如果透過CMD使用SQLCMD 的方式執行,執行的時間會變成1000多秒
請問這種狀況有可能是因為什麼原因

看更多先前的討論...收起先前的討論...
spideregg iT邦新手 5 級 ‧ 2023-10-12 11:20:19 檢舉
語法呢
不好意思礙於公司規定無法提供,這邊想問的是之前排程都能正常執行,現在於SSMS也是正常。
但忽然從某個時間點只要透過CMD的方式都會很慢
想知道這兩種執行方式有什麼差異可能會導致這種情況
fuzzylee1688 iT邦研究生 3 級 ‧ 2023-10-12 11:55:04 檢舉
理論上執行同段SQL 使用SQLCMD文字介面會比使用SSMS圖形介面, 要有效率的, 執行快慢是看DB Server的.
pickuse iT邦新手 4 級 ‧ 2023-10-12 13:22:34 檢舉
「不好意思礙於公司規定無法提供」我會建議你如果你希望別人幫你找到問題或尋求幫助,那你就要提供足夠的資訊,而不是讓大家幫你通靈,通靈會減少別人幫忙你的意願,至少你也要提供相似案例供參考。
抱歉,沒提供語法一來是公司規定,二來是我判斷可能非語法問題
因為相同的語法可以於SSMS 執行,只有在CMD上有問題
後來測試連單純select 語法也非常慢,所以只好上來訊問看看兩種方式執行的差異
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
一級屠豬士
iT邦大師 1 級 ‧ 2023-10-12 11:57:09

Server 會有許多作業在背景跑,正常情況下,也會服務許多連線同時作業,
所以你一道指令的執行速度會變動,是正常的情況.資源被其他連線佔著,
或是你要查詢的table,其他連線正在更新等等,情況非常多.

有檢查過session 連線狀況並沒有太多咬著的問題
也有嘗試將無用的session 清除,但結果還是一樣

0
海綿寶寶
iT邦大神 1 級 ‧ 2023-10-12 13:40:06

現在不流行通靈
改成 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指令本身(及相關)的原因

目前測試連單純select 都會有問題
只好在檢查看看兩邊設置的差異,謝謝

0
wdchiang
iT邦新手 2 級 ‧ 2023-10-12 14:02:28

SSMS 使用 .NET Sql Client Data Provider 是微軟優化過的,所以效能較好。

SQLCMD 使用 ODBC 是一種通用標準接口,相容性較好。

0
fuzzylee1688
iT邦研究生 3 級 ‧ 2023-10-12 15:38:37

看看有沒有在本機hosts檔, 定MS-SQL SERVER DomainName???

0
pilipala
iT邦研究生 5 級 ‧ 2023-10-12 21:39:10

查一下 SSMS 和 sqlcmd 連線的 ANSI 設定是否有差異

0
Hey
iT邦新手 2 級 ‧ 2023-10-13 08:55:18

相差成千秒, 有沒有可能是table lock?
SSMS 與 CMD 的方式, 都是在同一台client, 在差不多同一時間的測試嗎?

0
echochio
iT邦高手 1 級 ‧ 2023-10-14 15:49:41

用 ssms 維護計畫試試
看看是否正常
維護計畫 可排程 也可呼叫外部程式
我是放到裡面處理做 TRUNCATE LOG

GO
EXEC master..xp_CMDShell 'C:\script\do_sent_mail.exe' 

我要發表回答

立即登入回答