第十章、數據庫運行維護與優化


第十章、數據庫運行維護與優化

版權來源233網校,若有侵權聯系shaoyayu0419@qq.com刪除
版權地址:www.233.com

內容提要:

1、了解數據庫運行維護的基本原理

2、了解運行狀態監控與分析

3、了解數據庫存儲空間管理

4、掌握數據庫性能優化的方法

第一節 數據庫運行維護基本工作

1、DBAS進入運行維護階段的主要任務:

  1. 保證數據庫系統安全、可靠且高效率地運行。

  2. 數據庫的運行除了DBMS與數據庫外,還需要各種系統部件協同工作。

  3. 首先必須有各種相應的應用程序

  4. 其次各應用程序與DBMS都需要在操作系統  (OS)支持下工作。

2、維護工作包括:

  1. 數據庫轉儲與恢復

  2. 數據庫安全性、完整性控制

  3. 檢測並改善數據庫性能

  4. 數據庫的重組和重構

  5. 重組不修改數據庫原有設計的邏輯結構和物理結構

  6. 重構部分修改模式和內模式

第二節 運行狀態監控與分析

  數據庫的監控分析:指管理員借助工具監測DBMS的運行情況,掌握系統當前或以往的負荷、配置、應用等信息,並分析監測數據的性能參數和環境信息,評估DBMS的整體運行狀態。

根據監控分析實現不同,分為:

  1. 數據庫系統建立的自動監控機制,由DBMS自動監測數據庫的運行情況。
  2. 管理員手動實施的監控機制

根據監控對象不同,分為:

  1. 數據庫構架體系的監控

      監控空間基本信息、空間使用率與剩余空間大小等。

  2. 數據庫性能監控
      監控數據緩沖區命中率、庫緩沖、用戶鎖、索引使用、等待事件等。

第三節 數據庫存儲空間管理

對數據庫使用空間進行管理是一項非常重要的工作。

  1. 空間使用情況變化帶來的問題:

  降低數據庫系統服務性能

  空間溢出導致災難停機事故

  1. 數據的存儲結構分為:

  邏輯存儲結構

  物理存儲結構

  SQL Server數據庫中 一個邏輯上的數據庫直接和一組物理上的數據文件對應,沒有表空間概念。
  DBMS對空間的管理包括:創建數據庫空間、更改空間大小、刪除空間、修改空間狀態,新建、移動、關聯數據文件等。

第四節 數據庫性能優化

  數據庫性能優化是DBAS系統上線后最常見的運行維護任務之一。

  進行數據庫性能優化時,首先要確定優化目標,一般從數據庫運行環境、參數調整、模式調整、數據庫存儲優化、查詢優化幾個方面考慮。

1、數據庫運行環境與參數調整

  一般來說,可以從外部環境、調整內存分配、調整磁盤I/O、調整資源競爭等幾個方面着手改變數據庫參數,提高其性能。

  外部調整:數據庫性能和外部環境有很大關系,主要外部條件包括:CPU(CPU的處理能力是衡量計算機性能的一個標志)、網絡(大量的SQL數據在網絡上傳輸會導致網速變慢)。

  CPU使用情況判斷依據:對於一台數據庫服務器,如業務空閑時使用率超過90%。說明服務器缺乏CPU資源,如高峰時CPU使用率仍然低,說明服務器CPU資源充足。

  解決方案;增加CPU數量或者終止需要許多資源的進程。

  調整內存分配:調整相關參數控制數據庫內存分配,很大程度改善數據庫系統性能。

  調整磁盤I/O:數據庫性能優劣的重要度量是響應時間。

  改善方法:令I/O時間最小化,減少磁盤上文件競爭帶來的瓶頸。

調整競爭:

  1. 修改參數以控制連接到數據庫的最大進程數。

  2. 減少調度進程的競爭

  3. 減少多線程服務進程競爭

  4. 減少重做日志緩沖區競爭

  5. 減少回滾段競爭。

