數據庫調優是什么
一、概述隨著數據庫在各個領域的使用不斷增長,越來越多的應用提出了高性能的要求。
數據庫性能調優是知識密集型的學科,需要綜合考慮各種復雜的因素:數據庫緩沖區的大小、索引的創建、語句改寫等等。總之,數據庫性能調優的目的在于使系統運行得更快。
調優需要有廣泛的知識,這使得它既簡單又復雜。說調優簡單,是因為調優者不必糾纏于復雜的公式和規則。
許多學術界和業界的研究者都在嘗試將調優和查詢處理建立在數學基礎之上。稱調優復雜,是因為如果要完全理解常識所依賴的原理,還需要對應用、數據庫管理系統、操作系統以及硬件有廣泛而深刻的理解。
數據庫調優技術可以在不同的數據庫系統中使用。如果需要調優數據庫系統,最好掌握如下知識:1)查詢處理、并發控制以及數據庫恢復的知識;2)一些調優的基本原則。
這里主要描述索引調優。二、索引調優索引是建立在表上的一種數據組織,它能提高訪問表中一條或多條記錄的特定查詢效率。
因此,適當的索引調優是很重要的。對于索引調優存在如下的幾個誤區:誤區1:索引創建得越多越好?實際上:創建的索引可能建立后從來未使用。
索引的創建也是需要代價的,對于刪除、某些更新、插入操作,對于每個索引都要進行相應的刪除、更新、插入操作。從而導致刪除、某些更新、插入操作的效率變低。
誤區2:對于一個單表的查詢,可以索引1進行過濾再使用索引2進行過濾?實際上:假設查詢語句如下select * from t1 where c1=1 and c2=2,c1列和c2列上分別建有索引ic1、ic2。先使用ic1(或ic2)進行過濾,產生的結果集是臨時數據,不再具有索引,所以不可使用ic2(或ic1)進行再次過濾。
索引優化的基本原則:1、將索引和數據存放到不同的文件組沒有將表數據和索引數據存儲到不同的文件組,而不加區別地將它們存儲到同一文件組。這樣,不但會造成I/O競爭,也為數據庫的維護工作帶來不變。
2、組合索引的使用假設存在組合索引it1c1c2(c1,c2),查詢語句select * from t1 where c1=1 and c2=2能夠使用該索引。查詢語句select * from t1 where c1=1也能夠使用該索引。
但是,查詢語句select * from t1 where c2=2不能夠使用該索引,因為沒有組合索引的引導列,即,要想使用c2列進行查找,必需出現c1等于某值。根據where條件的不同,歸納如下:1) c1=1 and c2=2:使用索引it1c1c2進行等值查找。
2) c1=1 and c2>2:使用索引it1c1c2進行范圍查找,可以有兩種方法。方法1,使用通過索引鍵(1,2)在B樹中命中一條記錄,然后向后掃描找出 第一條符合條件的記錄,從此記錄往后的每一條記錄都是符合條件的。
這種方法的弊端在于:如果c1=1 and c2=2對應的記錄數很多,會產生很多無效的掃描。方法2,如果c2對應的int型數據,可以使用索引鍵(1,3)在B樹中命中一條記錄,從此記錄往后的每一條記錄都是符合條件的。
本文中的例子均采用方法1。3)c1>1 and c2=2:因為索引的第一個列不是等于號的,索引即使后面出現了c2=2,也不能將c2=2應用于索引查找。
這里,通過索引鍵(1,- ∞)在B樹中命中一條記錄,向后掃描找出第一條符合c1>1的記錄,此后的每一條記錄判斷是否符合c2=2,如果符合則輸出,否則過濾掉。這里我們稱c2=2沒有參與到索引運算中去。
這種情況在實際應用中經常出現。4)c1>1:通過索引鍵(1,- ∞) 在B樹中命中一條記錄,以此向后掃描找出第一條符合c1>1的記錄,此后的每條記錄都是符合條件的。
3、唯一索引與非唯一索引的差異假設索引int1c1(c1)是唯一索引,對于查詢語句select c1 from t1 where c1=1,達夢數據庫使用索引鍵(1)命中B樹中一條記錄,命中之后直接返回該記錄(因為是唯一索引,所以最多只能有一條c1=1的記錄)。假設索引it1c2(c2)是非唯一索引,對于查詢語句select c2 from t2 where c2=2,達夢數據庫使用索引鍵(2)命中B樹中一條記錄,返回該記錄,并繼續向后掃描,如果該記錄是滿足c=2,返回該記錄,繼續掃描,直到遇到第一條不符合條件c2=2的記錄。
于是,我們可以得知,對于不存在重復值的列,創建唯一索引優于創建非唯一索引。4、非聚集索引的作用每張表只可能一個聚集索引,聚集索引用來組織真實數據。
語句“create table employee (id int cluster primary key,name varchar(20),addr varchar(20))”。表employee的數據用id來組織。
如果要查找id=1000的員工記錄,只要用索引鍵(1000)命中該聚集索引。但是,對于要查找name='張三'的員工記錄就不能使用該索引了,需要進行全表掃描,對于每一條記錄判斷是否滿足name='張三',這樣會導致查詢效率非常低。
要使用聚集索引,必需提供id,我們只能提供name,于是需要引入一個輔助結構實現name到id的轉換,這就是非聚集索引的作用。該非聚集索引的鍵是name,值是id。
于是語句“select * from employee where name='張三'”的執行流程是:通過鍵('張三')命中非聚集索引,得到對應的id值3(假設'張三'對應的id為3),然后用鍵(3)命中聚集索引,得到相應的記錄。5、是不是使用非聚集索引的查詢都需要進行聚集的查詢。
數據庫調優的方法有哪些
1.引言 數據庫調優可以使數據庫應用運行得更快,它需要綜合考慮各種復雜的因素。
將數據均 勻分布在磁盤上可以提高I/O 利用率,提高數據的讀寫性能;適當程度的非規范化可以改善 系統查詢性能;建立索引和編寫高效的SQL 語句能有效避免低性能操作;通過鎖的調優解 決并發控制方面的性能問題。 數據庫調優技術可以在不同的數據庫系統中使用,它不必糾纏于復雜的公式和規則,然 而它需要對程序的應用、數據庫管理系統、查詢處理、并發控制、操作系統以及硬件有廣泛 而深刻的理解。
2.計算機硬件調優 2.1 數據庫對象的放置策略 利用數據庫分區技術,均勻地把數據分布在系統的磁盤中,平衡I/O 訪問,避免I/O 瓶頸: (1)訪問分散到不同的磁盤,即使用戶數據盡可能跨越多個設備,多個I/O 運轉,避免 I/O 競爭,克服訪問瓶頸;分別放置隨機訪問和連續訪問數據。 (2)分離系統數據庫I/O 和應用數據庫I/O,把系統審計表和臨時庫表放在不忙的磁盤 上。
(3)把事務日志放在單獨的磁盤上,減少磁盤I/O 開銷,這還有利于在障礙后恢復,提 高了系統的安全性。 (4)把頻繁訪問的“活性”表放在不同的磁盤上;把頻繁用的表、頻繁做Join的表分別 放在單獨的磁盤上,甚至把頻繁訪問的表的字段放在不同的磁盤上,把訪問分散到不同的磁 盤上,避免I/O 爭奪。
2.2 使用磁盤硬件優化數據庫 RAID (獨立磁盤冗余陣列)是由多個磁盤驅動器(一個陣列)組成的磁盤系統。通過將磁盤陣列當作一個磁盤來對待,基于硬件的RAID允許用戶管理多個磁盤。
使用基于硬件的 RAID與基于操作系統的RAID相比較,基于硬件的RAID能夠提供更佳的性能。如果使用基于操作系統的RAID,那么它將占據其他系統需求的CPU周期;通過使用基于硬件的RAID, 用戶在不關閉系統的情況下能夠替換發生故障的驅動器。
SQL Server 一般使用RAID等級0、1 和5。 RAID 0 是傳統的磁盤鏡象,陣列中每一個磁盤都有一個或多個磁盤拷貝,它主要用來 提供最高級的可靠性,使RAID 0成倍增加了寫操作卻可以并行處理多個讀操作,從而提高 了讀操作的性能。
RAID 1 是磁盤鏡像或磁盤雙工,能夠為事務日志保證冗余性。 RAID 5帶奇偶的磁盤條帶化,即將數據信息和校驗信息分散到陣列的所有磁盤中,它可以消除一個校驗盤的瓶頸和單點失效問題,RAID 5 也會增加寫操作,也可以并行處理一個讀操作,還 可以成倍地提高讀操作的性能。
相比之下,RAID 5 增加的寫操作比RAID 0 增加的要少許多。在實際應用中,用戶的讀操作要求遠遠多于寫操作請求,而磁盤執行寫操作的速度很快,以至于用戶幾乎感覺不到增加的時間,所以增加的寫操作負擔不會帶來什么問題。
在性能較好的服務器中一般都會選擇使用RAID 5 的磁盤陣列卡來實現,對于性能相對差一些的服務器也可利用純軟件的方式來實現RAID 5。 3.關系系統與應用程序調優 3.1 應用程序優化 從數據庫設計者的角度來看,應用程序無非是實現對數據的增加、修改、刪除、查詢和體現數據的結構和關系。
設計者在性能方面的考慮因素,總的出發點是:把數據庫當作奢侈 的資源看待,在確保功能的同時,盡可能少地動用數據庫資源。包括如下原則: (1)不訪問或少訪問數據庫; (2)簡化對數據庫的訪問; (3)使訪問最優; (4)對前期及后續的開發、部署、調整提出要求,以協助實現性能目標。
另外,不要直接執行完整的SQL 語法,盡量通過存儲過程來調用SQL Server。客戶與服務器連接時,建立連接池,讓連接盡量得以重用,以避免時間與資源的損耗。
非到不得已, 不要使用游標結構,確實使用時,注意各種游標的特性。
SQL調優之“憂”:我們為什么需要SQL調優
DBA往往認為SQL調優是必要的、重要的甚至是關鍵的。
現實情況是,SQL調優所消耗的時間和資源,往往會把CPU和運行時間的節省抵消掉。 試問自己一個這樣的問題: SQL調優出現了多久?至少25年。
作為一個DBA,難道你想要花整個職業生涯在SQL語句調優上么?難道你就不想做一些比SQL調優收獲更多的工作么? 調優需求 DBA通常要負責應用的性能。 性能調優可分為幾個類型,常見的包括: ●SQL調優:DBA捕獲SQL語句并執行解釋工具。
這樣便提供了格式化的訪問路徑信息,如此一來就可以分析是否有更好的替代方案。 ●資源調優:DBA和系統編程人員會檢測CUP,I/O以及內存等資源的消耗情況。
然后分析數據庫,應用程序,甚至是單條SQL語句是如何利用這些資源的,從而最小化資源使用以達到最大吞吐量。 ●數據庫子系統調優:此處,DBA和系統程序員分析數據庫軟件本身的資源使用情況。
他們會檢查配置參數,監測和跟蹤數據庫產生的內部統計數據。 其中,SQL調優是最為簡單和常見的。
事實上,DBA們有時將它視作最為重要的工作,而這種認知會導致錯誤的成就感。 SQL調優的目的 與SQL相關的最為常見的性能問題包括:一條語句執行了太長的時間,消耗了過多的資源,或是超出了某些容量限制。
以下是一些例子: ●一條對小表進行操作的簡單SQL語句持續執行了超過一個小時; ●一條SQL語句執行了兩分鐘,但在此期間消耗了兩分鐘的CPU時間; ●一條SQL語句執行失敗,其出錯信息為“超出CPU限制”; ●對在線應用程序的關鍵任務進行操作的SQL語句執行緩慢,從而給客戶造成過度的事務處理時間。 資源限制水平集 對于SQL語句性能不佳的唯一解決之道就是“調優或升級(增加硬件資源)”,這是DBA中流傳的一個常見錯誤觀念。
然而,達到資源容量限制僅僅只是一個癥狀,并非癥結所在。 “調優或升級”這兩種方案也僅僅是可能原因的潛在解決途徑而已。
例如,經常有DBA通過SQL調優來降低CPU占用率。查詢速度上來了,但也給了其他潛在任務一個機會去使用當前釋放狀態下的CPU。
這也同樣適用于其他的限制。這種考量方式也只是相對表征了這些癥狀的成因。
也許DBA會問,“我要怎樣才能知道要進行調優的對象?”其實這是一個錯誤的問題。更好的問題應該是:“我們如何衡量優化?”“由誰負責企業IT的能力規劃?”“對于處理新程序/SQL遷移,災難恢復規劃等類似問題,我們有沒有現成的最佳實踐方案?” 注意,這些問題是戰略的,而非戰術的。
它們體現的問題是DBA的優先級以及他們的時間成本。
Oracle數據庫精講課程之性能調優(SQL語句調優、體系結構調優、主
我推薦你學習這個教程來自小流老師的Oracle數據庫精講課程
第一講:oracle性能監控回顧體系結構性能監控內容性能監控方法第二講:oracle優化過程、目標和方法優化過程優化目標優化方法第三講:SQL語句的處理過程SQL語句的處理過程共享SQL語句的規則實例分析綁定變量的使用方法第四講:數據訪問方式和表連接方法數據訪問方式(理論+實踐)表連接方法(理論+實踐)第五講:優化器的工作原理優化器的介紹優化器的工作原理優化器的使用方法第六講:執行計劃的生成、分析和干預執行計劃的生成執行計劃的分析執行計劃的干預第七講:SQL語句的案例分析第八講:SGA的性能調整—BUFFER CACHE 調優原因分析如何實現調優第九講:SGA的性能調整—LIBRARY CACHE 調優原因分析如何實現調優第十講:優化表表的基礎知識及相關術語優化表的相關技術實踐操作第十一講:優化索引索引的基礎知識及相關術語優化索引的相關技術實踐操作第十二講:最小資源爭奪會話管理和優化鎖管理和優化等待事件管理和優化第十三講:主機性能調優優化內存優化IO資源優化CPU第十四講:數據庫設計優化設計優化相關技術總結調優課程重點內容