導航:首頁 > 數據處理 > 資料庫性能分析怎麼用

資料庫性能分析怎麼用

發布時間:2023-06-01 15:43:42

❶ 怎樣進行資料庫性能測試

使用LR對資料庫進行性能測試,實際上有多種辦法,包括通過現有的資料庫協議進行CS模式的先錄制後執行的模式,以及通過socket方式向伺服器發包方式的測試方式。這些是常規書籍上介紹的比較簡單上手的測試方法,但是不具備通用性,受已有協議或soc...

❷ 如何使用AWR報告來診斷資料庫性能問題

一般來說,當檢測到性能問題時,我們會收集覆蓋了發生問題的時間段的AWR報告-但是最好只收集覆蓋1個小時時間段的AWR報告-如果時間過長,那麼AWR報告就不能很好的反映出問題所在。還應該收集一份沒有性能問題的時間段的AWR報告,作為一個參照物來對比有問題的時間段的AWR報告。這兩個AWR報告的時間段應該是一致的,比如都是半個小時的,或者都是一個小時的。
Interpretation
在處理性能問題時,我們最關注的是資料庫正在等待什麼。
當進程因為某些原因不能進行操作時,它需要等待。花費時間最多的等待事件是我們最需要關注的,因為降低它,我們能夠獲得最大的好處。
AWR報告中的"Top 5 Timed Events"部分就提供了這樣的信息,可以讓我們只關注主要的問題。

Top 5 Timed Events
正如前面提到的,"Top 5 Timed Events"是AWR報告中最重備告要的部分。它指出了資料庫的sessions花費時間最多的等待事件,如下:

Top 5 Timed Events Avg %Total

~~~~~~~~~~~~~~~~~~ wait Call

Event Waits Time (s) (ms) Time Wait Class

------------------------------ ------------ ----------- ------ ------ ----------

db file scattered read 10,152,564 81,327 8 29.6 User I/O

db file sequential read 10,327,231 75,878 7 27.6 User I/O

CPU time 56,207 20.5

read by other session 4,397,330 33,455 8 12.2 User I/O

PX Deq Credit: send blkd 31,398 26,576 846 9.7 Other

-------------------------------------------------------------

Top 5 Events部分包含了一些跟Events(事件)相關的信息。它記錄了這期間遇到的等待的總次數,等待所花費的總時間,每次等待的平均時間;這一部分是按照每個Event占總體call time的百分比來進行排序的。

根 據Top 5 Events部分的信息的不同,接下來我們需要檢查AWR報告的其他部分,來驗證發現的問題或者做定量分析。等待事件需要根據報告期的持續時間和當時數據 庫中的並發用戶數進行評估。如:10分鍾內1000萬次的等待事件比10個小時內的1000萬等待更有問題;10個用戶引起的1000萬次的等待事件比 10,000個用戶引起的相同的等待要更有問題。

就像上面的例子,將近60%的時間是在等待IO相關的事件。

其他20%的時間旅滾世是花在使用或等待CPU time上。過高的CPU使用經常是性能不佳的SQL引起的(或者這些SQL有可能用更少的資源完成同樣的操作);對於這樣的SQL,過多的IO操作也是一個症狀。關於CPU使用方面,我們會在之後討論。

在以上基礎上,我們將調查是否這個等待事件是有問題的。若有問題,解決它;若是正常的,檢查下個等待事件。

過多的IO相關的等待一般會有兩個主要的原因:

Top 5 Events部分的顯示的信息會幫助我們檢查:

需要注意,接下來的分析步驟取決於我們在TOP 5部分的發現。在上面的例子里,3個top wait event表明問拆肢題可能與SQL語句執行計劃不好有關,所以接下來我們要去分析"SQL Statistics"部分。
同樣的,因為我們並沒有看到latch相關的等待,latch在我們這個例子里並沒有引發嚴重的性能問題;那麼我們接下來就完全不需要分析latch相關的信息。
一 般來講,如果資料庫性能很慢,TOP 5等待事件里"CPU", "db file sequential read" 和"db file scattered read" 比較明顯(不管它們之間的順序如何),我們總是需要檢查Top SQL (by logical and physical reads)部分;調用SQL Tuning Advisor或者手工調優這些SQL來確保它們是有效率的運行。
是否資料庫做了大量的讀操作:
上面的圖顯示了在這段時間里兩類讀操作都分別大於1000萬,這些操作是否過多取決於報告的時間是1小時或1分鍾。我們可以檢查AWR報告的elapsed time如果這些讀操作確實是太多了,接下來我們需要檢查AWR報告中 SQL Statistics 部分的信息,因為讀操作都是由SQL語句發起的。
是否是每次的IO讀操作都很慢:
上面的圖顯示了在這段時間里兩類讀操作平均的等待時間是小於8ms的
至於8ms是快還是慢取決於底層的硬體設備;一般來講小於20ms的都可以認為是可以接受的。

我們還可以在AWR報告"Tablespace IO Stats"部分得到更詳細的信息

Tablespace IO Stats DB/Inst: VMWREP/VMWREP Snaps: 1-15

-> ordered by IOs (Reads + Writes) desc

Tablespace

------------------------------

Av Av Av Av Buffer Av Buf

Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s Waits Wt(ms)

-------------- ------- ------ ------- ------------ -------- ---------- ------

TS_TX_DATA

