資料庫性能調整
1. oracle資料庫的性能優化有哪些方法
你最好買一本專門講ORACLE性能優化的書,好好看看
1、調整資料庫伺服器的性能
Oracle資料庫伺服器是整個系統的核心,它的性能高低直接影響整個系統的性能,為了調整Oracle資料庫伺服器的性能,主要從以下幾個方面考慮:
1.1、調整操作系統以適合Oracle資料庫伺服器運行
Oracle資料庫伺服器很大程度上依賴於運行伺服器的操作系統,如果操作系統不能提供最好性能,那麼無論如何調整,Oracle資料庫伺服器也無法發揮其應有的性能。
1.1.1、為Oracle資料庫伺服器規劃系統資源
據已有計算機可用資源, 規劃分配給Oracle伺服器資源原則是:盡可能使Oracle伺服器使用資源最大化,特別在Client/Server中盡量讓伺服器上所有資源都來運行Oracle服務。
1.1.2、調整計算機系統中的內存配置
多數操作系統都用虛存來模擬計算機上更大的內存,它實際上是硬碟上的一定的磁碟空間。當實際的內存空間不能滿足應用軟體的要求時,操作系統就將用這部分的磁碟空間對內存中的信息進行頁面替換,這將引起大量的磁碟I/O操作,使整個伺服器的性能下降。為了避免過多地使用虛存,應加大計算機的內存。
1.1.3、為Oracle資料庫伺服器設置操作系統進程優先順序
不要在操作系統中調整Oracle進程的優先順序,因為在Oracle資料庫系統中,所有的後台和前台資料庫伺服器進程執行的是同等重要的工作,需要同等的優先順序。所以在安裝時,讓所有的資料庫伺服器進程都使用預設的優先順序運行。
1.2、調整內存分配
Oracle資料庫伺服器保留3個基本的內存高速緩存,分別對應3種不同類型的數據:庫高速緩存,字典高速緩存和緩沖區高速緩存。庫高速緩存和字典高速緩存一起構成共享池,共享池再加上緩沖區高速緩存便構成了系統全程區(SGA)。SGA是對資料庫數據進行快速訪問的一個系統全程區,若SGA本身需要頻繁地進行釋放、分配,則不能達到快速訪問數據的目的,因此應把SGA放在主存中,不要放在虛擬內存中。內存的調整主要是指調整組成SGA的內存結構的大小來提高系統性能,由於Oracle資料庫伺服器的內存結構需求與應用密切相關,所以內存結構的調整應在磁碟I/O調整之前進行。
1.2.1、庫緩沖區的調整
庫緩沖區中包含私用和共享sql和PL/SQL區,通過比較庫緩沖區的命中率決定它的大小。要調整庫緩沖區,必須首先了解該庫緩沖區的活動情況,庫緩沖區的活動統計信息保留在動態性能表v$librarycache數據字典中,可通過查詢該表來了解其活動情況,以決定如何調整。
Select sum(pins),sum(reloads) from v$librarycache;
Pins列給出SQL語句,PL/SQL塊及被訪問對象定義的總次數;Reloads列給出SQL 和PL/SQL塊的隱式分析或對象定義重裝載時在庫程序緩沖區中發生的錯誤。如果sum(pins)/sum(reloads) ≈0,則庫緩沖區的命中率合適;若sum(pins)/sum(reloads)>1, 則需調整初始化參數 shared_pool_size來重新調整分配給共享池的內存量。
1.2.2、數據字典緩沖區的調整
數據字典緩沖區包含了有關資料庫的結構、用戶、實體信息。數據字典的命中率,對系統性能影響極大。數據字典緩沖區的使用情況記錄在動態性能表v$librarycache中,可通過查詢該表來了解其活動情況,以決定如何調整。
Select sum(gets),sum(getmisses) from v$rowcache;
Gets列是對相應項請求次數的統計;Getmisses 列是引起緩沖區出錯的數據的請求次數。對於頻繁訪問的數據字典緩沖區,sum(getmisses)/sum(gets)<10%~15%。若大於此百分數,則應考慮增加數據字典緩沖區的容量,即需調整初始化參數shared_pool_size來重新調整分配給共享池的內存量。
1.2.3、緩沖區高速緩存的調整
用戶進程所存取的所有數據都是經過緩沖區高速緩存來存取,所以該部分的命中率,對性能至關重要。緩沖區高速緩存的使用情況記錄在動態性能表v$sysstat中,可通過查詢該表來了解其活動情況,以決定如何調整。
Select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads');
dbblock gets和consistent gets的值是請求數據緩沖區中讀的總次數。physical reads的值是請求數據時引起從盤中讀文件的次數。從緩沖區高速緩存中讀的可能性的高低稱為緩沖區的命中率,計算公式:
Hit Ratio=1-(physical reds/(dbblock gets+consistent gets))
如果Hit Ratio<60%~70%,則應增大db_block_buffers的參數值。db_block_buffers可以調整分配給緩沖區高速緩存的內存量,即db_block_buffers可設置分配緩沖區高速緩存的數據塊的個數。緩沖區高速緩存的總位元組數=db_block_buffers的值*db_block_size的值。db_block_size 的值表示數據塊大小的位元組數,可查詢 v$parameter 表:
select name,value from v$parameter where name='db_block_size';
在修改了上述資料庫的初始化參數以後,必須先關閉資料庫,在重新啟動資料庫後才能使新的設置起作用。
2. 鎬庢牱浼樺寲mysql鏁版嵁搴撴潵鎻愰珮mysql鎬ц兘(mysql鏁版嵁搴撶殑浼樺寲)
浼樺寲鈥渕ysql鏁版嵁搴撯濇潵鎻愰珮鈥渕ysql鎬ц兘鈥濈殑鏂規硶鏈夛細
1銆侀夊彇鏈閫傜敤鐨勫瓧孌靛睘鎬с
MySQL鍙浠ュ緢濂界殑鏀鎸佸ぇ鏁版嵁閲忕殑瀛樺彇錛屼絾鏄涓鑸璇存潵錛屾暟鎹搴撲腑鐨勮〃瓚婂皬錛屽湪瀹冧笂闈㈡墽琛岀殑鏌ヨ涔熷氨浼氳秺蹇銆傚洜姝わ紝鍦ㄥ壋寤鴻〃鐨勬椂鍊欙紝涓轟簡鑾峰緱鏇村ソ鐨勬ц兘錛屾垜浠鍙浠ュ皢琛ㄤ腑瀛楁電殑瀹藉害璁懼緱灝藉彲鑳藉皬銆
2銆佷嬌鐢ㄨ繛鎺ワ紙JOIN錛夋潵浠f浛瀛愭煡璇(Sub-Queries)銆
MySQL浠4.1寮濮嬫敮鎸丼QL鐨勫瓙鏌ヨ銆傝繖涓鎶鏈鍙浠ヤ嬌鐢⊿ELECT璇鍙ユ潵鍒涘緩涓涓鍗曞垪鐨勬煡璇㈢粨鏋滐紝鐒跺悗鎶婅繖涓緇撴灉浣滀負榪囨護鏉′歡鐢ㄥ湪鍙︿竴涓鏌ヨ涓銆
3銆佷嬌鐢ㄨ仈鍚(UNION)鏉ヤ唬鏇挎墜鍔ㄥ壋寤虹殑涓存椂琛ㄣ
MySQL浠4.0鐨勭増鏈寮濮嬫敮鎸乁NION鏌ヨ錛屽畠鍙浠ユ妸闇瑕佷嬌鐢ㄤ復鏃惰〃鐨勪袱鏉℃垨鏇村氱殑SELECT鏌ヨ㈠悎騫剁殑涓涓鏌ヨ涓銆傚湪瀹㈡埛絝鐨勬煡璇浼氳瘽緇撴潫鐨勬椂鍊欙紝涓存椂琛ㄤ細琚鑷鍔ㄥ垹闄わ紝浠庤屼繚璇佹暟鎹搴撴暣榻愩侀珮鏁堛
4銆佷簨鍔°
瑕佹妸鏌愪釜鏁版嵁鍚屾椂鎻掑叆涓や釜鐩稿叧鑱旂殑琛ㄤ腑錛屽彲鑳戒細鍑虹幇榪欐牱鐨勬儏鍐碉細絎涓涓琛ㄤ腑鎴愬姛鏇存柊鍚庯紝鏁版嵁搴撶獊鐒跺嚭鐜版剰澶栫姸鍐碉紝閫犳垚絎浜屼釜琛ㄤ腑鐨勬搷浣滄病鏈夊畬鎴愶紝榪欐牱錛屽氨浼氶犳垚鏁版嵁鐨勪笉瀹屾暣錛岀敋鑷充細鐮村潖鏁版嵁搴撲腑鐨勬暟鎹銆傝侀伩鍏嶈繖縐嶆儏鍐碉紝灝卞簲璇ヤ嬌鐢ㄤ簨鍔★紝瀹冪殑浣滅敤鏄錛氳佷箞璇鍙ュ潡涓姣忔潯璇鍙ラ兘鎿嶄綔鎴愬姛錛岃佷箞閮藉け璐ャ
5銆侀攣瀹氳〃銆
灝界′簨鍔℃槸緇存姢鏁版嵁搴撳畬鏁存х殑涓涓闈炲父濂界殑鏂規硶錛屼絾鍗村洜涓哄畠鐨勭嫭鍗犳э紝鏈夋椂浼氬獎鍝嶆暟鎹搴撶殑鎬ц兘錛屽挨鍏舵槸鍦ㄥ緢澶х殑搴旂敤緋葷粺涓銆傜敱浜庡湪浜嬪姟鎵ц岀殑榪囩▼涓錛屾暟鎹搴撳皢浼氳閿佸畾錛屽洜姝ゅ叾瀹冪殑鐢ㄦ埛璇鋒眰鍙鑳芥殏鏃剁瓑寰呯洿鍒拌ヤ簨鍔$粨鏉熴
6銆佷嬌鐢ㄥ栭敭銆
閿佸畾琛ㄧ殑鏂規硶鍙浠ョ淮鎶ゆ暟鎹鐨勫畬鏁存э紝浣嗘槸瀹冨嵈涓嶈兘淇濊瘉鏁版嵁鐨勫叧鑱旀с傝繖涓鏃跺欐垜浠灝卞彲浠ヤ嬌鐢ㄥ栭敭銆
7銆佷嬌鐢ㄧ儲寮
緔㈠紩鏄鎻愰珮鏁版嵁搴撴ц兘鐨勫父鐢ㄦ柟娉曪紝瀹冨彲浠ヤ護鏁版嵁搴撴湇鍔″櫒浠ユ瘮娌℃湁緔㈠紩蹇寰楀氱殑閫熷害媯緔㈢壒瀹氱殑琛岋紝灝ゅ叾鏄鍦ㄦ煡璇㈣鍙ュ綋涓鍖呭惈鏈塎AX(),MIN()鍜孫RDERBY榪欎簺鍛戒護鐨勬椂鍊欙紝鎬ц兘鎻愰珮鏇翠負鏄庢樉銆
8銆佷紭鍖栫殑鏌ヨ㈣鍙
緇濆ぇ澶氭暟鎯呭喌涓嬶紝浣跨敤緔㈠紩鍙浠ユ彁楂樻煡璇㈢殑閫熷害錛屼絾濡傛灉SQL璇鍙ヤ嬌鐢ㄤ笉鎮板綋鐨勮瘽錛岀儲寮曞皢鏃犳硶鍙戞尌瀹冨簲鏈夌殑浣滅敤銆
3. 如何優化資料庫的性能
--資料庫仿塵性能調優
--1.聚集索引譽數、主鍵
--2.盡量不要用臨時表
--3.多多使用事務
--4.表設計要規慶大首范
--5.不要使用游標
--6.避免死鎖
--7.不要打開大數據集
--8.最好不要select *
--9.不要使用text數據類型,用varchar
--10.不要給諸如「性別」列創建索引
--11.不要使用Insert插入大量的數據
--12.盡量用join代替where,因為where進行全表搜索
4. Oracle資料庫系統調優方法
Oracle 資料庫廣泛應用在社會的各個領域,特別是在Client/Server模式的應用,但是應用開發者往往碰到整個系統的性能隨著數據量的增大顯著下降的問題,為了解決這個問題,從以下幾個方面:資料庫伺服器、網路I/O、應用程序等對整個系統加以調整,充分發揮Oracle的效能,提高整個系統的性能。
1 調整資料庫伺服器的性能
Oracle資料庫伺服器是整個系統的核心,它的性能高低直接影響整個系統的性能,為了調整Oracle資料庫伺服器的性能,主要從以下幾個方面考慮:
1.1 調整
操作系統以適合Oracle資料庫伺服器運行
Oracle資料庫伺服器很大程度上依賴於運行伺服器的操作系統,如果操作系統不能提供最好性能,那麼無論如何調整,Oracle資料庫伺服器也無法發揮其應有的性能。
1.1.1 為Oracle資料庫伺服器規劃系統資源
據已有計算機可用資源, 規劃分配給Oracle伺服器資源原則是:盡可能使Oracle伺服器使用資源最大化,特別在Client/Server中盡量讓伺服器上所有資源都來運行Oracle服務。
1.1.2 調整計算機系統中的內存配置
多數操作系統都用虛存來模擬計算機上更大的內存,運告它實際上是硬碟上的一定的磁碟空間。當實際的內存空間不能滿足應用軟體的要求時,操作系統就將用這部分的磁碟空間對內存中的信息進行頁面替換,這將引起大量的磁碟I/O操作,使整個伺服器的性能下降。為了避免過多地使用虛存,應加大計算機的內存。
1.1.3 為Oracle資料庫伺服器設置操作系統進程優先順序
不要在操作系統中調整Oracle進程的優先順序,因為在Oracle資料庫系統中,所有的後台和前台資料庫伺服器進程執行的是同等重要的工作,需要同等的優先順序。所以在安裝時,讓所有的資料庫伺服器進程都使用預設的優先順序運行。
1.2 調整內存分配
Oracle資料庫伺服器保留3個基本的內存高速緩存,分別對應3種不同類型的數據:庫高速緩存,字典高速緩存和緩沖區高速緩存。庫高速緩存和字典高速緩存一起構成共享池,共享池再加上緩沖區高速緩存便構成了系統全程區(SGA)。SGA是對資料庫數據進行快速訪問的一個系統全程區,若SGA本身需要頻繁地進行釋放、分配,則不能達到快速訪問數據的目的,因此應把SGA放在主存中,不要放在虛擬內存中。內存的調整主要是指調整組成SGA的內存結構的大小來提高系統性能,由於Oracle資料庫伺服器的內存結構需求與應用密切相關,所以內存結構的調整應在磁碟I/O調整之前進行。
1.2.1 庫緩沖區的調整
庫緩沖區中包含私用和共享SQL和PL/SQL區,通過比較庫緩沖區的命中率決定它的大小。要調整庫緩沖區,必須首先了解該庫緩沖區的活動情況,庫緩沖區的活動統計信息保留在動態性能表v$librarycache數據字典中,可通過查詢該表來了解其活動情況,以決定如何調做敬整。
1.2.2 數據字典緩沖區的調整
數據字典緩沖區包含了有關資料庫的結構、用戶、實體信息。數據字典的命中率純悄慎,對系統性能影響極大。數據字典緩沖區的使用情況記錄在動態性能表v$librarycache中,可通過查詢該表來了解其活動情況,以決定如何調整。
1.2.3 緩沖區高速緩存的調整
用戶進程所存取的所有數據都是經過緩沖區高速緩存來存取,所以該部分的命中率,對性能至關重要。緩沖區高速緩存的使用情況記錄在動態性能表v$sysstat中,可通過查詢該表來了解其活動情況,以決定如何調整。
2 調整 Client/Server 模式下的網路 I/O
Client/Server環境中的應用處理是分布在客戶應用程序和資料庫服務程序之間的。在 Client/Server環境中Client與Server之間的網路I/O是整個系統性能提高的瓶頸,一個客戶應用程序引起的網路I/O越少,應用及整個系統的性能越好。減少網路I/O的最重要的一條原則:將應用邏輯集中在資料庫伺服器中。
2.1 使用Oracle資料庫的完整約束性
當為應用建表時,應當為一些有特殊要求的數據加上適當的完整性約束,這樣就能實現由資料庫本身而不是應用程序來約束數據符合一定的條件。資料庫伺服器端的完整約束的執行操作是在比SQL語句級別更低的系統機制上優化,它與客戶端無關,只在伺服器中運行,不需在Client 端和Server端之間傳遞SQL語句,有效地減輕網路I/O負擔。
2.2 使用資料庫觸發器
完整約束性只能實現一些較簡單的數據約束條件,對一些較復雜的事物處理規則就無能為力,這時最好不要在應用程序中實施復雜的程序控制,而是應當採用資料庫觸發器來實施復雜的事物規則。資料庫觸發器能實現由資料庫本身,而不是應用程序,來約束數據符合復雜的事物處理規則,並且容易創建,便於管理,避免大量的網路I/O。
2.3 使用存儲過程、存儲函數和包
Oracle的存儲過程和存儲函數是命名的能完成一定功能並且存儲在Server端的PL/SQL的集合。包是一種把有關的過程和函數組織封裝成一個資料庫程序單元的方法。它們相對於應用程序的過程、函數而言,把SQL命令存儲在Server端。使用存儲過程和存儲函數,應用程序不必再包含多個網路操作的SQL語句去執行資料庫伺服器操作,而是簡單調用存儲過程和存儲函數,在網路上傳輸的只是調用過程的名字和輸出結果,這樣就可減少大量的網路I/O。
3 應用程序的調整
3.1 SQL語句的優化
SQL語句的執行速度,可以受很多因素的影響而變化。但主要的影響因素是:驅動表、執行操作的先後順序和索引的運用。可以由很多不同的方法間接地改變這些因素,以達到最優的執行速度。這里主要探討當對多個表進行連接查詢時應遵循的優化原則:
3.2 建立和使用視圖、索引
利用視圖可以將基表中的列或行進行裁減、隱藏一部分數據,並且能夠將涉及到多個表的復雜查詢以視圖的方式給出,使應用程序開發簡潔快速。利用索引可以提高查詢性能,減少磁碟 I/O,優化對數據表的查詢,加速SQL語句的執行。但任何時候建立索引都能提高性能,何時建立索引應當遵循以下原則:該表常用來在索引列上查詢,該表不常更新、插入、刪除等操作,查詢出來的結果記錄數應控制在原表的2%~4%。
3.3 使用 Oracle 的數組介面
當一個客戶應用程序插入一行或用一個查詢來向伺服器請求某行時,不是發送具有單個行的網路包,而是採用數組處理,即把要插入的多個行或檢索出的多個行緩沖在數組中,然後通過很少的幾個包就可在網上傳送這些數組。例如,一個給定的Select語句返回2000行數據,每行平均大小為40個位元組,數據包的大小為4kB,而數組大小參數(arraysize)設置為20 ,則需從伺服器發送100個數據包到客戶機。如果簡單地把(arraysize)設置為2000,那麼同樣的操作只需要傳送 20個數據包。這樣就減少了網路的傳輸量,提高了所有應用的性能。
4 總結
我們在開發應用程序時,遵循上述的方法和原則,對系統進行調整,收到了令人滿意的效果。但是應當指出,由於客戶機、網路、伺服器這3個相互依存的組成部分都必須調整和同步才能產生最佳的性能,因此還應根據系統的具體情況,具體分析和調整。
5. java 紼嬪簭濡備綍鍋 MySQL 鐨勬ц兘浼樺寲錛
1. 浣跨敤緔㈠紩錛氬湪鏌ヨ㈣鍙ヤ腑錛屽傛灉緇忓父浣跨敤鏌愪釜瀛楁佃繘琛屾煡璇錛屽彲浠ョ粰璇ュ瓧孌墊坊鍔犵儲寮曪紝浠ュ姞蹇鏌ヨ㈤熷害銆
2. 浼樺寲SQL璇鍙ワ細閬垮厤浣跨敤SELECT *錛屽彧閫夋嫨闇瑕佺殑瀛楁碉紱灝介噺閬垮厤鍦╓HERE瀛愬彞涓浣跨敤錛=鎴<>鎿嶄綔絎︼紝鍚﹀垯灝嗗艱嚧MySQL鏃犳硶浣跨敤緔㈠紩錛涘逛簬澶嶆潅鐨凧OIN鎿嶄綔錛屽彲浠ヨ冭檻鎷嗗垎鎴愬氫釜綆鍗曠殑鏌ヨ銆
3. 浣跨敤緙撳瓨錛氬逛簬棰戠箒璁塊棶鐨勬暟鎹錛屽彲浠ヤ嬌鐢ㄧ紦瀛樻潵鍑忓皯鏁版嵁搴撶殑璁塊棶嬈℃暟錛屾彁楂樻ц兘銆
4. 浼樺寲琛ㄧ粨鏋勶細鍚堢悊璁捐¤〃緇撴瀯錛岄伩鍏嶅啑浣欏瓧孌碉紝灝介噺鍑忓皯澶у瓧孌電殑浣跨敤錛岄夋嫨鍚堥傜殑鏁版嵁綾誨瀷絳夈
5. 浼樺寲鏁版嵁搴撻厤緗錛氭牴鎹鏈嶅姟鍣ㄧ殑紜浠惰祫婧愬拰涓氬姟闇奼傦紝鍚堢悊璁劇疆MySQL鐨勯厤緗鍙傛暟錛屽傜紦鍐插尯澶у皬銆佽繛鎺ユ暟絳夈
6. 鍒嗗尯琛錛氬逛簬澶ц〃錛屽彲浠ヨ冭檻浣跨敤鍒嗗尯琛ㄦ潵鎻愰珮鏌ヨ㈡ц兘銆
7. 浣跨敤InnoDB瀛樺偍寮曟搸錛欼nnoDB瀛樺偍寮曟搸鏀鎸佷簨鍔″勭悊銆佽岀駭閿佸畾絳夊姛鑳斤紝鍙浠ユ彁楂樺苟鍙戞ц兘銆
8. 瀹氭湡緇存姢錛氬畾鏈熷規暟鎹搴撹繘琛屽囦喚銆佷紭鍖栧拰閲嶅緩緔㈠紩絳夋搷浣滐紝浠ヤ繚鎸佹暟鎹搴撶殑鑹濂界姸鎬併
9. 浣跨敤榪炴帴奼狅細浣跨敤榪炴帴奼犲彲浠ュ噺灝戦戠箒鍒涘緩鍜屽叧闂榪炴帴鎵甯︽潵鐨勬ц兘寮閿銆
10. 浠g爜浼樺寲錛氬湪緙栧啓Java紼嬪簭鏃訛紝娉ㄦ剰浣跨敤棰勭紪璇戣鍙ャ佸噺灝戞暟鎹搴撹繛鎺ユ℃暟銆佸悎鐞嗕嬌鐢ㄤ簨鍔$瓑錛屼互鎻愰珮紼嬪簭鐨勬ц兘銆