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