版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、系統(tǒng)性能問題分析及優(yōu)化策略方法摘要:隨著信息化建設(shè)的深入和普及,信息系統(tǒng)已經(jīng)成為了社會的生產(chǎn)、生活重要組成部分,信息系統(tǒng)由各類型復(fù)雜的軟、硬件組成,功能邏輯結(jié)構(gòu)復(fù)雜,數(shù)據(jù)種類多樣,系統(tǒng)的性能猶如系統(tǒng)的生命,是系統(tǒng)正常運行服務(wù)的關(guān)鍵,越來越受到人們的重視。如何優(yōu)化系統(tǒng)性能,是系統(tǒng)設(shè)計研發(fā)者們必須考慮的問題。性能優(yōu)化目標只有一個就是提高系統(tǒng)性能,但是性能分析優(yōu)化的方法策略卻多種多樣,如系統(tǒng)的架構(gòu)優(yōu)化,程序的邏輯優(yōu)化,內(nèi)存、I/O、網(wǎng)絡(luò)、磁盤優(yōu)化,數(shù)據(jù)庫優(yōu)化等等。如何選擇合適的優(yōu)化方法,解決性能問題,是系統(tǒng)性能優(yōu)化的關(guān)鍵。關(guān)鍵詞:性能、優(yōu)化、系統(tǒng)、升級System Performance Analy
2、sis and Optimization StrategyAbstract: With the development and popularization of grid informatization, the information systems has become an important part of social production and living. They are composing by types of complex information system software and hardware components. Their functions lo
3、gical structures are of complex and their data types are diverse. The system performance is like living systems which is the key to the normal operation of the service, attracting more and more people's attention. How to optimize system performance is the problem that must be considered by the d
4、esigner and developer. Performance Optimization has only one goal that is to improve system performance. However, performance analysis and optimization methods and strategies are various, such as system architecture optimization, logic optimization, memory optimization, I / O optimization, network o
5、ptimization, disk optimization, database optimization and so on. How to choose a suitable optimization method to solve performance problems is the key to system performance optimization.Keywords: Performance, Optimization, System, Upgrade0. 引言 信息系統(tǒng)的性能是一種非功能性要求,雖然不是系統(tǒng)功能關(guān)注的重點,但卻是反應(yīng)功能是否正常穩(wěn)定運行提供服務(wù)的關(guān)鍵。如何
6、及時的發(fā)現(xiàn)系統(tǒng)性能問題,做到防患于未然是系統(tǒng)建設(shè)管理人員必須具備基本能力。本文是總結(jié)了多次系統(tǒng)性能優(yōu)化管理工作中的經(jīng)驗方法,供信息系統(tǒng)的建設(shè)管理人員參考。1. 性能問題表現(xiàn)系統(tǒng)暴露性能問題,在系統(tǒng)使用過程中通常是非常容易發(fā)現(xiàn)的,簡單總結(jié)起來,主要表現(xiàn)在以下幾個方面:1.1 響應(yīng)時間響應(yīng)時間是指系統(tǒng)對請求做出響應(yīng)的時間。直觀上看,這個指標與人對軟件性能的主觀感受是非常一致的,因為它完整地記錄了整個計算機系統(tǒng)處理請求的時間。由于一個系統(tǒng)通常會提供許多功能,而不同功能的處理邏輯也千差萬別,因而不同功能的響應(yīng)時間也不盡相同,甚至同一功能在不同輸入數(shù)據(jù)的情況下響應(yīng)時間也不相同。所以,在討論一個系統(tǒng)的響應(yīng)
7、時間時,人們通常是指該系統(tǒng)所有功能的平均時間或者所有功能的最大響應(yīng)時間。當然,往往也需要對每個或每組功能討論其平均響應(yīng)時間和最大響應(yīng)時間。對于單機的沒有并發(fā)操作的應(yīng)用系統(tǒng)而言,人們普遍認為響應(yīng)時間是一個合理且準確的性能指標。需要指出的是,響應(yīng)時間的絕對值并不能直接反映軟件的性能的高低,軟件性能的高低實際上取決于用戶對該響應(yīng)時間的接受程度。對于一個游戲軟件來說,響應(yīng)時間小于100毫秒應(yīng)該是不錯的,響應(yīng)時間在1秒左右可能屬于勉強可以接受,如果響應(yīng)時間達到3秒就完全難以接受了。而對于編譯系統(tǒng)來說,完整編譯一個較大規(guī)模軟件的源代碼可能需要幾十分鐘甚至更長時間,但這些響應(yīng)時間對于用戶來說都是可以接受的。
8、1.2 延遲時間雖然軟件性能指標本身只涉及軟件性能的度量,但考慮到軟件性能測試的主要目的是測試和改善所開發(fā)軟件的性能,對于復(fù)雜的網(wǎng)絡(luò)化的系統(tǒng)而言,簡單地用響應(yīng)時間進行度量就不一定合適了??紤]一個普通的網(wǎng)站系統(tǒng)。開發(fā)該網(wǎng)站系統(tǒng)時,軟件開發(fā)實際上只集中在服務(wù)器端,因為客戶端的軟件是標準的瀏覽器。雖然用戶看到的響應(yīng)時間時使用特定客戶端計算機上的特定瀏覽器瀏覽該網(wǎng)站的響應(yīng)時間,但是在討論軟件性能時更關(guān)心所開發(fā)網(wǎng)站軟件本身的“響應(yīng)時間”。也就是說,可以把用戶感受到的響應(yīng)時間劃分為“呈現(xiàn)時間”和“系統(tǒng)響應(yīng)時間”,前者是指客戶端的瀏覽器在接收到網(wǎng)站數(shù)據(jù)時呈現(xiàn)頁面所需的時間,而后者是指客戶端接收到用戶請求到客
9、戶端接收到服務(wù)器發(fā)來的數(shù)據(jù)所需的時間。顯然,軟件性能測試更關(guān)心“系統(tǒng)響應(yīng)時間”,因為“呈現(xiàn)時間”與客戶端計算機和瀏覽器有關(guān),而與所開發(fā)的網(wǎng)站軟件沒有太大的關(guān)系。如果仔細分析這個例子,還可以把“系統(tǒng)響應(yīng)時間”進一步分解為“網(wǎng)絡(luò)傳輸時間”和“應(yīng)用延遲時間”,其中前者是指數(shù)據(jù)(包括請求數(shù)據(jù)和響應(yīng)數(shù)據(jù))在客戶端和服務(wù)器端進行傳輸?shù)臅r間,而后者是指網(wǎng)站軟件實際處理請求所需的時間。類似的,軟件性能測試也更關(guān)心“應(yīng)用延遲時間”。實際上,這種分解還可以繼續(xù)下去,如果該網(wǎng)站系統(tǒng)使用了數(shù)據(jù)庫,我們可以把“數(shù)據(jù)庫延遲時間”分離出來,如果該網(wǎng)站系統(tǒng)使用了中間件,還可以把“中間件延遲時間”也分離出來。以上的時間分解實際
10、上有兩方面的目的。首先,人們通常希望把與所開發(fā)軟件直接相關(guān)的延遲時間和與所開發(fā)軟件不相關(guān)的延遲時間分離開,因為改善前者往往需要開發(fā)人員修改程序代碼,而改善后者不需要開發(fā)人員修改代碼,很多時候,開發(fā)人員對后者甚至是無能為力的。其次,詳細的分解有助于開發(fā)人員分析哪些部分是影響軟件性能的主要因素,以便于實時性能改善方案。1.3 吞吐量吞吐量是指系統(tǒng)在單位時間內(nèi)處理請求的數(shù)量。對于無并發(fā)的應(yīng)用系統(tǒng)而言,吞吐量與響應(yīng)時間成反比關(guān)系,實際上此時吞吐量就是響應(yīng)時間的倒數(shù)。前面已經(jīng)說過,對于單用戶的系統(tǒng),響應(yīng)時間(或者系統(tǒng)響應(yīng)時間和應(yīng)用延遲時間)可以很好地度量系統(tǒng)的性能,但對于并發(fā)系統(tǒng),通常需要用吞吐量作為性
11、能指標。對于一個多用戶的系統(tǒng),如果只有一個用戶使用時系統(tǒng)的平均響應(yīng)時間是T,當有你N個用戶使用時,每個用戶看到的響應(yīng)時間通常并不是N*T,而往往比N*T小很多(當然,在某些特殊情況下也可能比N*T大,甚至大很多)。這是因為處理每個請求需要用到很多資源,由于每個請求的處理過程中有許多步驟難以并發(fā)執(zhí)行,這導(dǎo)致在具體的一個時間點,所占資源往往并不多。也就是說在處理單個請求時,在每個時間點都可能有許多資源被閑置,當處理多個請求時,如果資源配置合理,每個用戶看到的平均響應(yīng)時間并不隨用戶數(shù)的增加而線性增加。實際上,不同系統(tǒng)的平均響應(yīng)時間隨用戶數(shù)增加而增長的速度也不大相同,這也是采用吞吐量來度量并發(fā)系統(tǒng)的性
12、能的主要原因。一般而言,吞吐量是一個比較通用的指標,兩個具有不同用戶數(shù)和用戶使用模式的系統(tǒng),如果其最大吞吐量基本一致,則可以判斷兩個系統(tǒng)的處理能力基本一致。1.4 并發(fā)用戶數(shù)并發(fā)用戶數(shù)是指系統(tǒng)可以同時承載的正常使用系統(tǒng)功能的用戶的數(shù)量。與吞吐量相比,并發(fā)用戶數(shù)是一個更直觀但也更籠統(tǒng)的性能指標。實際上,并發(fā)用戶數(shù)是一個非常不準確的指標,因為用戶不同的使用模式會導(dǎo)致不同用戶在單位時間發(fā)出不同數(shù)量的請求。以網(wǎng)站系統(tǒng)為例,假設(shè)用戶只有注冊后才能使用,但注冊用戶并不是每時每刻都在使用該網(wǎng)站,因此具體一個時刻只有部分注冊用戶同時在線,在線用戶就在瀏覽網(wǎng)站時會花很多時間閱讀網(wǎng)站上的信息,因而具體一個時刻只有
13、部分在線用戶同時向系統(tǒng)發(fā)出請求。這樣,對于網(wǎng)站系統(tǒng)我們會有三個關(guān)于用戶數(shù)的統(tǒng)計數(shù)字:注冊用戶數(shù)、在線用戶數(shù)和同時發(fā)請求用戶數(shù)。由于注冊用戶可能長時間不登陸網(wǎng)站,使用注冊用戶數(shù)作為性能指標會造成很大的誤差。而在線用戶數(shù)和同時發(fā)請求用戶數(shù)都可以作為性能指標。相比而言,以在線用戶作為性能指標更直觀些,而以同時發(fā)請求用戶數(shù)作為性能指標更準確些。1.5 資源利用率資源利用率反映的是在一段時間內(nèi)資源平均被占用的情況。對于數(shù)量為一的資源,資源利用率可以表示為被占用的時間與整段時間的比值;對于數(shù)量不為一的資源,資源利用率可以表示為在該段時間內(nèi)平均被占用的資源數(shù)與總資源數(shù)的比值。2. 何時性能優(yōu)化系統(tǒng)建設(shè)存在這
14、樣的一個規(guī)律:前期重功能輕性能,后期才會重視性能。建設(shè)初期,實現(xiàn)者的注意力只關(guān)注系統(tǒng)設(shè)計本身的業(yè)務(wù)功能和系統(tǒng)功能的實現(xiàn),而忽略系統(tǒng)性能問題。隨著系統(tǒng)建設(shè)投入應(yīng)用,系統(tǒng)業(yè)務(wù)功能、數(shù)據(jù)量、用戶并發(fā)量的增加,系統(tǒng)的性能問題逐步暴露,系統(tǒng)性能不斷下降,性能問題將會成為系統(tǒng)建設(shè)投運過程中的首要問題,此時才重視性能優(yōu)化,必將話費巨大的代價。所以,系統(tǒng)優(yōu)化必須在系統(tǒng)設(shè)計實現(xiàn)開始時就需要開始重視,系統(tǒng)架構(gòu)設(shè)計,基礎(chǔ)平臺中間件的選擇,代碼編寫、軟硬件配置等就需要考慮系統(tǒng)性能的要求。3. 性能優(yōu)化策略1233.1 空間換時間例如,各種Cache如CPU L1/L2/RAM到硬盤,都是用空間來換時間的策略,這樣的策
15、略基本上是把計算的過程一步一步的保存或者緩存下來,這樣就不用每次用的時候在計算一遍,比如數(shù)據(jù)緩存,CDN等。這樣的策略還表現(xiàn)為冗余數(shù)據(jù),比如數(shù)據(jù)鏡像,負載均衡等。3.2 時間換空間少量的空間可能性能會更好,比如網(wǎng)絡(luò)傳輸,如果有一些壓縮數(shù)據(jù)的算法,這樣的算法比較耗時,但因為瓶頸在網(wǎng)絡(luò)傳輸,所以用時間來換空間反而能省時間。4. 分析優(yōu)化方法性能優(yōu)化主要從操作使用層、業(yè)務(wù)層、架構(gòu)層、數(shù)據(jù)存儲、操作系統(tǒng)等幾個方面進行分析優(yōu)化:² 操作使用方面,主要考慮操作的簡便性、減少系統(tǒng)請求、合理控制分配各個功能點的使用等方面。² 業(yè)務(wù)層主要考慮業(yè)務(wù)體系的優(yōu)化,如對一些流程復(fù)雜的業(yè)務(wù)如何進行流程
16、統(tǒng)一;應(yīng)用系統(tǒng)功能如何進行拆分以達到功能配置最優(yōu)化。² 架構(gòu)層從系統(tǒng)架構(gòu)和應(yīng)用架構(gòu)兩個角度考慮,包括事務(wù)控制、代碼緩存、權(quán)限管理體系、遠程調(diào)用、工作流引擎等內(nèi)容。其優(yōu)化手段主要有優(yōu)化緩存管理、支持多數(shù)據(jù)源、應(yīng)用服務(wù)部署優(yōu)化等方面。² 數(shù)據(jù)庫層的優(yōu)化范圍包括數(shù)據(jù)庫的庫表結(jié)構(gòu)設(shè)計、數(shù)據(jù)存儲、數(shù)據(jù)庫操作等方面考慮,主要優(yōu)化手段包括表結(jié)構(gòu)設(shè)計的規(guī)范化、分區(qū)存儲、查詢優(yōu)化、索引的使用等策略。² 操作系統(tǒng)層的內(nèi)容考慮系統(tǒng)的并發(fā)用戶數(shù)、吞吐量,系統(tǒng)可靠性等方面,優(yōu)化手段包括多任務(wù)處理、負載均衡等手段。12344.1 系統(tǒng)架構(gòu)優(yōu)化應(yīng)該按照從大到小的原則進行,這樣的順序便于從整理發(fā)
17、現(xiàn)解決制約系統(tǒng)性能的關(guān)鍵問題,集中精力解決。優(yōu)化性能,首先需要從系統(tǒng)結(jié)構(gòu)或者框架入手,思考設(shè)計最佳的性能結(jié)果或框架,最后到編程工具、控件的選擇,及SQL語句優(yōu)化之類的細節(jié)問題。比如C/S、B/S混合結(jié)構(gòu)的使用,C/S結(jié)構(gòu)可以現(xiàn)實數(shù)據(jù)的快速傳遞和安全存儲,但是在易推廣遠程應(yīng)用發(fā)面卻不足;B/S結(jié)構(gòu)的系統(tǒng)易與集成和擴展,可提提供遠程的數(shù)據(jù)服務(wù)于管理,但在數(shù)據(jù)的交互性、動態(tài)服務(wù)和突變顯示方面比較欠缺。因此,針對系統(tǒng)中的不同功能,選擇合適的結(jié)構(gòu)來實現(xiàn)。4.2 代碼邏輯精簡代碼:代碼越精簡,執(zhí)行效率越高,特別對于C#、Java等面向?qū)ο笳Z言,由于面向?qū)ο蟮脑O(shè)計,多一行代碼,執(zhí)行時將會多增加一系列的關(guān)聯(lián)對
18、象的加載和執(zhí)行,所以代碼越精簡性能就越高。代碼精簡的水平取決于編程人員水平的高低,但是有一些代碼優(yōu)化策略,只要編碼過程中注意應(yīng)用,可以起到提高性能的目的,如:減少循環(huán)的層數(shù),減少遞歸,在循環(huán)中少申明變量,循環(huán)的執(zhí)行SQL語句查詢,少做分配和釋放內(nèi)存的操作,盡量的把循環(huán)體內(nèi)的表達式抽取到循環(huán)外,條件表達式盡量的將最多狀態(tài)放置在前面的判斷中,合理的使用異常機制等等。并行處理:多核的CPU配置已經(jīng)是常見的配置,程序設(shè)計中如果能夠充分的考慮多進程多線程的執(zhí)行,將非常有利于充分的利用計算資源,通過空間換取時間,達到提高性能的目的。4.3 網(wǎng)絡(luò)通信信息系統(tǒng)一般部署在成熟具有一定規(guī)模和覆蓋面的網(wǎng)絡(luò)通信設(shè)施的
19、基礎(chǔ)之上,網(wǎng)絡(luò)的結(jié)構(gòu)、帶寬等均已經(jīng)固定,短時間內(nèi)不會有大的升級改進。網(wǎng)絡(luò)通信的優(yōu)化,通常在系統(tǒng)架構(gòu)部署,數(shù)據(jù)壓縮,使用數(shù)據(jù)庫存儲過程等方面進行優(yōu)化改進,旨在減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量,從而達到提高網(wǎng)絡(luò)性能的目的。1) 系統(tǒng)架構(gòu)部署對于網(wǎng)絡(luò)系統(tǒng)而言,網(wǎng)絡(luò)架構(gòu)的部署模式,決定著系統(tǒng)性能的優(yōu)劣,如地圖空間數(shù)據(jù)服務(wù),衛(wèi)星影像、數(shù)據(jù)地圖數(shù)據(jù)量巨大,需要大量的網(wǎng)絡(luò)帶寬容量,如果采用分布式部署模式,能夠有效減少集中部署,將數(shù)據(jù)分布于最接近于應(yīng)用終端的局域網(wǎng)絡(luò)中,能夠有效的減少系統(tǒng)對主體網(wǎng)絡(luò)的壓力,提高系統(tǒng)整體性能。2) 數(shù)據(jù)壓縮數(shù)據(jù)壓縮是有效的時間換空間方法,利用高效的壓縮算法,將零散的數(shù)據(jù)或者數(shù)據(jù)文件驚醒打包壓縮
20、,利用服務(wù)端或客戶端的計算資源,減少網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)娜萘?,從而提高網(wǎng)絡(luò)傳輸效率。3) 數(shù)據(jù)庫存儲過程如果數(shù)據(jù)庫服務(wù)器和應(yīng)用服務(wù)器之間不能部署在同一局域網(wǎng)絡(luò)之中,應(yīng)用服務(wù)需要請求大量的數(shù)據(jù)進行運算,那么在數(shù)據(jù)庫服務(wù)器計算資源充分的情況,可以考慮利用數(shù)據(jù)庫存儲過程,執(zhí)行部分的統(tǒng)計,數(shù)據(jù)歸檔等計算過程,僅將結(jié)果提供給應(yīng)用服務(wù)器,該方式也能有效的減少網(wǎng)絡(luò)傳輸資源的消耗,提高網(wǎng)絡(luò)性能。4.4 數(shù)據(jù)緩存緩存是好東西,基本上90%的系統(tǒng)架構(gòu)優(yōu)化都是在圍繞著如何利用好緩存。緩存真是無處不在,硬件上看,有硬盤緩存,RAID卡緩存,存儲緩存,主存,NUMA特性,CPU L3-L2-L1等等。軟件架構(gòu)上看,有全局數(shù)據(jù)
21、緩存,私有數(shù)據(jù)緩存,連接池,應(yīng)用服務(wù)器緩存,WEB服務(wù)器緩存,CDN緩存,客戶端文件緩存,客戶端內(nèi)存緩存等等?;旧洗笮拖到y(tǒng)都會有多級緩存,否則需要非常高的硬件投入才能解決問題。硬件緩存通常都比較智能,或者說99%的情況下我們不需要修改配置,即使修改帶來的性能提升一般也不會太多,除非你的軟件有較明顯的缺陷,你對硬件和你的軟件特性已經(jīng)了解得非常深入。軟件緩存架構(gòu)帶來性能的提高,往往也帶來了負面的問題,如架構(gòu)復(fù)雜化,數(shù)據(jù)同步多,數(shù)據(jù)實時性差,維護成本高,系統(tǒng)調(diào)試復(fù)雜等問題,所以對于軟件架構(gòu)上任何一個緩存架構(gòu),都需要深入分析是否有必要。我認為如果增加一層緩存架構(gòu),至少要有5倍以上的提高提升,否則就要
22、分析成本了。對于中小型系統(tǒng),不建議有復(fù)雜的緩存架構(gòu),因為讓系統(tǒng)能更快速發(fā)展比提供更好的性能更有意義,雜的緩存架構(gòu)往往需要投入更多的人力成本。4.5 SQL語句1) 并行處理并行SQL使得SQL語句可以被多線程或進程同時處理。當前,多核處理器的廣泛應(yīng)用,意味著運行Oracle數(shù)據(jù)庫的即便是最廉價的現(xiàn)代計算機也會包含一個以上的CPU。數(shù)據(jù)庫服務(wù)系統(tǒng)通常會跨多個獨立磁盤設(shè)備分布保存數(shù)據(jù)庫文件。 沒有并行技術(shù)的時候,也就是SQL語句被順序處理,一個會話只能利用這些CPU或者磁盤設(shè)備其中之一。結(jié)果,串行執(zhí)行SQL語句不能利用整個計算機的處理能力。并行執(zhí)行使得單個會話和SQL語句能利用多個CPU和磁盤設(shè)備
23、的處理能力。 并行處理可以把合適的SQL語句的性能提升到一定程度,這種提升程度通常是其它任何方法都做不到的。2) 高效SQL 關(guān)于SQL語句的優(yōu)化,首先也是要使用工具,比如:MySQL SQL Query Analyzer,Oracle SQL Performance Analyzer,或是微軟SQL Query Analyzer,基本上來說,所有的RMDB都會有這樣的工具,來讓你查看你的應(yīng)用中的SQL的性能問題。 還可以使用explain來看看SQL語句最終Execution Plan會是什么樣的。還有一點很重要,數(shù)據(jù)庫的各種操作需要大量的內(nèi)存,所以服務(wù)器的內(nèi)存要夠,優(yōu)其應(yīng)對那些多表查詢的S
24、QL語句,那是相當?shù)暮膬?nèi)存。4.6 數(shù)據(jù)庫1) 數(shù)據(jù)庫診斷報告通常數(shù)據(jù)庫工具都會集成自身的性能診斷分析工具,收集統(tǒng)計數(shù)據(jù)庫運行的狀況,通過分析診斷報告,可以明確數(shù)據(jù)庫優(yōu)化的內(nèi)容。2) 數(shù)據(jù)庫參數(shù)數(shù)據(jù)庫的相關(guān)參數(shù),在系統(tǒng)運行中起到關(guān)鍵的作用,合理的設(shè)置,能夠充分的發(fā)揮數(shù)據(jù)庫服務(wù)器的計算資源利用率,充分提高的數(shù)據(jù)庫的性能。3) 表空間根據(jù)業(yè)務(wù)模塊的數(shù)據(jù)讀寫頻率,或者磁盤本身的讀寫效率,合理的分配表空間,將讀寫頻繁的數(shù)據(jù)分別置于不同磁盤,提高表空間的利用率,從而整體提高數(shù)據(jù)讀寫的效率,均衡磁盤讀寫的壓力。如:常用的表空間利用率優(yōu)化方法有:數(shù)據(jù)與索引表空間分離、同一表空間文件分置在不同磁盤、對象型數(shù)據(jù)
25、存儲獨立表空間等等。 a) 建立分區(qū)表按照數(shù)據(jù)庫的設(shè)計原理,當一個數(shù)據(jù)表的數(shù)據(jù)量非常大時(通常超過千萬級別),通過建立分區(qū)表,可以有效提高數(shù)據(jù)讀寫的效率,降低死鎖情況的發(fā)生。b) 碎片整理作為影響數(shù)據(jù)庫性能的一大因素數(shù)據(jù)庫碎片,應(yīng)當引起DBA的足夠重視,及時發(fā)現(xiàn)并整理碎片乃是DBA一項基本維護優(yōu)化的內(nèi)容。c) 范式設(shè)計在設(shè)計關(guān)系數(shù)據(jù)庫時,應(yīng)該讓數(shù)據(jù)表盡量的符合第三范式等級,以便最大限度地提高數(shù)據(jù)的一致性,減少數(shù)據(jù)冗余和不規(guī)則的更新,這是數(shù)據(jù)庫設(shè)計的常識。第三范式的數(shù)據(jù)庫操作往往比第一范式、第二范式需要更多的表連接,會非常消耗CPU和磁盤IO資源,從而降低系統(tǒng)性能。其實,合理的引入非規(guī)范化設(shè)計,
26、反而會簡化查詢,改善系統(tǒng)的性能。非規(guī)范化的過程可以根據(jù)性能方面的不同,采用不同的方法進行,從實踐經(jīng)驗可以利用下面的方法提高性能:² 規(guī)范化設(shè)計產(chǎn)生了四路或者更多路的合并關(guān)系,可以考慮數(shù)據(jù)實體中加入重復(fù)屬性。² 常用的計算字段(如合計、最大、最小值)可以考慮直接存儲到數(shù)據(jù)庫實體中,減少每次計算帶來的資源消耗。² 重新定義實體以減少行列數(shù)據(jù)的消耗。4) 索引a) 建立索引常用的規(guī)則² 表的主鍵、外鍵必須有索引;² 數(shù)據(jù)量超過300條或者多個數(shù)據(jù)塊的表應(yīng)該有索引;² 經(jīng)常與其他表進行連接的表,在連接字段上應(yīng)該建立索引;² 經(jīng)常出現(xiàn)
27、在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;² 索引應(yīng)該建在選擇性高的字段上;² 索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;² 復(fù)合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:² 正確選擇復(fù)合索引中的主列字段,一般是選擇性較好的字段;² 復(fù)合索引的幾個字段是否經(jīng)常同時以AND方式出現(xiàn)在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復(fù)合索引;否則考慮單字段索引;² 如果復(fù)合索引中包含的字段經(jīng)常單獨出現(xiàn)在Where子句中,則分解為多個單字段索引;² 如果復(fù)合索引所包
28、含的字段超過3個,那么仔細考慮其必要性,考慮減少復(fù)合的字段;² 如果既有單字段索引,又有這幾個字段上的復(fù)合索引,一般可以刪除復(fù)合索引;² 頻繁進行數(shù)據(jù)操作的表,不要建立太多的索引;² 刪除無用的索引,避免對執(zhí)行計劃造成負面影響;以上是一些普遍的建立索引時的判斷依據(jù)。索引的建立必須慎重,對每個索引的必要性都應(yīng)該經(jīng)過仔細分析,要有建立的依據(jù)。因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復(fù)合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低數(shù)據(jù)
29、增加刪除時的性能,特別是對頻繁更新的表來說,負面影響更大。b) 創(chuàng)建索引的注意事項在創(chuàng)建Oracle索引時,有一些問題使我們需要注意的,下面介紹創(chuàng)建Oracle索引的一些注意事項,希望對您學習創(chuàng)建Oracle索引方面能有所幫助。1、一般來說,不需要為比較小的表創(chuàng)建索引;2、即使是大表,如果經(jīng)常需要查詢的數(shù)據(jù)不超過10%到15%的話,那就沒有必要為其建立索引的必要。因為此時建立索引的開銷可能要比性能的改善大的多。這個比例只是一個經(jīng)驗的數(shù)據(jù)。如果數(shù)據(jù)庫管理員需要得出一個比較精確的結(jié)論,那么就需要進行測試分析。3、如對于一些重復(fù)內(nèi)容比較少的列,特別是對于那些定義了唯一約束的列。在這些列上建立索引,往
30、往可以起到非常不錯的效果。如對于一些Null值的列與非Null值的列混合情況下,如果用戶需要經(jīng)常查詢所有的非Null值記錄的列,則最好為其設(shè)置索引。如果經(jīng)常需要多表連接查詢,在用與連接的列上設(shè)置索引可以達到事半功倍的效果。4、數(shù)據(jù)庫管理員,需要隔一段時間,如一年,對數(shù)據(jù)庫的索引進行優(yōu)化。該去掉的去掉,該調(diào)整的調(diào)整,以提高數(shù)據(jù)庫的性能。5、通常來說,表的索引越多,其查詢的速度也就越快。但是,表的更新速度則會降低。這主要是因為表的更新(如往表中插入一條記錄)速度,反而隨著索引的增加而增加。這主要是因為,在更新記錄的同時需要更新相關(guān)的索引信息。為此,到底在表中創(chuàng)建多少索引合適,就需要在這個更新速度與
31、查詢速度之間取得一個均衡點。6、對于一些數(shù)據(jù)倉庫或者決策型數(shù)據(jù)庫系統(tǒng),其主要用來進行查詢。相關(guān)的記錄往往是在數(shù)據(jù)庫初始化的時候倒入。此時,設(shè)置的索引多一點,可以提高數(shù)據(jù)庫的查詢性能。同時因為記錄不怎么更新,所以索引比較多的情況下,也不會影響到更新的速度。即使在起初的時候需要導(dǎo)入大量的數(shù)據(jù),此時也可以先將索引禁用掉。等到數(shù)據(jù)導(dǎo)入完畢后,再啟用索引。可以通過這種方式來減少索引對數(shù)據(jù)更新的影響。相反,如果那些表中經(jīng)常需要更新記錄,如一些事務(wù)型的應(yīng)用系統(tǒng),數(shù)據(jù)更新操作是家常便飯的事情。此時如果在一張表中建立過多的索引,則會影響到更新的速度。4.7 硬件在IT人的眼里硬件的費用是很高的,軟件成本是很低的甚至可以忽略,因為硬件需要購買,基本上沒有免費的硬件,而軟件可以選擇開源免費的,或者自己開發(fā)。因此在遇到性能問題是程序員首先想到的優(yōu)化軟件性能。但在這個人工成本上升,硬件成本下降,硬件性能或容量隨摩爾定率的發(fā)展的時代,我們也應(yīng)該重視硬件的優(yōu)化方法。通過硬件升級可以快速解決系統(tǒng)性能問題,對于可預(yù)估的系統(tǒng)容量性價很好。但頂配或者新出來的硬件貴得離譜,最新的硬件往往也會存在一些未知的BUG,所以硬件升級一般不會選擇1年內(nèi)出來的全新架構(gòu)的設(shè)備,而通常選擇2年以上比較
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版法律服務(wù)企業(yè)法務(wù)專員職位勞動合同3篇
- 二零二五版房屋買賣合同范本下載涉及裝修及家具家電條款3篇
- 二零二五年時尚服飾品牌區(qū)域獨家代理銷售合同2篇
- 二零二五年度航空貨運大客戶承運合同范本3篇
- 二零二五年建筑材料出口銷售與綠色認證合同3篇
- 二零二五版grc構(gòu)件生產(chǎn)、安裝與裝配式建筑推廣實施合同3篇
- 二零二五版技術(shù)開發(fā)與成果轉(zhuǎn)化合同3篇
- 二零二五年建筑材料運輸及安裝服務(wù)合同6篇
- 二零二五年度家具安裝與室內(nèi)空氣凈化合同2篇
- 二零二五版展覽館場地租賃合同范本(含展覽策劃服務(wù))3篇
- 公路工程施工現(xiàn)場安全檢查手冊
- 公司組織架構(gòu)圖(可編輯模版)
- 1汽輪機跳閘事故演練
- 陜西省銅川市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 禮品(禮金)上交登記臺賬
- 北師大版七年級數(shù)學上冊教案(全冊完整版)教學設(shè)計含教學反思
- 2023高中物理步步高大一輪 第五章 第1講 萬有引力定律及應(yīng)用
- 青少年軟件編程(Scratch)練習題及答案
- 浙江省公務(wù)員考試面試真題答案及解析精選
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學
- 全統(tǒng)定額工程量計算規(guī)則1994
評論
0/150
提交評論