14,246,367 283 7.6 4.6 145,263,880 2,883 3,844,161 8.3

USER

204,834 4 10.7 1.0 17,849,021 354 15,249 9.8

UNDOTS1

19,725 0 3.0 1.0 10,064,086 200 1,964 4.9

AE_TS

4,287,567 85 5.4 6.7 932 0 465,793 3.7

TEMP

2,022,883 40 0.0 5.8 878,049 17 0 0.0

UNDOTS3

1,310,493 26 4.6 1.0 941,675 19 43 0.0

TS_TX_IDX

1,884,478 37 7.3 1.0 23,695 0 73,703 8.3

>SYSAUX

346,094 7 5.6 3.9 112,744 2 0 0.0

SYSTEM

101,771 2 7.9 3.5 25,098 0 653 2.7

如上圖,我們關心Av Rd(ms)的指標。如果它高於20ms並且同時有很多讀操作的,我們可能要開始從OS的角度調查是否有潛在的IO問題。

註:對於一些比較空閑的tablespace/files,我們可能會得到一個比較大的Av Rd(ms)值;對於這樣的情況,我們應該忽略這樣的tablespace/files;因為這個很大的值可能是由於硬碟自旋(spin)引起的,沒有太大的參考意義。比如對
於一個有1000萬次讀操作而且很慢的系統,引起問題的基本不可能是一個只有10次read的tablespace/file.
雖 然高"db file scattered read"和"db file sequential read"等待可以是I / O相關的問題,但是很多時候這些等待也可能是正常的;實際上,對一個已經性能很好的資料庫系統,這些等待事件往往在top 5等待事件里,因為這意味著您的資料庫沒有那些真正的「問題」。
訣竅是能夠評估引起這些等待的語句是否使用了最優的訪問路徑。如果"db file scattered read"比較高,那麼相關的SQL語句可能使用了全表掃描而沒有使用索引(也許是沒有創建索引,也許是沒有合適的索引);相應的,如果"db file sequential read"過多,則表明也許是這些SQL語句使用了selectivity不高的索引從而導致訪問了過多不必要的索引塊或者使用了錯誤的索引。這些等待可 能說明SQL語句的執行計劃不是最優的。
接下來就需要通過AWR來檢查這些top SQL是否可以進一步的調優,我們可以查看AWR報告中 SQL Statistics 的部分.
上面的例子顯示了20%的時間花在了等待或者使用CPU上,我們也需要檢查 SQL statistics 部分來進一步的分析。
資料庫做了太多的讀操作
每次的IO讀操作都很慢
事件"db file scattered read"一般表明正在做由全表掃描或者index fast full scan引起的多塊讀。
事件"db file sequential read"一般是由不能做多塊讀的操作引起的單塊讀(如讀索引)

SQL Statistics
AWR包含了一些不同的SQL統計值:

根據Top 5 部分的Top Wait Event不同,我們需要檢查不同的SQL statistic。

在我們這個例子里,Top Wait Event是"db file scattered read","db file sequential read"和CPU;我們最需要關心的是SQL ordered by CPU Time, Gets and Reads。

我們會從"SQL ordered by gets"入手,因為引起高buffer gets的SQL語句一般是需要調優的對象。

SQL ordered by Gets

-> Resources reported for PL/SQL code includes the resources used by all SQL

statements called by the code.

-> Total Buffer Gets: 4,745,943,815

-> Captured SQL account for 122.2% of Total

Gets CPU Elapsed

Buffer Gets Executions per Exec %Total Time (s) Time (s) SQL Id

-------------- ------------ ------------ ------ -------- --------- -------------

1,228,753,877 168 7,314,011.2 25.9 8022.46 8404.73 5t1y1nvmwp2

SELECT ADDRESSID",CURRENT$."ADDRESSTYPEID",CURRENT$URRENT$."ADDRESS3",

CURRENT$."CITY",CURRENT$."ZIP",CURRENT$."STATE",CURRENT$."PHONECOUNTRYCODE",

CURRENT$."PHONENUMBER",CURRENT$."PHONEEXTENSION",CURRENT$."FAXCOU

1,039,875,759 62,959,363 16.5 21.9 5320.27 5618.96 grr4mg7ms81

Mole: DBMS_SCHEDULER

