今天檢視前一日的SQL 效能報表時發現下班前到晚上8點持續有BatchRequest偏高的趨勢
調出前一日的資料看看當下是那些語法在跑導致SQL發生這樣的情形。經過檢視後發現當下是某一位同仁持續用SSMS在Insert資料,但前前後後塞了4小時且還有一堆系統產生的語法夾雜。
因此我請教該同仁當下在做甚麼,他表示是將Excel的資料複製後透過SSMS貼上而已,但是SSMS跑很久且很慢。當下只能解釋給他聽,說大量資料請善用匯入匯出精靈。
以下是一個簡單的LAB來模擬問題。
下圖中紅色圈選處就是SSMS提供的一個功能,該功能是讓我們可以編輯前200筆資料列。
開啟後如下圖右邊,會有一個表格,我們就可以輕易地用這一個UI來新增刪除或修改資料。
在該表格按滑鼠右鍵時還可以發現這UI有 貼上 資料的選項。
此時我開啟一張Excel表,然後選取並複製4筆資料出來。
接下來我直接在SSMS上貼上資料。
如下圖所示,4筆資料被貼到資料表內了。 哇 ! 這功能這樣好用為何不要拿來貼大量資料呢? 因為魔鬼往往藏在細節裡,讓你越簡單的操作就表示很多步驟是SSMS私底下做掉了。
要知道SSMS到底做了哪些事,此時就得召喚出DBA的好朋友Profiler登場。如下圖所示我只錄製RPC:Completed及SQL:BatchCompleted兩個事件,然後只監測adminDB這一個資料庫。
這次我只在Excel中複製一筆資料到SSMS中貼,看看單一筆資料會做多少動作。
登!登!登!登! 下圖中是我貼一筆資料後Profiler錄到的事件,整整做了20個動作。而Insert的動作只是20個中的1個(如下圖紅色圈選處)。
我是ROCK
rockchang@mails.fju.edu.tw