⑴ 資料庫調優的方法有哪些
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。客戶與伺服器連接時,建立連接池,讓連接盡量得以重用,以避免時間與資源的損耗。非到不得已, 不要使用游標結構,確實使用時,注意各種游標的特性。
⑵ 關於資料庫調優!
Parallel用法:
/*+parallel(table_short_name,cash_number)*/
這個可以加到insert、delete、update、select的後面來使用
開啟parallel功能的語句是:
alter session enable parallel dml;
這個語句是DML語句哦,如果在程序中用,用execute的方法打開
例:insert /*+parallel(t,10)*/ into tmp_tab('1','xx','xx');
插入的機制和檢索機制差不多,所以,在insert後面加parallel也會加速的。關於insert機制,這里暫不說了。
Parallel後面的數字,越大,執行效率越高。不過,貌似跟server的配置還有oracle的配置有關,增大到一定值,效果就不明顯了。所以,一般用8,10,12,16的比較常見。我試過用30,發現和16的效果一樣。不過,數值越大,佔用的資源也會相對增大的。如果是在一些package、function or procere中寫的話,還是不要寫那麼大,免得佔用太多資源被DBA開K
多表的話,就是在第一後面,加入其他的就可以了。具體寫法如下:
/*+parallel(t,10) (b,10)*/
⑶ 資料庫調優是什麼
一、概述
隨著資料庫在各個領域的使用不斷增長,越來越多的應用提出了高性能的要求。資料庫性能調優是知識密集型的學科,需要綜合考慮各種復雜的因素:資料庫緩沖區的大小、索引的創建、語句改寫等等。總之,資料庫性能調優的目的在於使系統運行得更快。
調優需要有廣泛的知識,這使得它既簡單又復雜。
說調優簡單,是因為調優者不必糾纏於復雜的公式和規則。許多學術界和業界的研究者都在嘗試將調優和查詢處理建立在數學基礎之上。
稱調優復雜,是因為如果要完全理解常識所依賴的原理,還需要對應用、資料庫管理系統、操作系統以及硬體有廣泛而深刻的理解。
資料庫調優技術可以在不同的資料庫系統中使用。如果需要調優資料庫系統,最好掌握如下知識: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、是不是使用非聚集索引的查詢都需要進行聚集的查詢?
不是的,雖然在上一點中查詢轉換為聚集索引的查找,有時候可以只需要使用非聚集索引。
創建表並創建相應的索引:create table t1(c1 int,c2 int,c3 int);create index it1c2c3 on t1(c2,c3)。查詢語句為:select c3 from t1 where c2=1。
因為索引it1c2c3(c2,c3)覆蓋查詢語句中的列(c2,c3)。所以,該查詢語句的執行流程為:通過索引鍵(1,- ∞)命中索引it1c2c3,對於該記錄直接返回c3對應的值,繼續向後掃描,如果索引記錄中c1還是等於1,那麼輸出c3,以此類推,直到出現第一條c1不等於1的索引記錄,結束查詢。
6、創建索引的規則
創建索引首先要考慮的是列的可選擇性。比較一下列中唯一鍵的數量和表中記錄的行數,就可以判斷該列的可選擇性。如果該列的「唯一鍵的數量/表中記錄行數」的比值越接近於1,則該列的可選擇行越高。在可選擇性高的列上進行查詢,返回的數據就較少,比較適合索引查詢。相反,比如性別列上只有兩個值,可選擇行就很小,不適合索引查詢。
⑷ sql調優的幾種方式
你好,
SQL優化的一些方法
1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描。
3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描。
5.in 和 not in 也要慎用,否則會導致全表掃描,
6.下面的查詢也將導致全表掃描:
select id from t where name like '%abc%'
7.應盡量避免在 where 子句中對欄位進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。
8.應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。
9.不要在 where 子句中的「=」左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引。
10.在使用索引欄位作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第一個欄位作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓欄位順序與索引順序相一致。
⑸ 資料庫的優化
。。其實每個項目需求不一樣,肯定處理方法不一樣。
你說IO/cpu/內存這些,其實屬於資料庫調優的部分,最簡單的辦法就是找瓶頸。
哪方面是瓶頸,就優化哪方面,就像木桶一樣,盡量把最短的板子拉長。
因為資料庫本身不可能做到絕對完美,只能說在當前需求,當前資源的情況下盡量做到最好。
要真說精髓,那就是隨機應變吧。
多注意Top 5 events , 盡量消除等待事件,降低物理讀,降低硬解析等等。。。
⑹ SQL資料庫性能和資料庫調優
連接數量有三種方法查看 1.通過系統的逗性能地來查看: 開始->管理工具->性能(或者是運行裡面輸入 mmc)然後通過 添加計數器添加 SQL 的常用統計 然後在下面列出的項目裡面選擇用戶連接就可以時時查詢到sql server資料庫連接數了。 不過此方法的話需要有訪問那台計算機的許可權,就是要通過windows賬戶登陸進去才可以添加此計數器。 2.通過系統表來查詢: SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYSDATABASES] WHERE NAME='databaseName' ) databaseName 是需要查看的資料庫,然後查詢出來的行數,就是當前的sql server資料庫連接數。不過裡面還有一些別的狀態可以做參考用。 3.通過系統過程來查詢: SP_WHO 'loginName' loginName 是當然登陸Sql的用戶名,一般程序裡面都會使用一個username來登陸SQL這樣通過這個用戶名就能查看到此用戶名登陸之後佔用的連接了。 如果不寫loginName,那麼返回的就是所有的sql server資料庫連接。 至於如何改善資料庫性能,就是屬於資料庫調優方面的工作了,通常有以下幾種調優方法: 1 查看資料庫中造成資料庫訪問變慢的語句,通常是執行數量較多,執行速度慢的語句,對這些語句進行執行計劃分析,並重寫語句來優化,最常見的就是not in語句使用外連接語句代替; 2 根據語句中查詢訪問條件中的謂詞,創建對應的索引,以提高查詢的執行效率; 3 在數據存儲上優化,將數據文件根據某個頻繁訪問屬性的屬性值進行水平分片,提高對應表的訪問效率(oracle支持,sql server2000沒有此功能) 4 重新設計業務邏輯結構,避免執行代價高的查詢語句 5 伺服器和資料庫軟體的能力終究還是有限的,無論如何優化當達到一定的訪問數量是還是會超出負載,此時就需要考慮可擴展規模的分布式並行數據存儲架構了。
⑺ 如何優化資料庫的性能
--資料庫性能調優
--1.聚集索引、主鍵
--2.盡量不要用臨時表
--3.多多使用事務
--4.表設計要規范
--5.不要使用游標
--6.避免死鎖
--7.不要打開大數據集
--8.最好不要select *
--9.不要使用text數據類型,用varchar
--10.不要給諸如「性別」列創建索引
--11.不要使用Insert插入大量的數據
--12.盡量用join代替where,因為where進行全表搜索
⑻ 資料庫調優的一般步驟是什麼有哪些好的資料可以參考
D1 業務邏輯 (影響最大)
D2 數據設計 (表結構設計,數據建模)
D3 應用程序設計 (SQL 語句的寫法)
D4 資料庫的邏輯結構 (索引,區間,段,表空間)
D5 資料庫操作 (參數和配置)
D6 訪問路徑
D7 內存分配情況
D8 I/O 和物理設計 (DBA 與業務溝通)(峰值多大,使用周期)
D9 資源的徵用
D10 操作系統的調節
D1-D3 影響最大但比較難修改 (事先去做)
D4-D9 性能影響不是最大但經常去做的(DBA)
D10 手段不是很多
具體給你本電子書看看吧
http://wenku..com/view/a8ba4728915f804d2b16c17d.html