作為數(shù)據(jù)庫管理員,您可能對(duì)因網(wǎng)絡(luò)性能低下而接聽大量電話而感到沮喪。如果系統(tǒng)無響應(yīng)或滯后,則提高數(shù)據(jù)庫性能的最佳方法是進(jìn)行優(yōu)化和調(diào)整活動(dòng)。性能調(diào)整可以幫助您確定瓶頸,并確保您的基礎(chǔ)架構(gòu)可以管理增加的負(fù)載。
如何提高數(shù)據(jù)庫性能
如果需要提高數(shù)據(jù)庫性能,可以采取幾種措施來防止和糾正可能的問題。以下調(diào)整技巧可以幫助您優(yōu)化數(shù)據(jù)庫性能并維護(hù)完整的操作環(huán)境。本指南包括針對(duì)MySQL,SQL Server和Oracle的性能改進(jìn)數(shù)據(jù)庫技巧。
提高數(shù)據(jù)庫性能的最有效方法是實(shí)施正確的數(shù)據(jù)庫性能分析和監(jiān)視工具。SolarWinds的®數(shù)據(jù)庫性能分析器(DPA)和數(shù)據(jù)庫性能監(jiān)視器(DPM)可幫助您提高M(jìn)ySQL的性能,Oracle數(shù)據(jù)庫的性能和SQL Server的性能。這些工具具有高度的通用性,先進(jìn)性和用戶友好性。
1.實(shí)施基準(zhǔn)
保持已建立的性能基準(zhǔn)是有效調(diào)整的關(guān)鍵方面,因?yàn)樗鼮槟诔霈F(xiàn)問題時(shí)提供了參考點(diǎn);鶞(zhǔn)可以幫助您快速輕松地確定高峰使用期,從而可以設(shè)置性能目標(biāo)并準(zhǔn)確了解系統(tǒng)功能。一致地衡量現(xiàn)有性能將對(duì)數(shù)據(jù)庫的性能提供確切的期望。當(dāng)調(diào)整將來可能出現(xiàn)的瓶頸時(shí),這很有用。
2.使用自動(dòng)工作量存儲(chǔ)庫(AWR)工具
如果希望提高Oracle數(shù)據(jù)庫性能,請(qǐng)確保將自動(dòng)工作負(fù)載存儲(chǔ)庫(AWR)功能用作Oracle監(jiān)視工具。AWR收集,處理和維護(hù)性能統(tǒng)計(jì)信息,使您每天可以深入了解數(shù)據(jù)庫運(yùn)行狀況。然后,您可以使用Oracle提供的自動(dòng)數(shù)據(jù)庫診斷監(jiān)視器(ADDM)來獲得對(duì)AWR統(tǒng)計(jì)信息的可行見解。通過同時(shí)使用AWR和ADDM,您可以長期顯著提高Oracle數(shù)據(jù)庫性能,增強(qiáng)調(diào)整能力并節(jié)省時(shí)間和金錢。
3.創(chuàng)建最佳索引
正確完成索引之后,可以幫助您優(yōu)化查詢執(zhí)行時(shí)間并提高數(shù)據(jù)庫性能。索引實(shí)現(xiàn)了一種數(shù)據(jù)結(jié)構(gòu),可幫助您保持井井有條并簡化數(shù)據(jù)查找。索引可加快檢索數(shù)據(jù)的過程,提高效率并節(jié)省您的時(shí)間和精力。
4.進(jìn)行SQL調(diào)整
SQL被廣泛認(rèn)為是一種消息語言,因?yàn)楫?dāng)發(fā)送查詢時(shí),將返回?cái)?shù)據(jù)。但是,客戶端解決方案通常會(huì)創(chuàng)建效率低下的SQL語句,這可能會(huì)對(duì)數(shù)據(jù)庫的性能產(chǎn)生負(fù)面影響。進(jìn)行性能調(diào)整時(shí),請(qǐng)仔細(xì)考慮消耗大量系統(tǒng)資源的SQL。如果要提高Oracle數(shù)據(jù)庫性能,則可以利用Oracle SQL工具,例如查詢優(yōu)化器。通過關(guān)注您的SQL處理引擎,可以增強(qiáng)性能調(diào)整,確保您的SQL能夠正常工作。
如果您希望提高SQL Server性能或MySQL性能,則利用查詢優(yōu)化器仍然很有用。在大多數(shù)情況下,性能問題是由編寫不正確的SQL查詢引起的。當(dāng)您嘗試優(yōu)化這些查詢時(shí),會(huì)遇到一些障礙。這可能包括在使用IN或EXISTS以及決定編寫聯(lián)接還是子查詢之間進(jìn)行選擇。查詢優(yōu)化器是具有成本效益的替代咨詢服務(wù),可以顯著加快SQL查詢的速度。許多查詢優(yōu)化器甚至解釋了他們的建議,可以幫助您提高查詢優(yōu)化技能。
5.檢查您的統(tǒng)計(jì)數(shù)據(jù)
在對(duì)SQL Server,MySQL或Oracle進(jìn)行性能調(diào)整時(shí),定期檢查統(tǒng)計(jì)信息至關(guān)重要。您應(yīng)該始終可以訪問數(shù)據(jù)庫,操作系統(tǒng)和應(yīng)用程序度量標(biāo)準(zhǔn)的完整匯編,因?yàn)樾阅苷{(diào)整的意義不僅僅在于糾正性能問題。性能調(diào)整是至關(guān)重要的維護(hù)組件,應(yīng)在應(yīng)用程序的整個(gè)生命周期中執(zhí)行。為此,您應(yīng)該不斷檢查統(tǒng)計(jì)信息并完善收集和展示統(tǒng)計(jì)信息的過程,以隨著公司的變化和發(fā)展提高效率。
性能問題的癥狀通?梢栽跀(shù)據(jù)中識(shí)別出來,這就是為什么不忽略統(tǒng)計(jì)數(shù)據(jù)至關(guān)重要的原因,它們?cè)谛阅苷{(diào)整效率中起著關(guān)鍵作用。
6.優(yōu)化CPU利用率
如果數(shù)據(jù)庫的診斷功能無法解決特定問題,則可能需要執(zhí)行手動(dòng)性能調(diào)整過程。在調(diào)查此類問題時(shí),請(qǐng)確保正確使用您的CPU。首先檢查用戶空間中的CPU利用率。這將驗(yàn)證當(dāng)前是否有任何非數(shù)據(jù)庫任務(wù)正在消耗CPU,這將限制共享CPU資源的數(shù)量。完成CPU使用率的確定之后,更容易糾正性能問題。這也可以幫助您澄清決策。
7.更新您的數(shù)據(jù)庫版本
無論您要提高M(jìn)ySQL,Oracle還是SQL Server數(shù)據(jù)庫性能,保持最新狀態(tài)都是至關(guān)重要的。在舊版本中,查詢的性能可能要好于新版本,但一般而言,新版本的性能往往更好。因此,最新的系統(tǒng)可能會(huì)遇到更穩(wěn)定的性能。
8.考慮升級(jí)CPU
正如本指南已經(jīng)提到的那樣,您的CPU越好,數(shù)據(jù)庫性能就會(huì)越快,越高效。因此,如果數(shù)據(jù)庫無法正常運(yùn)行,則應(yīng)考慮升級(jí)到更高級(jí)別的CPU單元。如果您的CPU功能更強(qiáng)大,則在處理多個(gè)請(qǐng)求和應(yīng)用程序時(shí),它的壓力將減小。此外,在評(píng)估CPU性能時(shí),您必須跟蹤所有性能方面。這應(yīng)該包括CPU準(zhǔn)備時(shí)間,該時(shí)間可以顯示您的系統(tǒng)嘗試使用CPU的時(shí)間,但是不能顯示此時(shí)間,這是因?yàn)镃PU的資源被占用了。
9.分配更多的內(nèi)存
就像缺乏CPU一樣,缺少內(nèi)存也會(huì)影響數(shù)據(jù)庫的效率。如果沒有足夠的可用內(nèi)存,則數(shù)據(jù)庫可能無法執(zhí)行所要求的操作,從而導(dǎo)致數(shù)據(jù)庫性能下降。為數(shù)據(jù)庫提供更多的可用內(nèi)存將提高性能和整體系統(tǒng)效率。
要確定是否需要分配更多的內(nèi)存,請(qǐng)查看系統(tǒng)中有多少頁面錯(cuò)誤。如果故障數(shù)量很高(即成千上萬),則主機(jī)的可用內(nèi)存空間不足。因此,在嘗試提高數(shù)據(jù)庫性能時(shí),應(yīng)考慮總內(nèi)存量和頁面錯(cuò)誤數(shù)。此過程將使您了解分配額外的內(nèi)存是否會(huì)提高效率。
10.考慮碎片整理
如果您的數(shù)據(jù)庫運(yùn)行緩慢,則對(duì)數(shù)據(jù)進(jìn)行碎片整理可能是一種有效的方法。當(dāng)大量記錄寫入數(shù)據(jù)庫并且時(shí)間流逝時(shí),記錄可能會(huì)分散在內(nèi)部數(shù)據(jù)文件和磁盤本身中。磁盤碎片整理允許將相關(guān)數(shù)據(jù)分組在一起,從而加快與I / O相關(guān)的操作。這直接影響數(shù)據(jù)庫性能和查詢性能。確保在運(yùn)行數(shù)據(jù)庫時(shí)有足夠的磁盤空間也很重要。如果要顯著提高數(shù)據(jù)庫性能,則應(yīng)將磁盤碎片整理與確保有足夠的磁盤空間結(jié)合使用。
11.使用正確的磁盤類型
僅從一個(gè)查詢中檢索結(jié)果可能需要從磁盤進(jìn)行數(shù)百萬次I / O操作。所需的操作量直接取決于查詢需要訪問以進(jìn)行處理的數(shù)據(jù)量以及查詢返回的數(shù)據(jù)量。因此,服務(wù)器中的磁盤類型可能會(huì)對(duì)查詢性能產(chǎn)生顯著影響。使用SSD磁盤可以提高查詢性能和數(shù)據(jù)庫性能。
12.審核訪問
一旦確定數(shù)據(jù)庫硬件運(yùn)行狀況良好,就應(yīng)該檢查哪些應(yīng)用程序正在訪問數(shù)據(jù)庫。如果您的一項(xiàng)服務(wù)或應(yīng)用程序的性能很差,請(qǐng)確保不要假設(shè)哪個(gè)應(yīng)用程序?qū)е铝诵阅軉栴}。劣勢(shì)的數(shù)據(jù)庫性能可能由多種因素引起或影響。整個(gè)數(shù)據(jù)庫可能已被感染,或者單個(gè)客戶端的性能可能很差。
如果數(shù)據(jù)庫的所有客戶端均性能不佳,則可能需要確認(rèn)主機(jī)運(yùn)行狀況良好。在這種情況下,您的硬件可能正在努力應(yīng)付負(fù)載。如果單個(gè)服務(wù)的響應(yīng)時(shí)間很短,請(qǐng)深入研究該服務(wù)的指標(biāo)以確定可能導(dǎo)致問題的原因。
13.了解服務(wù)實(shí)例的負(fù)載和響應(yīng)時(shí)間
如果單個(gè)服務(wù)的數(shù)據(jù)庫性能較差,請(qǐng)仔細(xì)查看該服務(wù)與數(shù)據(jù)庫的通信方式。您應(yīng)該調(diào)查以下內(nèi)容:
執(zhí)行哪些查詢?
查詢返回多少行?
查詢(每個(gè)請(qǐng)求)執(zhí)行一次的頻率?
如果您正在運(yùn)行一個(gè)服務(wù)的多個(gè)實(shí)例,那么所有實(shí)例都會(huì)受到影響還是僅僅是一個(gè)實(shí)例?
是否有任何原因?qū)е旅總(gè)請(qǐng)求應(yīng)多次執(zhí)行單個(gè)查詢?
請(qǐng)記住,在數(shù)據(jù)庫級(jí)別出現(xiàn)的問題可能植根于其他地方,并且問題的根源可能與如何訪問數(shù)據(jù)庫有關(guān)。一旦考慮了每個(gè)請(qǐng)求調(diào)用查詢的頻率,您可能會(huì)發(fā)現(xiàn)可以通過增強(qiáng)服務(wù)的數(shù)據(jù)庫緩存來減少數(shù)據(jù)庫查詢的數(shù)量。如果您發(fā)現(xiàn)單個(gè)查詢對(duì)每個(gè)請(qǐng)求執(zhí)行多次的充分理由,則應(yīng)用智能緩存策略可能是有利的。在某些情況下,這些策略可以顯著提高性能。
14.不要忽視網(wǎng)絡(luò)
忽略虛擬化基礎(chǔ)架構(gòu)的物理限制很容易,但是它們?cè)谛阅苤衅鹬匾淖饔谩2恍业氖,電纜,路由器和其他硬件可能會(huì)發(fā)生故障。如果運(yùn)行數(shù)月后突然出現(xiàn)問題而沒有任何問題,則說明您的基礎(chǔ)架構(gòu)可能遇到了物理問題。要確認(rèn)這一點(diǎn),您應(yīng)該檢查路由器,電纜和網(wǎng)絡(luò)接口。您應(yīng)該在出現(xiàn)問題的第一個(gè)跡象時(shí)檢查這些組件,以便有最大的機(jī)會(huì)修復(fù)它,以免影響您的業(yè)務(wù)。
通常,過度緊張或過載的進(jìn)程會(huì)丟棄數(shù)據(jù)包,因?yàn)樗鼈兊馁Y源已耗盡。如果您的網(wǎng)絡(luò)問題不是由硬件問題引起的,則過程級(jí)可見性可能是識(shí)別故障組件的有用方法。
如何使用DPA和DPM提高數(shù)據(jù)庫性能
本文列出的大多數(shù)技巧可用于提高M(jìn)ySQL性能,Oracle數(shù)據(jù)庫性能和SQL Server性能。正確的專業(yè)軟件可以幫助您持續(xù)管理這些實(shí)踐的實(shí)施,從而提高數(shù)據(jù)庫性能,而不會(huì)使您不知所措。全面的專業(yè)工具,例如SolarWinds DPA和DPM,可以監(jiān)視關(guān)鍵性能指標(biāo)并為您提供各種診斷功能。使用正確的數(shù)據(jù)庫監(jiān)視解決方案,您可以深入了解數(shù)據(jù)庫,并可以利用優(yōu)化實(shí)用程序來提高性能。
SolarWinds數(shù)據(jù)庫性能分析器(DPA)
SolarWinds DPA是一個(gè)跨平臺(tái)的數(shù)據(jù)庫性能調(diào)整和優(yōu)化工具,支持 PostgreSQL,MySQL,Amazon Aurora,IBM DB2,SAP ASE,MariaDB,Oracle,Microsoft SQL Server和Azure SQL數(shù)據(jù)庫。DPA使用響應(yīng)時(shí)間分析方法來調(diào)整SQL和查詢性能,使您能夠交付引人注目的結(jié)果。響應(yīng)時(shí)間分析(也稱為等待時(shí)間分析)可分析完成所需操作的實(shí)際時(shí)間,而不是根據(jù)服務(wù)器運(yùn)行狀況進(jìn)行估算。
dpa優(yōu)化性能
該數(shù)據(jù)庫管理軟件有助于使資源調(diào)配與數(shù)據(jù)庫性能保持一致,從而使您對(duì)硬件建議更具規(guī)范性。DPA具有SQL查詢分析器,可用于識(shí)別資源供應(yīng)如何影響數(shù)據(jù)庫響應(yīng)時(shí)間。這些功能還為開發(fā)人員提供了有關(guān)VMware基礎(chǔ)架構(gòu)及其如何影響數(shù)據(jù)庫性能的獨(dú)特視角。
DPA的另一個(gè)有用功能是歷史存儲(chǔ)庫,它可以突出顯示趨勢(shì)和異常情況,這些趨勢(shì)和異常情況很容易進(jìn)行SQL調(diào)整。DPA使用歷史數(shù)據(jù)來幫助您識(shí)別當(dāng)前改進(jìn)的機(jī)會(huì),提供從5秒鐘前到5年前的廣泛數(shù)據(jù)。此見解可幫助您快速解決性能問題。
DPA提供了一系列令人印象深刻的高級(jí)功能,包括由機(jī)器學(xué)習(xí)提供支持的異常檢測(cè)。它提供實(shí)時(shí)見解,具有索引和查詢調(diào)整顧問的專家建議,以及同時(shí)監(jiān)視多個(gè)活動(dòng)會(huì)話的能力。借助能夠快速找出復(fù)雜問題根本原因的多維性能分析,以及對(duì)SolarWinds PerfStack ™和AppStack ™儀表板的集成支持,DPA是功能強(qiáng)大且用途廣泛的工具。
DPA也是用戶友好的,具有動(dòng)態(tài)直觀的用戶界面。它為大小型公司都提供了成本效益和可伸縮性,并且適合經(jīng)驗(yàn)最少的數(shù)據(jù)庫管理員。您可以在此處獲得DPA的14天免費(fèi)試用。
SolarWinds數(shù)據(jù)庫性能監(jiān)視器(DPM)
盡管SolarWinds DPA更加注重分析,但DPM提供了深入的監(jiān)視功能。該工具為您提供了一種高效,便捷的方式來每天實(shí)時(shí)地監(jiān)視數(shù)據(jù)庫的性能。使用DPM,檢查很簡單,您可以獲得專家指導(dǎo),從而填補(bǔ)了監(jiān)視堆棧中潛在的關(guān)鍵空白。
DPA提供24/7全天候?qū)崟r(shí)監(jiān)控,可幫助您實(shí)現(xiàn)KPI目標(biāo),以減少失敗的部署,可用性,部署頻率,MTTD,MTTR,變更的提前期等等。該工具向您發(fā)送有關(guān)服務(wù)器配置更改和性能不佳查詢的即時(shí)建議。DPM是應(yīng)用程序開發(fā)的理想選擇,并且在DevOps團(tuán)隊(duì)中很受歡迎,它是保持?jǐn)?shù)據(jù)庫健康的一種手段。
DPA還是一種靈活的工具,允許您構(gòu)建自定義的儀表板,因此您可以將優(yōu)先級(jí)放在首位。儀表板具有數(shù)據(jù)庫和系統(tǒng)的運(yùn)行狀況摘要,可讓您跟蹤指標(biāo)并觀察趨勢(shì)。它們使您可以探索性能異常值,管理資源容量等等。
DPM可以幫助您降低變更失敗率,更快地恢復(fù)并通過DPM筆記本在整個(gè)團(tuán)隊(duì)中分享您學(xué)到的知識(shí)。該實(shí)用程序允許您創(chuàng)建和共享帶有文本,代碼段,鏈接和圖像的事后文檔。使用DPM,可以通過將查詢響應(yīng)或行為與系統(tǒng)指標(biāo)相關(guān)聯(lián)來深入了解查詢?nèi)绾斡绊憯?shù)據(jù)庫。該工具還允許您隔離異常行為和潛在的影響因素,并探究查詢的詳細(xì)信息和性能(包括執(zhí)行計(jì)劃,示例等)。
該SaaS平臺(tái)具有用戶友好的基于Web的用戶界面,使DPM適合經(jīng)驗(yàn)不足的用戶。像DPA一樣,DPM提供跨平臺(tái)支持,包括MySQL,MongoDB,PostgreSQL,Redis和Amazon Aurora。DPM 有14天的免費(fèi)試用期。
性能改進(jìn)數(shù)據(jù)庫技巧入門
實(shí)現(xiàn)本指南中提到的技巧而不使您的團(tuán)隊(duì)不知所措的最有效方法是利用專業(yè)軟件。盡管有許多可用的數(shù)據(jù)庫監(jiān)視和分析工具,但強(qiáng)烈建議使用SolarWinds DPA和DPM。這些工具具有可伸縮性,用戶友好性,并提供了一系列適當(dāng)?shù)膶?shí)用程序,旨在使您以最小的努力來顯著提高數(shù)據(jù)庫性能。