Performance
在具有相同權限的使用者之間執行 alter 和 grant 語句的顯著性能差異
alter
在執行和grant
語句時,我在具有相同權限的使用者之間遇到了顯著的性能差異。我有一個自動建構系統,它執行一系列用於數據庫更改的 SQL 腳本——主要是
alter table
,alter procedure
和相關grant
語句。在嘗試更改建構過程中的某些內容(包括在不同的使用者帳戶下執行)時,我注意到執行腳本的目前帳戶執行腳本的速度比任何其他使用者快 100 倍 - 即使是具有完全相同權限和歸屬的使用者到同一個 Active Directory 組。我測試了 SQL 登錄和 Windows 身份驗證,結果基本相同。
在所有情況下,建構過程都通過 C# 腳本執行。該腳本只正確打開一次連接,執行所有語句,然後關閉。這對所有使用者來說都是一樣的。腳本本身由批處理文件呼叫,而批處理文件又由 CI 工具呼叫。
執行此腳本的目前建構使用者的平均執行時間是每條語句 12 毫秒,而任何其他使用者的平均執行時間是每條語句 275 毫秒。
哪些可能的原因可能導致這種性能差異?
TL;博士; 檢查數據庫觸發器
事實證明,這是一個非常狹窄、獨特的問題——但其他人可能會在類似的設置中遇到這個問題。
性能問題是由在 、 和 語句上呼叫的數據庫觸發器引起的
grant
,create
並且alter
基於使用者,執行了額外的(有時是繁重的)邏輯。這些觸發器為我正在測試的帳戶執行額外的邏輯,但不是原始帳戶。