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

来源:http://www.cnblogs.com/double-K/archive/2016/12/15/6070304.html
-Advertisement-
Play Games

前言 做好日常巡檢是資料庫管理和維護的重要步驟,而且需要對每次巡檢日期、結果進行登記,同時可能需要出一份巡檢報告。 本系列旨在解決一些常見的困擾: 不知道巡檢哪些東西 不知道怎麼樣便捷體檢 機器太多體檢麻煩 生成報告困難,無法直觀呈現結果 前面兩篇對伺服器軟硬體配置、資料庫概況進行了巡檢,下麵我們要 ...


前言

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

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

  • 不知道巡檢哪些東西
  • 不知道怎麼樣便捷體檢
  • 機器太多體檢麻煩
  • 生成報告困難,無法直觀呈現結果

 

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

物理結構概覽

  在【檢查項】-【全部】中查看每個資料庫的信息,當資料庫結構未通過常規檢查,平臺會提示出警告。

  註:檢查信息主要包含不規範的表、缺失索引、無索引外鍵、沒有使用的索引、重覆索引、老化的索引。

  

 

  

不規範的表

  在【資料庫】-【不規範的表】中檢查系統中表是否存在有不規範設計。這些不規範設計主要包含無聚集索引,使用舊數據類型,聚集索引的列是隨機增長的(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)

  在【執行計劃】-【隱式轉換】頁中查看具體信息。

 

 

總結

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Disk-Base資料庫中,如果系統頻繁地創建和更新臨時表,大量的IO操作集中在tempdb中,tempdb很可能成為系統性能的瓶頸。在SQL Server 2016的記憶體(Memory-Optimized)資料庫中,如果考慮使用記憶體優化結構來存儲臨時表,表變數,表值參數的數據,那麼將完全消除IO ...
  • Microsoft SQL Server 2005 提供了一些工具來監控資料庫。方法之一是動態管理視圖。動態管理視圖 (DMV) 和動態管理函數 (DMF) 返回的伺服器狀態信息可用於監控伺服器實例的運行狀況、診斷問題和優化性能。常規伺服器動態管理對象包括:– dm_db_*:資料庫和資料庫對象– ...
  • 我們知道當ORACLE資料庫啟用共用伺服器模式時,通過共用伺服器模式連接到資料庫的會話是有一些特征的。在v$session裡面,其SERVER的狀態一般為SHARED和NONE, 為SHARED時,表示當前會話正在執行SQL語句,其占用共用伺服器進程,會話的STATUS狀態為ACTIVE;當會話狀態... ...
  • 行級安全RLS(Row-Level Security)是在數據行級別上控制用戶的訪問,控制用戶只能訪問資料庫表的特定數據行。斷言是邏輯表達式,在SQL Server 2016中,RLS是基於安全斷言(Security Predicate)的訪問控制,Security Predicate是由內聯表值函 ...
  • 一、Spark簡介: 以下是百度百科對Spark的介紹: Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分佈數據集,除了能夠提供互動式查詢外,它還可以優化 ...
  • 巡檢是資料庫管理員保證資料庫健康的必要維護項,全面的巡檢可以及早的發現問題、解決問題、預防問題。 很多資料庫維護人員其實對資料庫瞭解的並不深入(常常集中在傳統行業),不是專業的DBA,同時又身兼多職(業務、軟體、網路、硬體),在每天繁雜的工作中已經身心俱疲。這樣的一種狀態也必然讓系統管理員即使有意精 ...
  • 版權聲明:本文發佈於http://www.cnblogs.com/yumiko/,版權由Yumiko_sunny所有,歡迎轉載。轉載時,請在文章明顯位置註明原文鏈接。若在未經作者同意的情況下,將本文內容用於商業用途,將保留追究其法律責任的權利。如果有問題,請以郵箱方式聯繫作者(793113046@q ...
  • 前言 做好日常巡檢是資料庫管理和維護的重要步驟,而且需要對每次巡檢日期、結果進行登記,同時可能需要出一份巡檢報告。 本系列旨在解決一些常見的困擾: 不知道巡檢哪些東西 不知道怎麼樣便捷體檢 機器太多體檢麻煩 生成報告困難,無法直觀呈現結果 經過硬體巡檢,資料庫狀態情況的巡檢無疑是日常運維巡檢的第二步 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...