前言
本文旨在幫助SQL Server數據庫的使用人員瞭解常見的問題,及快速解決這些問題。這些問題是數據庫的常規管理問題,對於很多對數據庫沒有深入瞭解的朋友提供一個大概的常見問題框架。
下面一些問題是在近千家數據庫用戶診斷時發現的常規問題,本文分爲【常見問題診斷流程】-【常見問題】-【常見問題快速解決的建議】
常見問題診斷流程
概覽模塊—[彙總]瞭解系統
- 瞭解系統性能(語句執行時間、會話等待)
語句執行時間:橫座標爲時間範圍,縱座標爲在執行時間在範圍內分佈的語句數量。
(本例:收集時間內語句執行時間在3-5秒的語句數量有1103條,5-10秒,10-20秒慢語句數量很多,說明系統語句執行緩慢,系統存在性能問題)
會話-等待類型:橫座標爲等待類型,縱座標爲等待數量。
(本例:系統中發生大量的等待,說明系統存在性能問題)
- 瞭解系統運行指標(CPU、內存、磁盤計數器)
通過3個主要計數器診斷系統是否存在瓶頸和產生瓶頸的資源。
- 瞭解系統請求壓力(批處理請求/每秒、連接數)
瞭解系統中每秒請求的語句數量和系統打開的連接數量,掌握系統壓力量級。
(注:可多次收集分析,掌握系統壓力波動和處理能力)
- 瞭解系統問題嚴重度(檢查項、SQL錯誤日誌類型)
瞭解系統中的潛在風險與缺陷情況
(紅色:嚴重程度高,建議問題全部解決)
[檢查項]模塊—[全部]發現系統問題
從系統、參數、會話、性能計數器、查詢語句、作業、日誌、執行計劃、tempdb、業務數據庫多方面呈現系統存在的問題與隱患。
(綠色:配置標準,藍色:嚴重程度低,橙色:嚴重程度中等,紅色:嚴重程度高,可能造成風險)
常見問題
性能問題
- 性能參數配置不合理:硬件不能發揮最大性能
- 系統等待嚴重:導致語句運行緩慢
- 執行超過3秒的語句數量多:客戶體驗差
- 存在缺失索引情況:導致語句運行緩慢,消耗過多系統資源
環境問題
- 磁盤空間規劃問題:磁盤空間不足或不能滿足未來業務
- 補丁不是最新:由於微軟版本缺陷導致部分功能異常。
備份問題
- 備份缺失:故障發生會導致全部數據丟失
- 備份計劃不合理:導致性能問題或長時間數據丟失風險
- 備份文件與數據文件同盤:磁盤發生故障,導致數據與備份一起丟失或損壞
可用性問題
- 數據庫單點風險:發生故障會導致業務中斷,故障導致數據丟失
安全問題
- 缺少數據一致性檢查(checkdb):不能及時發現數據損壞而最終導致數據庫故障和數據丟失
- 大量登錄失敗:檢查系統是否受到攻擊或是否程序修改導致大量登錄失敗
結構設計問題
- 超過10分鐘會話並帶有事務:長時間存在不提交事務,會導致程序阻塞,檢查應用程序是否有連接泄露
- 存在隱式轉換:導致不能使用索引(例:表字段定義varchar,程序傳參類型爲nvarchar)
- 表缺少聚集索引:導致性能問題
- 表上外鍵缺失索引:導致性能問題
快速解決問題與常規建議
快速解決性能問題
配置系統參數
查看不合理參數—點擊操作按鈕
在彈出頁查看當前運行值,與建議值。
彈出優化配置腳本—如需修改複製文本—在服務器運行即可修改
添加缺失索引
在【數據庫】模塊的【缺失索引】中,創建數據庫的缺失索引。
注:並非所有提示的索引都需要創建,根據【平均影響百分比】【平均用戶開銷百分比】【用戶查找次數】情況綜合評價,建立系統中缺失的重要索引。並綜合【相等列】【不等列】【包含列】創建包含多種情況的最優索引。
根據執行頻率和開銷分析重點語句
在【查詢語句】模塊的【查詢語句】-【彙總視圖】中,通過【執行次數】或【cpu時間】【讀次數】【寫次數】【影響行數】等對重點語句,重點優化。
點擊語句可以進入【分類視圖】,語句的詳細執行信息頁
在【分類視圖】頁面,可以點擊語句進入【關聯項】查看每條語句執行的具體信息及執行計劃,等待等信息。
環境問題的建議
磁盤規劃
- 按照文件類型劃分:數據文件、日誌文件、tempDB文件、備份文件,分別放在一個物理磁盤(4塊物理磁盤)
- 按照數據庫劃分:不同的業務數據庫(壓力大的)分別放在一個物理磁盤,tempDB和備份文件各一個物理磁盤。(大型業務庫數+2)
操作系統與版本
- 建議使用64位操作系統和SQL SERVER軟件
- 建議SQL SERVER補丁爲最新補丁
備份問題的建議
- 中小數據庫備份方案:每天全備份、一小時一次日誌備份。
- 大型數據庫備份方案:每週全備份、每天差異備份、一小時一次日誌備份。
- 備份文件與數據文件放置在不同物理磁盤
- 備份文件拷貝異地(容災)
可用性建議
任何數據庫爲了保證業務的連續性和高可用性,以及數據的安全性,都必須採用高可用方案規避單點的風險。
數據庫主流的高可用技術:Always On可用性組,SQL故障轉移羣集,日誌傳送技術,鏡像技術,及moebius負載均衡集羣
安全問題建議
賬號安全與權限管理
通常的情況下,我們都是通過sa進行設置密碼的,而且在config文件裏面明文的寫上我們的帳號和密碼,這樣的設計存在很大的安全隱患,無論是受攻擊還是誤刪除都會給系統帶來嚴重的後果,建議對用戶進行權限規劃,賬號劃分等安全措施。
維護任務CHECKDB保證數據安全
接觸過上百家客戶因爲沒有及時發現數據頁損壞而導致的數據庫不可用或數據丟失,建議每週運行及時發現數據庫損壞。
結構設計的建議
聚集索引與外鍵索引
在表結構設計中建議表中都有聚集索引,外鍵添加索引,以提升性能。
隱式轉換
在數據庫物理設計和程序調用設計時字段類型不匹配(程序傳入的類型轉換優先級高於數據庫中字段類型,如表中varchar 而程序傳入nvarchar)會發生隱式轉換,隱式轉換增加數據庫性能消耗,還會使索引無法使用而導致嚴重的性能問題。
通過工具語句的【執行計劃】中找到對應的隱式轉換處,分析程序傳入和數據庫表設計綜合解決。