Performance

在具有相同權限的使用者之間執行 alter 和 grant 語句的顯著性能差異

  • May 6, 2021

alter在執行和grant語句時,我在具有相同權限的使用者之間遇到了顯著的性能差異。

我有一個自動建構系統,它執行一系列用於數據庫更改的 SQL 腳本——主要是alter table,alter procedure和相關grant語句。

在嘗試更改建構過程中的某些內容(包括在不同的使用者帳戶下執行)時,我注意到執行腳本的目前帳戶執行腳本的速度比任何其他使用者快 100 倍 - 即使是具有完全相同權限和歸屬的使用者到同一個 Active Directory 組。我測試了 SQL 登錄和 Windows 身份驗證,結果基本相同。

在所有情況下,建構過程都通過 C# 腳本執行。該腳本只正確打開一次連接,執行所有語句,然後關閉。這對所有使用者來說都是一樣的。腳本本身由批處理文件呼叫,而批處理文件又由 CI 工具呼叫。

執行此腳本的目前建構使用者的平均執行時間是每條語句 12 毫秒,而任何其他使用者的平均執行時間是每條語句 275 毫秒。

哪些可能的原因可能導致這種性能差異?

TL;博士; 檢查數據庫觸發器

事實證明,這是一個非常狹窄、獨特的問題——但其他人可能會在類似的設置中遇到這個問題。

性能問題是由在 、 和 語句上呼叫的數據庫觸發器引起的grantcreate並且alter基於使用者,執行了額外的(有時是繁重的)邏輯。

這些觸發器為我正在測試的帳戶執行額外的邏輯,但不是原始帳戶。

引用自:https://dba.stackexchange.com/questions/290674