2、模式調整與優化

  數據庫的規范化過程:高效率利用存儲空間,減少數據的冗余,減少數據的不一致性。

  問題:規范化關系解決了數據維護的異常,並使數據冗余最小化,但會導致數據處理性能下降。

  反規范化:將規范化關系轉換為非規范化的關系的過程。

  反規范化方法:增加派生冗余列、增加冗余列、重新組表、分割表和新增匯總表等方法。都會破壞數據完整性。 

  采用反規范化技術從實際出發均衡利弊。

2.1、反規范化的手段:

(1)增加派生性冗余列

  增加的列由表中的一些數據項經過計算生成。
  作用:查詢時減少連接操作,避免使用聚合函數。
  例如:銷售單據明細表(單據編號,商品編號,單價,數量,總價),總價=單價*數量,屬於派生性增加冗余列。

(2)增加冗余列

  在多個表中增加具有相同語義的列,常用來在查詢時避免連接操作。(外碼不屬於這種情況)

(3)重新組表

  當用戶經常查看的某些數據是由多個表連接之后才能得到,就可以考慮先把這些數據重新組成一個表,這樣在查詢時會減少連接提高效率。

(4)分割表(重點)

  水平分割:根據行的使用特點進行分割,分割之后所有表的結構都相同。而存儲的數據不同。使用並(Union)操作。

  垂直分割:根據列的特點分割,分割后所得表除了都包含主碼外其他列都不相同。通常將常用列與不常用列分別放在不同表中,查詢減少I/O次數。缺點是使用連接(Join)操作

(5)新增匯總表

  大量執行報表等匯總操作會影響性能。 

  為降低匯總操作的時間,將頻繁使用的統計中間結果或最終結果存儲在匯總表中,從而降低數據訪問量和匯總操作的CPU計算量。

  如:日銷售額統計表

3、存儲優化

3.1、物化視圖(索引視圖)

  定義:包括一個查詢結果的數據庫對象,是預先計算並保存表連接或聚集等耗時較多的操作結果。(一個定期刷新數據的視圖,自動刷新或人工刷新)

  適用於多個數據量較大的表進行連接操作及分布式數據庫中在多站點的表進行連接時使用。

  物化視圖還可以進行遠程數據的本地復制(物化視圖的存儲也稱為快照),用於實施數據庫間的同步。

3.2.、聚集

  聚集是物理存儲表中數據的可選擇的方法。

聚集索引是指數據庫表行中數據的物理順序與鍵值的邏輯(索引)順序相同。一個表只能有一個聚集索引,因為一個表的物理順序只有一種情況,所以,對應的聚集索引只能有一個。如果某索引不是聚集索引,則表中的行物理順序與索引順序不匹配,與非聚集索引相比,聚集索引有着更快的檢索速度。

  一個聚集是一組表,將經常一起使用的具有同一公共列值的多個表中的數據行存儲在一起,由公共列構成聚集碼

  作用:最小化必須執行的I/O次數。

  注意:將記錄插入聚集的表之前,必須建立聚集索引,且按聚集碼進行索引;對於劇集中的多個表,聚集值只存儲一次。

  劣勢:聚集表的插入、更新、刪除性能差,具體使用要權衡。

4、查詢優化

  效率低下的SQL語句常常是系統效率不佳的主要原因。常用優化方法如下:

4.1、合理使用索引

  權衡:索引提高查詢效率,索引增加系統開銷。

建立索引原則:

  1. 是否為一個屬性建索引:該屬性是碼或存在某個查詢中被使用。
  2. 在哪些屬性建立索引:若一個關系的多個屬性共同出現在若干個查詢中,一般會采用多屬性索引。
  3. 是否建立聚簇索引:聚簇索引適合范圍查詢,可建立多屬性索引。優點體現在數據記錄存取過程中。
  4. 使用散列還是樹索引:散列適合等值查詢;關系數據庫多使用B+索引,支持作為搜索碼的屬性上的等值查詢和范圍查詢。

索引使用原則:

  1. 經常在查詢中作為條件被使用的列,應為其建立索引。

  2. 頻繁進行排序或分組的列,應為其建立索引。

  3. 一個列的值域很大時,應為其建立索引。

  4. 如果待排列的列有多個,建復合索引。

  5. 可以使用系統工具來檢查索引完整性,必要時進行修復。當數據表更新大量數據后,刪除並重建索引以提高查詢。

  6. 索引建立完成后,運行期間還需調優。

  7. 調優的目的:動態地評估需求。