INSERT INTO "ADDRESS_RDONLY" ("ADDRESSID","ADDRESSTYPEID","CUSTOMERID","
ADDRESS1","ADDRESS2","ADDRESS3","CITY","ZIP","STATE","PHONECOUNTRYCODE","PHONENU

854,035,223 168 5,083,543.0 18.0 5713.50 7458.95 4at7cbx8hnz

SELECT "CUSTOMERID",CURRENT$."ISACTIVE",CURRENT$."FIRSTNAME",CURRENT$."LASTNAME",CU<
RRENT$."ORGANIZATION",CURRENT$."DATEREGISTERED",CURRENT$."CUSTOMERSTATUSID",CURR
ENT$."LASTMODIFIEDDATE",CURRENT$."SOURCE",CURRENT$."EMPLOYEEDEPT",CURRENT$.

對這些Top SQL,可以手工調優,也可以調用SQL Tuning Advisor。

分析:

Other SQL Statistic Sections
就像之前提到的那樣,AWR報告中有很多不同的部分用來分析各種不同的問題。如果特定的問題並沒有出現,那麼分析AWR報告的這些部分並不能有很大的幫助。
下面提到了一些可能的問題:

Waits for 'Cursor: mutex/pin' 如 果發現了一些像"Cursor: pin S wait on X" 或"Cursor: mutex X" 類的mutex等待,那麼可能是由於parsing引起的問題。檢查"SQL ordered by Parse Calls" 和"SQL ordered by Version Count"部分的Top SQL,這些SQL可能引起這類的問題。
單次執行buffer gets過多
SQL_ID為'5t1y1nvmwp2'和'4at7cbx8hnz'的SQL語句總共被執行了168次,但是每次執行引起的buffer gets超過500萬。這兩個SQL應該是主要的需要調優的候選者。
執行次數過多
SQL_ID 'grr4mg7ms81' 每次執行只是引起16次buffer gets,減少這條SQL每次執行的buffer get可能並不能顯著減少總共的buffer gets。這條語句的問題是它執行的太頻繁了,6500萬次。
改變這條SQL的執行次數可能會更有意義。這個SQL看起來是在一個循環裡面被調用,如果可以讓它一次處理的數據更多也許可以減少它執行的次數。
-> Total Buffer Gets: 4,745,943,815
假設這是一個一個小時的AWR報告,4,745,943,815是一個很大的值;所以需要進一步分析這個SQL是否使用了最優的執行計劃
Indivial Buffer Gets
上面的例子里單個的SQL的buffer get非常多,最少的那個都是8億5千萬。這三個SQL指向了兩個不同的引起過多buffers的原因:
注意:對於某些非常繁忙的系統來講,以上的數字可能都是正常的。這時候我們需要把這些數字跟正常時段的數字作對比,如果沒有什麼太大差別,那麼這些SQL並不是引起問題的元兇(雖然通過調優這些SQL我們仍然可以受益)

Load Profile
根據Top 5等待事件的不同,"Load Profile"可以提供一些有用的背景資料或潛在問題的細節信息。
Load Profile

~~~~~~~~~~~~ Per Second Per Transaction

--------------- ---------------

Redo size: 4,585,414.80 3,165,883.14

Logical reads: 94,185.63 65,028.07

Block changes: 40,028.57 27,636.71

Physical reads: 2,206.12 1,523.16

Physical writes: 3,939.97 2,720.25

User calls: 50.08 34.58

Parses: 26.96 18.61

Hard parses: 1.49 1.03

Sorts: 18.36 12.68

Logons: 0.13 0.09

Executes: 4,925.89 3,400.96

Transactions: 1.45

% Blocks changed per Read: 42.50 Recursive Call %: 99.19

Rollback per transaction %: 59.69 Rows per Sort: 1922.64

在這個例子里,Top 5 Events部分顯示問題可能跟SQL的執行有關,那麼我們接下來檢查load profile部分。

如果您檢查AWR report是為了一般性的性能調優,那麼可以看到有比較多的redo activity和比較高的physical writes. Physical writes比physical read要高,並且有42%的塊被更改了.

此外,hard parse的次數要少於soft parse.
如果mutex等待事件比較嚴重,如"library cache: mutex X",那麼查看所有parse的比率會更有用。

當然,如果把Load Profile部分跟正常時候的AWR報告做比較會更有用,比如,比較redo size, users calls, 和 parsing這些性能指標。

Instance Efficiency
Instance Efficiency部分更適用於一般性的調優,而不是解決某個具體問題(除非等待事件直接指向這些指標)。

Instance Efficiency Percentages (Target 100%)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Buffer Nowait %: 99.91 Redo NoWait %: 100.00

Buffer Hit %: 98.14 In-memory Sort %: 99.98

Library Hit %: 99.91 Soft Parse %: 94.48

Execute to Parse %: 99.45 Latch Hit %: 99.97

Parse CPU to Parse Elapsd %: 71.23 % Non-Parse CPU: 99.00

從我們的這個例子來看,最有用的信息是%Non-Parse CPU,它表明幾乎所有的CPU都消耗在了Execution而不是Parse上,所以調優SQL會對性能有改善。

❸ MYSQL資料庫伺服器性能分析的方法命令有哪些

?Show
status
?一些值得監控的和穗喊變數值喚野:
?Bytes_received和Bytes_sent
?和伺服器之間來往的流量。
?Com_*伺服器正在執行的命令。
?Created_*在查詢執行期限間創建的臨時表和文族侍件。
?Handler_*存儲引擎操作。
?Select_*不同類型的聯接執行計劃。
?Sort_*幾種排序信息。
?Show
session status like 『Select』;
?Show profiles
?SET profiling=1;
?Show
profiles\G
?Show profile;

❹ SQLServer和Oracle資料庫分析(oraclesql性能分析)

分析原則:

1、具體問題具體分析(這是由於不同的應用系統,不同的測試目的,不同的性能關注點)

2、查找瓶頸時按以下順序,由易到難。

伺服器硬體瓶頸-〉網路瓶頸(對區域網,可以不考慮)-〉伺服器操作系統瓶頸(參數配置)-〉中間件瓶頸(參數配置,資料庫,web伺服器等)-〉應用瓶頸(SQL語句、資料庫設計、業務邏輯、演算法等)註:以上過程並不是每個分析中都需要的,要根據測試目的和要求來確定分析的深度。對一些要求低的,我們分析到應用系統在將來大的負載壓力(並發用戶數、數據量)下,系統的硬體瓶頸在哪兒就夠了。分段排除法很有效。

分析的信息來源:1、根據場景運行過程中的錯誤提示信息;

2、根據測試結果收集到的監控指標數據。

一、錯誤提示分析

分析實例:

1、Error:「10.10.10.30:8080〃:[10060]Connection

Error::Server「10.10.10.30〃

分析:

A、應用服務死掉(小用戶時:程序上的問題。程序上處理資料庫的問題)

B、應用服務沒有死(應用服務參數設置問題)

例:在許多客戶端連接Weblogic應用伺服器被拒絕,而在伺服器端沒有錯誤顯示,則有可能是Weblogic中的server元素的AeptBacklog屬性值設得過低。如果連接時收到消息,說明應提高該值,每次增加25%

C、資料庫的連接(1、在應用服務的性能參數可能太小了;2、資料庫啟動的最大連接數(跟硬體的內存有關)。)

分析:可能是以下原因造成

A、譽叢應用服務參慶掘櫻數設置太大導致伺服器的瓶頸;B、頁面中圖片太多;C、在程序處理表的時候檢查欄位太大多。

二.監控指標數據分析

1、最大並發用戶數:

應用系統在當前環境(硬體環境、網路環境、軟體環境(參數配置))下能承受的最大並發用戶數。在方案運行中,如果出現了大於3個用戶的業務操作失敗,或出現了伺服器shutdown的情況,則說明在當前環境下,系統承受不了當前並發用戶的負載壓力,那麼最大並發用戶數就是前一個沒有出現這種現象的並發用戶數。如果測得的最大並發用戶數到達了性能要求,且各伺服器資源情況良好,業務操作響應時間也達到了用戶要求,那麼可行。否則,再根據各伺服器的資源情況和業務操作響應時間進一步分析原因所在。

2、業務操作響應時間:

分析方案運行情況應從平均事務響應時間圖和事務性能摘要圖開始。使用「事務性能摘要」圖,可以確定在方案執行期間響應時間過長的事務。細分事務並分析每個頁面組件的性能。如果伺服器耗時過長,請使用相應的伺服器圖確定有問題的伺服器度量並查明伺服器性能下降的原因。如果網路耗時過長,請使用「網路監視器」圖確定導致性能瓶頸的網路問題

3、伺服器資源監控指標:內存:

1、UNIX資源監控中指標內存頁交換速率(Pagingrate),如散衡果該值偶爾走高,表明當時有線程競爭內存。如果持續很高,則內存可能是瓶頸。也可能是內存訪問命中率低。

2、Windows資源監控中,如果Process計數器和ProcessWorkingSet計數器的值在長時間內持續升高,同時Memory計數器的值持續降低,則很可能存在內存泄漏。

內存資源成為系統性能的瓶頸的徵兆:很高的換頁率();進程進入不活動狀態;交換區所有磁碟的活動次數可高;可高的全局系統CPU利用率;內存不夠出錯()。

處理器:

1、UNIX資源監控(Windows操作系統同理)中指標CPU佔用率(),如果該值持續超過95%,表明瓶頸是CPU。可以考慮增加一個處理器或換一個更快的處理器。如果伺服器專用於SQLServer,可接受的最大上限是80-85%合理使用的范圍在60%至70%。

2、Windows資源監控中,如果System大於2,而處理器利用率()一直很低,則存在著處理器阻塞。

CPU資源成為系統性能的瓶頸的徵兆:很慢的響應時間();CPU空閑時間為零();過高的用戶佔用CPU時間();過高的系統佔用CPU時間();長時間的有很長的運行進程隊列()。

磁碟I/O:

1、UNIX資源監控(Windows操作系統同理)中指標磁碟交換率(Diskrate),如果該參數值一直很高,表明I/O有問題。可考慮更換更快的硬碟系統。

2、Windows資源監控中,如果DiskTime和Avg.DiskQueueLength的值很高,而PageReads/sec頁面讀取操作速率很低,則可能存在磁碟瓶徑。

I/O資源成為系統性能的瓶頸的徵兆:過高的磁碟利用率(highdiskutilization);

太長的磁碟等待隊列(largediskqueuelength);

等待磁碟I/O的時間所佔的百分率太高(/O);

太高的物理I/O速率:largephysicalI/Orate(notsufficientinitself);

過低的緩存命中率(lowbuffercachehitratio(notsufficientinitself));

太長的運行進程隊列,但CPU卻空閑(largerunqueuewithidleCPU)。

4、資料庫伺服器:

SQLServer資料庫:

1、SQLServer資源監控中指標緩存點擊率(CacheHitRatio),該值越高越好。如果持續低於80%,應考慮增加內存。

2、如果FullScans/sec(全表掃描/秒)計數器顯示的值比1或2高,則應分析你的查詢以確定是否確實需要全表掃描,以及SQL查詢是否可以被優化。

3、NumberofDeadlocks/sec(死鎖的數量/秒):死鎖對應用程序的可伸縮性非常有害,並且會導致惡劣的用戶體驗。該計數器的值必須為0。

4、LockRequests/sec(鎖請求/秒),通過優化查詢來減少讀取次數,可以減少該計數器的值。

Oracle資料庫:

1、如果自由內存接近於0而且庫快存或數據字典快存的命中率小於0.90,那麼需要增加SHARED_POOL_SIZE的大小。

快存(共享SQL區)和數據字典快存的命中率:select(sum(pins-reloads))/sum(pins)fromv$librarycache;

select(sum(gets-getmisses))/sum(gets)fromv$rowcache;

自由內存:select*fromv$sgastatwherename=『freememory』。

2、如果數據的緩存命中率小於0.90,那麼需要加大DB_BLOCK_BUFFERS參數的值(單位:塊)。

緩沖區高速緩存命中率:selectname,valuefromv$sysstatwherenamein(『dbblockgets』,『consistentgets』『physicalreads』)HitRatio=1-(physicalreads/(dbblockgetsconsistentgets))。

3、如果日誌緩沖區申請的值較大,則應加大LOG_BUFFER參數的值。

日誌緩沖區的申請情況:selectname,valuefromv$sysstatwherename=『redologspacerequests』。

4、如果內存排序命中率小於0.95,則應加大SORT_AREA_SIZE以避免磁碟排序。

內存排序命中率:selectround((100*b.value)/decode((a.valueb.value),0,1,(a.valueb.value)),2)fromv$sysstata,v$sysstatbwherea.name=』sorts(disk)』andb.name=』sorts(memory)』

註:上述SQLServer和Oracle資料庫分析,只是一些簡單、基本的分析,特別是Oracle資料庫的分析和優化,是一門專門的技術,進一步的分析可查相關資料。

❺ 如何打造高性能大數據分析平台

大數據分析系統作為一個關鍵性的系統在各個公司迅速崛起。但是這種海量規模的數據帶來了前所未有的性能挑戰。同時,如果大數據分析系統無法在第一時間為運營決策提供關鍵數據,那麼這樣的大數據分析系統一文不值。本文將從技術無關的角度討論一些提高性能的方法。下面我們將討論一些能夠應用在大數據分析系統不同階段的技巧和准則(例如數據提取,數據清洗,處理,存儲,以及介紹)。本文應作為一個通用准則,以確保最終的大數據分析平台能滿足性能要求。1.大數據是什麼?大數據是最近IT界最常用的術語之一。然而對大數據的定義也不盡相同,所有已知的論點例如結構化的和非結構化、大規模的數據等等都不夠完整。大數據系統通常被認為具有數據的五個主要特徵,通常稱為數據的5Vs。分別是大規模,多樣性,高效性、准確性和價值性。互聯網是個神奇的大網,大數據開發和軟體定製也是一種模式,這里提供最詳細的報價,如果真的想做,可以來這里,這個手技的開始數字是一八七中間的是三兒零最後的是一四二五零,按照順序組合起來就可以找到,想說的是,除非想做或者了解這方面的內容,如果只是湊熱鬧的話,就不要來了。據Gartner稱,大規模可以被定義為「在本(地)機數據採集和處理技術能力不足以為用戶帶來商業價值。當現有的技術能夠針對性的進行改造後來處理這種規模的數據就可以說是一個成功的大數據解決方案。這種大規模的數據沒將不僅僅是來自於現有的數據源,同時也會來自於一些新興的數據源,例如常規(手持、工業)設備,日誌,汽車等,當然包括結構化的和非結構化的數據。據Gartner稱,多樣性可以定義如下:「高度變異的信息資產,在生產和消費時不進行嚴格定義的包括多種形式、類型和結構的組合。同時還包括以前的歷史數據,由於技術的變革歷史數據同樣也成為多樣性數據之一「。高效性可以被定義為來自不同源的數據到達的速度。從各種設備,感測器和其他有組織和無組織的數據流都在不斷進入IT系統。由此,實時分析和對於該數據的解釋(展示)的能力也應該隨之增加。根據Gartner,高效性可以被定義如下:「高速的數據流I/O(生產和消費),但主要聚焦在一個數據集內或多個數據集之間的數據生產的速率可變上」。准確性,或真實性或叫做精度是數據的另一個重要組成方面。要做出正確的商業決策,當務之急是在數據上進行的所有分析必須是正確和准確(精確)的。大數據系統可以提供巨大的商業價值。像電信,金融,電子商務,社交媒體等,已經認識到他們的數據是一個潛在的巨大的商機。他們可以預測用戶行為,並推薦相關產品,提供危險交易預警服務,等等。與其他IT系統一樣,性能是大數據系統獲得成功的關鍵。本文的中心主旨是要說明如何讓大數據系統保證其性能。2.大數據系統應包含的功能模塊大數據系統應該包含的功能模塊,首先是能夠從多種數據源獲取數據的功能,數據的預處理(例如,清洗,驗證等),存儲數據,數據處理、數據分析等(例如做預測分析??,生成在線使用建議等等),最後呈現和可視化的總結、匯總結果。下圖描述了大數據系統的這些高層次的組件描述本節的其餘部分簡要說明了每個組分,如圖1。2.1各種各樣的數據源當今的IT生態系統,需要對各種不同種類來源的數據進行分析。這些來源可能是從在線Web應用程序,批量上傳或feed,流媒體直播數據,來自工業、手持、家居感測的任何東西等等。顯然從不同數據源獲取的數據具有不同的格式、使用不同的協議。例如,在線的Web應用程序可能會使用SOAP/XML格式通過HTTP發送數據,feed可能會來自於CSV文件,其他設備則可能使用MQTT通信協議。由於這些單獨的系統的性能是不在大數據系統的控制范圍之內,並且通常這些系統都是外部應用程序,由第三方供應商或團隊提供並維護,所以本文將不會在深入到這些系統的性能分析中去。2.2數據採集第一步,獲取數據。這個過程包括分析,驗證,清洗,轉換,去重,然後存到適合你們公司的一個持久化設備中(硬碟、存儲、雲等)。在下面的章節中,本文將重點介紹一些關於如何獲取數據方面的非常重要的技巧。請注意,本文將不討論各種數據採集技術的優缺點。2.3存儲數據第二步,一旦數據進入大數據系統,清洗,並轉化為所需格式時,這些過程都將在數據存儲到一個合適的持久化層中進行。在下面的章節中,本文將介紹一些存儲方面的最佳實踐(包括邏輯上和物理上)。在本文結尾也會討論一部分涉及數據安全方面的問題。2.4數據處理和分析第三步,在這一階段中的一部分干凈數據是去規范化的,包括對一些相關的數據集的數據進行一些排序,在規定的時間間隔內進行數據結果歸集,執行機器學習演算法,預測分析等。在下面的章節中,本文將針對大數據系統性能優化介紹一些進行數據處理和分析的最佳實踐。2.5數據的可視化和數據展示最後一個步驟,展示經過各個不同分析演算法處理過的數據結果。該步驟包括從預先計算匯總的結果(或其他類似數據集)中的讀取和用一種友好界面或者表格(圖表等等)的形式展示出來。這樣便於對於數據分析結果的理解。3.數據採集中的性能技巧數據採集是各種來自不同數據源的數據進入大數據系統的第一步。這個步驟的性能將會直接決定在一個給定的時間段內大數據系統能夠處理的數據量的能力。數據採集??過程基於對該系統的個性化需求,但一些常用執行的步驟是-解析傳入數據,做必要的驗證,數據清晰,例如數據去重,轉換格式,並將其存儲到某種持久層。涉及數據採集過程的邏輯步驟示如下圖所示:下面是一些性能方面的技巧:來自不同數據源的傳輸應該是非同步的。可以使用文件來傳輸、或者使用面向消息的(MoM)中間件來實現。由於數據非同步傳輸,所以數據採集過程的吞吐量可以大大高於大數據系統的處理能力。非同步數據傳輸同樣可以在大數據系統和不同的數據源之間進行解耦。大數據基礎架構設計使得其很容易進行動態伸縮,數據採集的峰值流量對於大數據系統來說算是安全的。如果數據是直接從一些外部資料庫中抽取的,確保拉取數據是使用批量的方式。如果數據是從feedfile解析,請務必使用合適的解析器。例如,如果從一個XML文件中讀取也有不同的解析器像JDOM,SAX,DOM等。類似地,對於CSV,JSON和其它這樣的格式,多個解析器和API是可供選擇。選擇能夠符合需求的性能最好的。優先使用內置的驗證解決方案。大多數解析/驗證工作流程的通常運行在伺服器環境(ESB/應用伺服器)中。大部分的場景基本上都有現成的標准校驗工具。在大多數的情況下,這些標準的現成的工具一般來說要比你自己開發的工具性能要好很多。類似地,如果數據XML格式的,優先使用XML(XSD)用於驗證。即使解析器或者校等流程使用自定義的腳本來完成,例如使用java優先還是應該使用內置的函數庫或者開發框架。在大多數的情況下通常會比你開發任何自定義代碼快得多。盡量提前濾掉無效數據,以便後續的處理流程都不用在無效數據上浪費過多的計算能力。大多數系統處理無效數據的做法通常是存放在一個專門的表中,請在系統建設之初考慮這部分的資料庫存儲和其他額外的存儲開銷。如果來自數據源的數據需要清洗,例如去掉一些不需要的信息,盡量保持所有數據源的抽取程序版本一致,確保一次處理的是一個大批量的數據,而不是一條記錄一條記錄的來處理。一般來說數據清洗需要進行表關聯。數據清洗中需要用到的靜態數據關聯一次,並且一次處理一個很大的批量就能夠大幅提高數據處理效率。數據去重非常重要這個過程決定了主鍵的是由哪些欄位構成。通常主鍵都是時間戳或者id等可以追加的類型。一般情況下,每條記錄都可能根據主鍵進行索引來更新,所以最好能夠讓主鍵簡單一些,以保證在更新的時候檢索的性能。來自多個源接收的數據可以是不同的格式。有時,需要進行數據移植,使接收到的數據從多種格式轉化成一種或一組標准格式。和解析過程一樣,我們建議使用內置的工具,相比於你自己從零開發的工具性能會提高很多。數據移植的過程一般是數據處理過程中最復雜、最緊急、消耗資源最多的一步。因此,確保在這一過程中盡可能多的使用並行計算。一旦所有的數據採集的上述活動完成後,轉換後的數據通常存儲在某些持久層,以便以後分析處理,綜述,聚合等使用。多種技術解決方案的存在是為了處理這種持久(RDBMS,NoSQL的分布式文件系統,如Hadoop和等)。謹慎選擇一個能夠最大限度的滿足需求的解決方案。4.數據存儲中的性能技巧一旦所有的數據採集步驟完成後,數據將進入持久層。在本節中將討論一些與數據數據存儲性能相關的技巧包括物理存儲優化和邏輯存儲結構(數據模型)。這些技巧適用於所有的數據處理過程,無論是一些解析函數生的或最終輸出的數據還是預計算的匯總數據等。首先選擇數據範式。您對數據的建模方式對性能有直接的影響,例如像數據冗餘,磁碟存儲容量等方面。對於一些簡單的文件導入資料庫中的場景,你也許需要保持數據原始的格式,對於另外一些場景,如執行一些分析計算聚集等,你可能不需要將數據範式化。大多數的大數據系統使用NoSQL資料庫替代RDBMS處理數據。不同的NoSQL資料庫適用不同的場景,一部分在select時性能更好,有些是在插入或者更新性能更好。資料庫分為行存儲和列存儲。具體的資料庫選型依賴於你的具體需求(例如,你的應用程序的資料庫讀寫比)。同樣每個資料庫都會根據不同的配置從而控制這些資料庫用於資料庫復制備份或者嚴格保持數據一致性?這些設置會直接影響資料庫性能。在資料庫技術選型前一定要注意。壓縮率、緩沖池、超時的大小,和緩存的對於不同的NoSQL資料庫來說配置都是不同的,同時對資料庫性能的影響也是不一樣的。數據Sharding和分區是這些資料庫的另一個非常重要的功能。數據Sharding的方式能夠對系統的性能產生巨大的影響,所以在數據Sharding和分區時請謹慎選擇。並非所有的NoSQL資料庫都內置了支持連接,排序,匯總,過濾器,索引等。如果有需要還是建議使用內置的類似功能,因為自己開發的還是不靈。NoSQLs內置了壓縮、編解碼器和數據移植工具。如果這些可以滿足您的部分需求,那麼優先選擇使用這些內置的功能。這些工具可以執行各種各樣的任務,如格式轉換、壓縮數據等,使用內置的工具不僅能夠帶來更好的性能還可以降低網路的使用率。許多NoSQL資料庫支持多種類型的文件系統。其中包括本地文件系統,分布式文件系統,甚至基於雲的存儲解決方案。如果在互動式需求上有嚴格的要求,否則還是盡量嘗試使用NoSQL本地(內置)文件系統(例如HBase使用HDFS)。這是因為,如果使用一些外部文件系統/格式,則需要對數據進行相應的編解碼/數據移植。它將在整個讀/寫過程中增加原本不必要的冗餘處理。大數據系統的數據模型一般來說需要根據需求用例來綜合設計。與此形成鮮明對比的是RDMBS數據建模技術基本都是設計成為一個通用的模型,用外鍵和表之間的關系用來描述數據實體與現實世界之間的交互。在硬體一級,本地RAID模式也許不太適用。請考慮使用SAN存儲。5.數據處理分析中的性能技巧數據處理和分析是一個大數據系統的核心。像聚合,預測,聚集,和其它這樣的邏輯操作都需要在這一步完成。本節討論一些數據處理性能方面的技巧。需要注意的是大數據系統架構有兩個組成部分,實時數據流處理和批量數據處理。本節涵蓋數據處理的各個方面。在細節評估和數據格式和模型後選擇適當的數據處理框架。其中一些框架適用於批量數據處理,而另外一些適用於實時數據處理。同樣一些框架使用內存模式,另外一些是基於磁碟io處理模式。有些框架擅長高度並行計算,這樣能夠大大提高數據效率。基於內存的框架性能明顯優於基於磁碟io的框架,但是同時成本也可想而知。概括地說,當務之急是選擇一個能夠滿足需求的框架。否則就有可能既無法滿足功能需求也無法滿足非功能需求,當然也包括性能需求。一些這些框架將數據劃分成較小的塊。這些小數據塊由各個作業獨立處理。協調器管理所有這些獨立的子作業?在數據分塊是需要當心。該數據快越小,就會產生越多的作業,這樣就會增加系統初始化作業和清理作業的負擔。如果數據快太大,數據傳輸可能需要很長時間才能完成。這也可能導致資源利用不均衡,長時間在一台伺服器上運行一個大作業,而其他伺服器就會等待。不要忘了查看一個任務的作業總數。在必要時調整這個參數。最好實時監控數據塊的傳輸。在本機機型io的效率會更高,這么做也會帶來一個副作用就是需要將數據塊的冗餘參數提高(一般hadoop默認是3份)這樣又會反作用使得系統性能下降。此外,實時數據流需要與批量數據處理的結果進行合並。設計系統時盡量減少對其他作業的影響。大多數情況下同一數據集需要經過多次計算。這種情況可能是由於數據抓取等初始步驟就有報錯,或者某些業務流程發生變化,值得一提的是舊數據也是如此。設計系統時需要注意這個地方的容錯。這意味著你可能需要存儲原始數據的時間較長,因此需要的存儲。數據結果輸出後應該保存成用戶期望看到的格式。例如,如果最終的結果是用戶要求按照每周的時間序列匯總輸出,那麼你就要將結果以周為單位進行匯總保存。為了達到這個目標,大數據系統的資料庫建模就要在滿足用例的前提下進行。例如,大數據系統經常會輸出一些結構化的數據表,這樣在展示輸出上就有很大的優勢。更常見的是,這可能會這將會讓用戶感覺到性能問題。例如用戶只需要上周的數據匯總結果,如果在數據規模較大的時候按照每周來匯總數據,這樣就會大大降低數據處理能力。一些框架提供了大數據查詢懶評價功能。在數據沒有在其他地方被使用時效果不錯。實時監控系統的性能,這樣能夠幫助你預估作業的完成時間。6.數據可視化和展示中的性能技巧精心設計的高性能大數據系統通過對數據的深入分析,能夠提供有價值戰略指導。這就是可視化的用武之地。良好的可視化幫助用戶獲取數據的多維度透視視圖。需要注意的是傳統的BI和報告工具,或用於構建自定義報表系統無法大規模擴展滿足大數據系統的可視化需求。同時,許多COTS可視化工具現已上市。本文將不會對這些個別工具如何進行調節,而是聚焦在一些通用的技術,幫助您能打造可視化層。確保可視化層顯示的數據都是從最後的匯總輸出表中取得的數據。這些總結表可以根據時間短進行匯總,建議使用分類或者用例進行匯總。這么做可以避免直接從可視化層讀取整個原始數據。這不僅最大限度地減少數據傳輸,而且當用戶在線查看在報告時還有助於避免性能卡頓問題。重分利用大化可視化工具的緩存。緩存可以對可視化層的整體性能產生非常不錯的影響。物化視圖是可以提高性能的另一個重要的技術。大部分可視化工具允許通過增加線程數來提高請求響應的速度。如果資源足夠、訪問量較大那麼這是提高系統性能的好法。盡量提前將數據進行預處理,如果一些數據必須在運行時計算請將運行時計算簡化到最小。可視化工具可以按照各種各樣的展示方法對應不同的讀取策略。其中一些是離線模式、提取模式或者在線連接模式。每種服務模式都是針對不同場景設計的。同樣,一些工具可以進行增量數據同步。這最大限度地減少了數據傳輸,並將整個可視化過程固化下來。保持像圖形,圖表等使用最小的尺寸。大多數可視化框架和工具的使用可縮放矢量圖形(SVG)。使用SVG復雜的布局可能會產生嚴重的性能影響。7.數據安全以及對於性能的影響像任何IT系統一樣安全性要求也對大數據系統的性能有很大的影響。在本節中,我們討論一下安全對大數據平台性能的影響。-首先確保所有的數據源都是經過認證的。即使所有的數據源都是安全的,並且沒有針對安全方面的需求,那麼你可以靈活設計一個安全模塊來配置實現。-數據進過一次認證,那麼就不要進行二次認證。如果實在需要進行二次認證,那麼使用一些類似於token的技術保存下來以便後續繼續使用。這將節省數據一遍遍認證的開銷。-您可能需要支持其他的認證方式,例如基於PKI解決方案或Kerberos。每一個都有不同的性能指標,在最終方案確定前需要將其考慮進去。-通常情況下數據壓縮後進入大數據處理系統。這么做好處非常明顯不細說。-針對不同演算法的效率、對cpu的使用量你需要進行比較來選出一個傳輸量、cpu使用量等方面均衡的壓縮演算法。-同樣,評估加密邏輯和演算法,然後再選擇。-明智的做法是敏感信息始終進行限制。-在審計跟蹤表或登錄時您可能需要維護記錄或類似的訪問,更新等不同的活動記錄。這可能需要根據不同的監管策略和用戶需求個性化的進行設計和修改。-注意,這種需求不僅增加了數據處理的復雜度,但會增加存儲成本。-盡量使用下層提供的安全技術,例如操作系統、資料庫等。這些安全解決方案會比你自己設計開發性能要好很多。8.總結本文介紹了各種性能方面的技巧,這些技術性的知道可以作為打造大數據分析平台的一般准則。大數據分析平台非常復雜,為了滿足這種類型系統的性能需求,需要我們從開始建設的時候進行考量。本文介紹的技術准則可以用在大數據平台建設的各個不同階段,包括安全如何影響大數據分析平台的性能。

❻ 如何優化資料庫的性能

--資料庫性能調優
--1.聚集索引、主鍵
--2.盡量不要用臨時表
--3.多多使用事務
--4.表設計要規范
--5.不要使用游標
--6.避免死鎖
--7.不要打開大數據集
--8.最好不要select *
--9.不要使用text數據類型,用varchar
--10.不要給諸如「性別」列創建索引
--11.不要使用Insert插入大量的數據
--12.盡量用join代替where,因為where進行全表搜索

閱讀全文

與資料庫性能分析怎麼用相關的資料

熱點內容
嘉定區市場包裝材料哪個好 瀏覽:429
村合作社的產品怎麼外銷 瀏覽:866
在交易貓上架商品要多久審核完 瀏覽:673
微博一周數據怎麼看 瀏覽:104
床上用品批發市場哪裡 瀏覽:810
影響產品銷售成本的因素有哪些 瀏覽:34
曼龍怎麼做代理 瀏覽:539
大學駕校如何找代理 瀏覽:61
怎麼銷售開拓檳榔市場 瀏覽:870
信息輔助家園共育活動有什麼 瀏覽:446
廣州服裝批發市場白馬什麼定位 瀏覽:622
產品定製需要什麼標志 瀏覽:76
信息隱藏在現實生活中應用於哪些方面 瀏覽:804
參與網路信息犯罪要多久才判 瀏覽:464
要想扎針技術好應該怎麼做 瀏覽:597
二手房買賣交易流程是什麼 瀏覽:939
充紅包銀行拒絕交易怎麼回事 瀏覽:195
抖音數據清空了怎麼恢復 瀏覽:470
技術學院指哪些 瀏覽:516
開店做什麼生意好加盟代理 瀏覽:31