Skip to content

通知的三軸分類與可見度 ​

本頁包含三軸、可見度判斷、種類開關、降級與診斷紀錄;來源與合併見通知提示。

Core/Notifications/NotificationVisibility 只篩選通知,不停用工作,也不影響工作階段 統計與診斷紀錄。顯示延遲以篩選後的工作計算,抬頭計數再以合併後的列數計算,兩處都不把 隱藏工作混入分母。三軸都由呼叫端明寫,不比對顯示名稱、不吃預設值,漏寫的接線點編譯不過; 合併的巢狀查詢沿用父工作的三軸。

  • NotificationKind 是子系統:Metadata、Completion、Analysis、Preview、Editing、 Navigation、Results、Snippets、Settings、Package、SqlMemory、Search、Update、Diagnostics、Unclassified; 除了 Update 與 Diagnostics 各有一格開關,共十二格。
  • NotificationOrigin 是觸發來源:User、Typing、Ambient、Startup。
  • NotificationLevel 是詳細度:Trace、Debug、Info、Notice。

「做什麼」與「誰觸發的」拆成兩軸:塞在同一個 enum 時,使用者操作觸發的中繼資料查詢合併後 變成使用者動作,「中繼資料」開關就管不到它。

Origin 為 User 的一律顯示,因此只有真的由使用者按鍵或命令觸發的才標它;輸入時反覆 觸發的標 Typing,預載、快取重整與重新確認標 Ambient,套件與工作階段啟動標 Startup。

已接線的種類與來源如下,同一列的來源是接線點寫死的值,中繼資料第二、四層由呼叫端傳入:

種類接在哪來源等級
MetadataSqlMetadataCatalog.TryLoad 的七條查詢、跨資料庫與連結伺服器跳躍、快取命中前景查詢與清單類 Typing、預載 Ambient、第二與第四層依呼叫端Info;連結伺服器 Notice、快取命中 Trace
Completion準備、排序、篩選建議清單,載入說明,解析限定名稱,純量函式參數提示浮出(事件)Typing準備清單 Info,其餘 Debug
Analysis背景分析 T-SQL 區塊TypingDebug
Preview準備物件提示、載入結構預覽、更新預覽選取、產生物件指令碼、執行結構健檢提示與預覽 Typing,指令碼與健檢 User提示與預覽 Info,選取與健檢 Debug
Editing展開語句樣板、展開 SELECT *UserInfo
Navigation移至定義、產生定義指令碼、開啟新查詢視窗User前兩者 Info,開視窗 Debug
Snippets展開程式碼片段UserDebug
Settings重新載入設定、重建主題筆刷Ambient設定 Debug、主題 Trace
Package初始化 SqlAssist、建立中繼資料連線、重新確認連線初始化 Startup,其餘 Ambient初始化與建立連線 Info、重新確認 Debug
SqlMemory啟用/停用、自我測試、整理、維護、清除、備份、重建、回溯;列操作與多選動作(複製、開新 Query、收藏、刪除);擷取被丟棄事件;容量警戒與首次擷取兩則提醒套用設定、事件與提醒 Ambient,其餘 UserInfo;事件與提醒 Notice、背景維護失敗 Debug
SearchSQL Search 的複製(限定名稱、清單、定義)、套用查詢視窗連線、搜尋失敗、預覽標不齊命中(降級)、未接住的操作失敗;移至定義與在物件總管中選取歸 NavigationUserInfo
Update手動檢查更新的活動;新版提醒手動 User,啟動時的自動檢查 Ambient手動 Info,自動 Notice
Diagnostics「關於與診斷」的測試通知UserInfo
UnclassifiedSqlAssistPlatformGuard 的 Run 一族攔下的未預期例外(事件,一律失敗)AmbientNotice
Results尚未接線——

判斷順序 ​

提醒只看總開關與種類開關,不看詳細度、來源、失敗與降級通道:它是要使用者決定的事, 不是降噪的對象。沒有開關的 Update 與 Diagnostics 在種類那一步一律通過。活動依序判斷: 總開關 → Failed 看「顯示所有種類的失敗」→ Degraded 看「顯示部分成功」→ 該種類的開關關著就隱藏 → Trace 在詳細度不是「全部」時隱藏 → Origin 為 User 顯示 → Notice 顯示 → 其餘看詳細度門檻。

種類開關排在觸發來源之前:Editing、Navigation、Snippets 這幾類的通知全由使用者觸發, 排在後面的話那幾格永遠按不動,使用者分不出「沒有開關」與「開關失效」。來源與詳細度只決定 跨不跨得過降噪門檻,不覆寫種類開關。

預設關著的是 Completion、Analysis、Preview、Package 這四個高頻種類,其餘八個預設開, Unclassified 也在其中,漏分類的新工作不會靜默消失。Update 沒有開關:自動檢查由「一般」頁的 「啟動時檢查有沒有新版本」管,手動檢查是使用者自己按的,一律顯示;兩個旋鈕管同一件事,關掉其中 一個的人分不出「沒有新版」與「被自己關掉了」。Diagnostics 也沒有:只有使用者按測試才出現, 用途就是確認通知看不看得到。

種類開關集中在 NotificationKindToggle.All 的 (Kind, moniker, 預設值, 標題);設定存 NotificationKindSwitches 遮罩、SqlAssistMonikers.All 併入表上的 moniker, 新增一類只動註冊檔與這張表——逐項屬性要同時動四處,漏掉哪一處都沒有編譯錯誤。表上沒有的種類 由 Governs 回答,診斷頁的名稱走 Label。遮罩取列舉序數但從不落地,存下來的是每一類自己的 moniker,列舉中間插入新種類不必搬遷。

詳細度下拉四階對上 NotificationLevel:安靜 Notice、一般 Info、詳細 Debug、 全部 Trace。Trace 量大到會洗掉畫面,只有明選「全部」才放行,使用者剛觸發的也一樣。

降級、等級與診斷 ​

Degraded 對應 Severity.Warning:子工作失敗只把父工作標成降級,只有父工作自己的例外 才是失敗——中繼資料查詢對 DbException 一律降級,否則一次可正常降級的欄位查詢會讓整個 「按 Tab 展開」顯示為失敗。結果只往上升級:失敗、降級、取消、成功。降級不進「通知失敗」 列表,但沿用較長的保留期限。

詳細診斷開啟時,每個獨立工作完成寫一筆 id/kind/severity/status/elapsedMs;不寫來源、 SQL 或訊息。紀錄進有界佇列後由背景批次寫檔,不在完成工作的那條執行緒上開檔;佇列滿了 只記下略過幾筆,讀取紀錄與套件卸載前都會先倒完。通知隱藏不影響詳細紀錄與最近失敗。 「通知失敗」頁顯示相同 ID、種類、等級與耗時,可與 log 對照。

以 Apache-2.0 授權條款發布 · 專為 SSMS 22 設計