索引調整和修改的原因:

  1. 由於缺少索引,某些查詢語句執行時間過長。

  2. 某些索引自始至終沒有使用,卻占用了較多磁盤空間。

  3. 某些索引建立在被頻繁改變的屬性上,導致系統開銷過大。

4.2、避免或簡化排序

  ORDER BY和GROUP BY語句的執行涉及排序,磁盤排序開銷很大,應利用索引自動以適當的次序產生輸出。

影響優化器的因素:

  由於現有索引不足,導致排序索引中不包括一個或幾個待排序的列。

  Group by和order by子句中列的次序與索引次序不一致。

  排列的列來自不同的表。

  為避免不必要的排序,要正確地增建索引,合理合並數據庫表,如排序不可避免,則簡化它,如縮小排序列的范圍。

4.3、消除對大型表數據的順序存取

  嵌套查詢中,對表的順序存取嚴重影響查詢效率。 
  優化方法:對連接列進行索引,或使用並集來避免順序存取。

4.4、避免復雜正則表達式

  原因:消耗較多CPU資源進行字符串匹配。

4.5、使用臨時表加速查詢

  將表的一個子集進行排序並創建臨時表。

4.6、用排序來取代非順序磁盤存取

  原因:非順序磁盤存取最慢。使用以數據庫排序功能為基礎的SQL替代非順序存取。

4.7、不充分的連接條件。

  原因:左(右)外連接包含與NULL數據匹配,相比內連接,代價可能很高。

4.8、存儲過程

  盡量使用自帶返回參數,而非自定義返回參數,減少不必要參數,避免數據冗余。

4.9、不要隨意使用游標

  原因:占用較多系統資源。尤其是大規模並發情況下,很容易使得系統資源耗盡而崩潰。

4.10、事務處理

  一旦將多個處理放入事務,會降低系統處理速度。將頻繁操作的多個可分割的處理過程放入多個存儲過程中,這樣就大大提高系統響應速度。

5、SQL Server 性能工具

SQL Server Profiler
  用來監視SQL Server事件的多用途監控工具(性能、存儲過程、T-SQL語句運行等監控)。結果存儲在一個跟蹤文件中,可通過分析文件診斷問題。
數據庫引擎優化顧問
  測試數據庫工作負荷(一組在數據庫中執行的T-SQL語句),給出優化建議。

例題講解

