天天看點

輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  做好日常巡檢是資料庫管理和維護的重要步驟,而且需要對每次巡檢日期、結果進行登記,同時可能需要出一份巡檢報告。

  本系列旨在解決一些常見的困擾:

不知道巡檢哪些東西

不知道怎麼樣便捷體檢

機器太多體檢麻煩

生成報告困難,無法直覺呈現結果

  前面兩篇對伺服器軟硬體配置、資料庫概況進行了巡檢,下面我們要對資料庫的一些結構設計進行檢查,這些檢查主要針對系統開發初期一些不優化的結構設計或在系統不斷有新功能增加或運維變動而産生的結構變化。

  在【檢查項】-【全部】中檢視每個資料庫的資訊,當資料庫結構未通過正常檢查,平台會提示出警告。

  注:檢查資訊主要包含不規範的表、缺失索引、無索引外鍵、沒有使用的索引、重複索引、老化的索引。

  

輕松精通資料庫管理之道——運維巡檢之三(結構設計)
輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  在【資料庫】-【不規範的表】中檢查系統中表是否存在有不規範設計。這些不規範設計主要包含無聚集索引,使用舊資料類型,聚集索引的列是随機增長的(GUID,uniqueidentifier類型)

  注:

  1.微軟建議在表中都建議有聚集索引。聚集索引除了可以提高查詢性能之外,還可以按需重新生成或重新組織來控制表碎片。

  2.在 Microsoft SQL Server 的未來版本中将删除 ntext、text 和 image 資料類型。 請避免在新開發工作中使用這些資料類型,并考慮修改目前使用這些資料類型的應用程式。 請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

  3.聚集索引本身是要排序的,而GUID(uniqueidentifier類型)這樣插入資料時導緻過多的頁拆分。

輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  (圖略)

  資料庫設計中索引是性能的一大關鍵,當資料庫缺失大量索引,那麼也必然導緻資料庫的性能很差。

對主表資料操作時(如删除),需要到外鍵表中查找校驗,如果缺少外鍵索引可能導緻全表掃描,嚴重影響性能。

當在查詢中組合相關表中的資料時,經常在聯接條件中使用外鍵列,方法是将一個表的 FOREIGN KEY 限制中的列與另一個表中的主鍵列或唯一鍵列比對。索引使 資料庫引擎可以在外鍵表中快速查找相關資料,提升性能。

  随着開發和優化的進行,很多人會對資料庫進行索引的建立操作,很多時候建立了一個較優的聯合索引或者覆寫索引,會讓原本單列的索引失去使用的場景,這部分索引會出現在,長時間未使用的索引中,建議删除。

   随着開發和優化的進行,很多人會對資料庫進行索引的建立操作,那麼頁難免會産生一些功能相近或相同的索引,索引本身也是有維護成本,在更新、插入、删除時會有一定的開銷,那麼重複的索引隻會增加這部分維護開銷。

  索引維護是配置正常維護任務之一,随着資料的不斷寫入和變更,會産生大量的索引碎片,缺少維護任務的索引,無法及時重新組織索引資料,導緻索引低效,甚至失效。

  1.在【檢查項】-【結構設計】中檢視會話資訊和執行計劃,當設計結構未通過正常檢查,平台會提示出警告。

  注:檢查資訊主要會話隔離級别、是否存在帶有事務的長時間會話、執行計劃中是否存在隐式轉換。

輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  1.在【會話】-【空閑會話】中檢視會話資訊。

  注:主要關注,長時間未關閉會話和長時間未關閉并帶有事務的會話。長時間帶有事務的會話可能是因為程式連接配接洩露導緻,長時間帶有事務會阻塞其他會話的正常進行,造成系統卡死等嚴重性能問題。

輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  2.在【會話】-【概覽】頁中檢視會話詳細資訊,主要關注事務隔離級别。

  事務隔離級别簡述:事務隔離級别主要控制查詢(共享鎖),隔離級别越高并發能力就越差。(詳細資訊請參見:平台技術資料,最佳配置)

  如果在程式中發現大量REPEATABLE_READ(可重複讀)或SERIALIZABLE(可序列化),請檢查程式是否有必要使用進階别的隔離級别,而導緻阻塞等待增加,資料庫并發能力下降。

  注:如果在系統中存在大量進階别的事務級别,請确認是否需要高的隔離級别而犧牲并發能力。

輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  存在隐式轉換的執行計劃:語句存在隐式轉換導緻性能消耗,或不能使用索引。

  注:隐式轉換常發生在表設計的字段類型(varchar)優先級别低于程式傳遞的參數類型(nvarchar)

  在【執行計劃】-【隐式轉換】頁中檢視具體資訊。

輕松精通資料庫管理之道——運維巡檢之三(結構設計)

  整個程式和資料庫是否穩定、高效和結構設計的好壞密不可分,在巡檢過程中,結構設計時比較重要的一部分。很多時候運維人員和設計人員、開發人員溝通不暢、專業技能有差距,是以結構設計常常出現問題。