1、數據庫管理員是數據庫的主要維護者,設有如下針對數據庫的工作:
Ⅰ.數據庫的轉儲和恢復
Ⅱ.數據庫的安全性、完整性控制
Ⅲ.數據庫性能的監控分析和改進
Ⅳ.數據庫的重組和重構
以上工作屬於數據庫管理員職責的是(  )
A.僅Ⅰ和Ⅱ		B.僅Ⅰ和Ⅲ
C.僅Ⅱ和Ⅳ		D.Ⅰ、Ⅱ、Ⅲ和Ⅳ
答案:D
2、某數據庫應用系統在運行中,用戶反映某操作很慢。系統工程師在用戶的客戶機及數據庫服務器上使用數據庫管理系統自帶的客戶端程序執行此操作所涉及的SQL語句,發現在兩個環境下SQL語句執行的速度都很慢。為了提高效率,下列檢查無需進行的是(  )
A.檢查數據庫中是否存在大量鎖
B.檢查數據庫服務器的CPU使用情況
C.檢查這些操作涉及到的表是否已建立有效的索引
D.檢查客戶機到數據庫服務器的網絡情況
答案:D
3、監控數據庫系統運行狀態是數據庫管理員非常重要的職責。數據庫管理員有如下工作:
Ⅰ.定期實施數據庫完整備份並將備份數據傳送到遠端容災中心
Ⅱ.定期查看數據庫空間是否滿足業務需求
Ⅲ.定期查看數據緩沖區命中率、數據庫鎖情況
Ⅳ.定期查看數據庫用戶會話情況
Ⅴ.使用自動化手段檢查數據庫CPU使用情況,出現異常情況時自動發短信通知系統管理員
上述工作中屬於數據庫監控工作的是(  )
A.全部
B.僅Ⅰ、Ⅱ和Ⅴ
C.僅Ⅰ、Ⅲ和Ⅳ
D.僅Ⅱ、Ⅲ、Ⅳ和Ⅴ
答案:D
4、數據庫管理員要隨時觀察數據庫的動態變化,並在數據庫出現錯誤、故障或產生不適應的情況時能夠隨時采取有效措施保護數據庫。這種監控機制稱為(  )。
答案:手動監控機制
5、在分布式數據庫中,查詢處理和優化比集中式數據庫要復雜得多,其中查詢優化需要考慮的主要因素包括I/O代價、CPU代價和通信代價。一般而言,分布式數據庫查詢優化的首要目標是(  )
A.使查詢執行時I/O代價最省
B.使查詢執行時CPU代價最省
C.使查詢執行時I/O和CPU代價最省
D.使查詢執行時通信代價最省
答案:D
6、設某全國性的運輸企業建立了大型OLTP系統,並在該系統之上建立了數據倉庫。OLTP系統和數據倉庫中有如下數據表:
運輸明細表(運輸單ID,發送站ID,終到站ID,貨物ID,貨物重量,運輸價格,發貨日期)
匯總表1(發送站ID,終到站ID,貨物ID,發貨日期,總重,總運價)
匯總表2(發送站ID,終到地區ID,貨物ID,發貨日期,總重,總運價)
匯總表3(發送站ID,終到站ID,貨物ID,發貨月份,總重,總運價)
匯總表4(發送地區ID,終到地區ID,貨物類別ID,發貨日期,總重,總運價)
  該企業管理的貨運站約有100個,貨物約有500種共10類,各匯總表都建有主碼,且各表有合理的維護策略,在每次維護后數據能保持一致。設有視圖V,該視圖的訪問頻率很高,其查詢結果模式為(發送地區ID,終到站ID,發貨月份,總重,總運價),該視圖現以匯總表1為計算數據源。經監控發現,匯總表1的被訪問頻率過高,導致系統整體性能下降,而其它匯總表被訪問頻率較低。在不增加匯總表和索引的情況下,請給出一個改善系統服務性能的優化方案,並簡要說明理由。
【解題思路】
  計算機系統中存在着兩類不同的數據處理工作:操作型處理和分析型處理,也稱作OLTP(聯機事務處理)和OLAP(聯機分析處理)。操作型處理也叫事務處理,是指對數據庫聯機的日常操作,通常是對一個或一組紀錄的查詢或修改,例如火車售票系統、銀行通存通兌系統、稅務征收管理系統等。這些系統要求快速響應用戶請求,對數據的完全性、完整性以及事務吞吐量要求很高。結合本題中存在的問題,視圖本身的訪問量很高,而又僅僅以匯總表1為計算數據源,而其它匯總表訪問率低,導致了資源利用不合理。因此本題考察了聯機事務處理中的資源調度問題。
【參考答案】
  由於匯總表1和視圖的模式訪問頻率都很高,而且視圖的數據源來自匯總表1,又因為其他匯總表的訪問率較低,所以只需要將視圖的數據源綁定為匯總表3,因為匯總表3也可以滿足視圖的輸出模式。這樣不僅提升了匯總表3的數據訪問率,而且降低了匯總表1的數據訪問率,系統性能和服務性能得到了很大的優化。又因為貨物約有500種,共10類, 可以再建立一個視圖綁定數據源為匯總表4,這樣就可以充分利用匯總表4的數據信息,從而可以進一步優化系統性能。

7、在成功導入歷史數據后,此系統順利上線運行,第一周,發現數據服務器CPU使用率高,達到近90%,高峰期間達到100%,且系統內存使用率90%,但系統I/O很輕。業務人員反映系統操作速度很慢。為了提高系統運行速度,在不修改應用程序的前提下,兩位工程師提出了不同的解決方法:
1.為服務器增加2顆CPU,緩解CPU使用率很高的問題。
2.為服務器增加一倍內存,緩解內存使用率很高的問題。
  考慮成本,現階段只能按照一種方案實施,請指出在現有情況下,哪種方案更合理並給出理由。
【評分5分】
  第一種方案比較合理(1分)
  原因:由於SQL Server采用將數據緩沖在內存中的方式,因此內存使用率較高是正常情況,且現階段I/O並不存在問題,說明內存滿足需求。(2分)
  此階段CPU使用率很高,說明CPU計算機資源不足,因此增加CPU數量對解決問題更具有效。(2分)
8、某商場商品經營管理系統使用SQL Server 2008數據庫管理系統,此系統上線運行1年后,業務人員使用某統計功能(此功能每月使用一次)時發現速度很慢。該統計功能主要執行的SQL語句如下:
SELECT 商品號,SUM(銷售數量*銷售價格) 銷售額 
FROM 銷售明細 
    GROUP BY 商品號;
該銷售明細表的建表語句如下:
CREATE TABLE 銷售明細(
序列號   intIDENTITY(1,1) NOT NULL,
	商品號   intNOT NULL,
	銷售日期 datetime NULL,
	銷售數量 intNOT NULL,
	銷售價格 intNOT NULL
);
並在銷售明細表上建有如下索引:
CREATE index ix_銷售明細_商品號 on 銷售明細(商品號);
某技術人員提出通過執行下述語句以提高此查詢的運行效率:
CREATE VIEW 商品銷售額視圖 
WITH SCHEMABINDING 
  AS 
SELECT 商品號,SUM(銷售數量*銷售價格) 銷售額,
COUNT_BIG(*) cnt
FROM dbo.銷售明細 
GROUP BY 商品號;
CREATE UNIQUE CLUSTERED INDEX ix_商品銷售額 
ON 商品銷售額視圖(商品號);(10分)
(1)請分析該技術人員給出的語句功能以及對原有查詢語句的性能影響,並給出原因。
(2)此商場的銷售量很大,每天有大量數據插入到銷售明細表中。請從數據庫整體性能角度分析,此技術人員提出的優化方法是否合適,並給出原因。
(1)【解題思路】
  該技術人員使用了帶有索引的視圖,將所關心的數據(商品號,銷售額,該商品號在表中出現的次數)從銷售明細表中提取出來建立視圖,並對該視圖建立按商品號排序的聚簇索引,這樣大大減少了在搜索不同商品的銷售額時調用的數據表的規模,從而提高了查詢效率。由於表的數據規模很大,建立該視圖后,同一種商品不會多次出現在表中,而是通過一個計數變量cnt表示,這樣在檢索時大大減少了檢索規模。創建索引時,UNIQUE關鍵字表明此索引的每一個索引值只對應唯一的數據記錄。CLUSTER表示要建立的索引是聚簇索引,所謂聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。
【參考答案】
  語句功能:建立包含(商品號,銷售額,該商品表中出現次數)帶索引的視圖,並建立按商品號對應銷售額UNIQUE聚簇排序的索引,大大縮小了查詢語句的查詢范圍,提高了查詢效率。原因:視圖中將間接相關的屬性列(序列號,銷售日期,商品號,銷售數量,銷售價格)轉換成了目標屬性列,減少了搜索空間;同時建立UNIQUE CLUSTERED索引,使查詢商品號的數據記錄唯一,降低了搜索范圍,提高了搜索效率。
(2)【解題思路】
  由於視圖是不實際存儲數據的虛表,因此對視圖的更新最終要轉換為對基本表的更新。而用戶通過視圖對數據進行增加、刪除、修改時,有意或無意地對不屬於視圖范圍內的基本表數據進行操作,會破壞數據的一致性。而且視圖中的數據本身就是冗余的,每次對表進行修改時,同時也要對相應的視圖進行修改,這大大增加了系統的負擔。
【參考答案】
  不合適,每天大量的插入操作使得在修改表的同時也要對視圖進行修改,增加了系統的負擔,然而該統計功能一個月才用一次,這樣導致系統的利用率也較為低下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM