摘要:本文基于這些主題,通過回顧最重要的六個性能指標,幫助評估企業應用數據庫的健康狀況。容量并不是所有的數據庫性能問題都是數據庫問題。因此,對數據庫負載及使用進行審查也是必不可少的。在某些情況下,選擇協議而不是命名管道可顯著提高數據庫性能。
【編者按】本文作者是 Omed Habib,在其職業生涯中花費了大量的時間不斷探索一些新方法以提高大型 Web 應用的性能狀況。本篇文章中,作者詳細介紹了數據庫的六大性能指標,幫助我們更好對數據庫性能進行評估和改進。
在前一篇文章中,我們曾對 SQL 和非 SQL 進行過簡要介紹。本文基于這些主題,通過回顧最重要的六個性能指標,幫助評估企業應用數據庫的健康狀況。
具體來說,本文包括以下內容:
事務
查詢性能
用戶和查詢沖突
容量
配置
NoSQL 數據庫
1、事務事務可以觀察真實用戶的行為:能夠在應用交互時捕獲實時性能。眾所周知,測量事務的性能包括獲取整個事務的響應時間和組成事務的各個部分的響應時間。通常我們可以用這些響應時間與滿足事務需求的基線對比,來確定當前事務是否處于正常狀態。
如果你只想衡量應用的某個方面,那么可以評估事務的行為。所以,盡管容器指標能夠提供更豐富的信息,并且幫助你決定何時對當前環境進行自動測量,但你的事務就足以確定應用性能。無需向應用程序服務器獲取 CPU 的使用情況,你更應該關心用戶是否完成了事務,以及該事務是否得到了優化。
補充一個小知識點,事務是由入口點決定的,通過該入口點可以啟動事務與應用進行交互。
一旦定義了事務,會在整個應用生態系統中對其性能進行測量,并將每個事務與基線進行比對。例如,我們可能會決定當事務的響應時間與基線相比,一旦慢于平均響應時間的兩個標準差是否就應該判定為異常,如圖1所示。
圖1-基于基線評估當前事務響應時間
用于評估事務的基線與正在進行的事務活動在時間上是一致的,但事務會由每個事務執行來完善。例如,當你選定一個基線,在當前事務結束之后,將事務與平均響應時間按每天的小時數和每周的天數進行對比,所有在那段時間內執行的事務都將會被納入下周的基線中。通過這種機制,應用程序可以隨時間而變化,而無需每次都重建原始基線;你可以將其看作是一個隨時間移動的窗口。
總之,事務最能反映用戶體驗的測量方法,所以也是衡量性能狀況最重要的指標。
2、查詢性能最容易檢測到查詢性能是否正常的指標就是查詢本身。由查詢引起的問題可能會導致時間太長而無法識別所需數據或返回數據。所以不妨在查詢中排查以下問題。
選擇過多冗余數據
編寫查詢語句來返回適當的數據是遠遠不夠的,很可能你的查詢語句會返回太多列,從而導致選擇行和檢索數據變得異常緩慢。所以,最好是列出所需的列,而不是直接用 SELECT*。當需要在特定字段中查詢時,該計劃可能會確定一個覆蓋索引從而加快結果返回。覆蓋索引通常會包含查詢中使用的所有字段。這意味著數據庫可以僅從索引中產生結果,而不需要通過底層表來構建。
另外,列出結果中所需的列不僅可以減少傳輸的數據,還能進一步提高性能。
表之間的低效聯接
聯接會導致數據庫將多組數據帶到內存中進行比較,這會產生多個數據庫讀取和大量 CPU。根據表的索引,聯接還可能需要掃描兩個表的所有行。如果寫不好兩個大型表之間的聯接,就需要對每個表進行完整掃描,這樣的計算量將會非常大。其他會拖慢聯接的因素包括聯接列之間存在不同的數據類型、需要轉換或加入包含 LIKE 的條件,這樣就會阻止使用索引。另外,還需注意避免使用全外聯接;在恰當的時候使用內部聯接只返回所需數據。
索引過多或過少
如果查詢優化沒有可用的索引時,數據庫會重新掃描表來產生查詢結果,這個過程會生成大量的磁盤輸入/輸出(I/O)。適當的索引可以減少排序結果的需要。雖然非唯一值的索引在生成結果時,不能像唯一索引那樣方便。如果鍵越大,索引也會變大,并通過它們創建更多的磁盤 I/O。大多數索引是為了提高數據檢索的性能,但也需要明白索引本身也會影響數據的插入和更新,因為所有相關聯的指標都必須更新。
太多的SQL導致爭用解析資源
任何 SQL 查詢在執行之前都必須被解析,在生成執行計劃之前需要對語法和權限進行檢查。由于解析非常耗時,數據庫會保存已解析的 SQL 來重復利用,從而減少解析的耗時。因為 WHERE 語句不同,所以使用文本值的查詢語句不能被共享。這將導致每個查詢都會被解析并添加到共享池中,由于池的空間有限,一些已保存的查詢會被舍棄。當這些查詢再次出現時,則需要重新解析。
3、用戶和查詢沖突數據庫支持多用戶,但多用戶活動也可能造成沖突。
由慢查詢導致的頁/行鎖定
為了確保查詢產生精確的結果,數據庫必須鎖定表以防止在運行讀取查詢時再發生其他的插入和更新行為。如果報告或查詢相當緩慢,需要修改值的用戶可能需要等待至更新完成。鎖提示能幫助數據庫使用最小破壞性的鎖。從事務數據庫中分離報表也是一種可靠的解決方法。
事務鎖和死鎖
當兩個事務被阻塞時會出現死鎖,因為每一個都需要使用被另一個占用的資源。當出現一個普通鎖時,事務會被阻塞直到資源被釋放。但卻沒有解決死鎖的方案。數據庫會監控死鎖并選擇終止其中一個事務,釋放資源并允許該事務繼續進行,而另一個事務則回滾。
批處理操作造成資源爭奪
批處理過程通常會執行批量操作,如大量的數據加載或生成復雜的分析報告。這些操作是資源密集型的,但可能影響在線用戶的訪問應用的性能。針對此問題最好的解決辦法是確保批處理在系統使用率較低時運行,比如晚上,或用多帶帶的數據庫進行事務處理和分析報告。
4、容量并不是所有的數據庫性能問題都是數據庫問題。有些問題也是硬件不合適造成的。
CPU 不足或 CPU 速度太慢
更多 CPU 可以分擔服務器負載,進一步提高性能。數據庫的性能不僅是數據庫的原因,還受到服務器上運行其他進程的影響。因此,對數據庫負載及使用進行審查也是必不可少的。由于 CPU 的利用率時時在變,在低使用率、平均使用率和峰值使用率的時間段分別檢查該指標可以更好地評估增加額外的 CPU 資源是否有益。
IOPS 不足的慢磁盤
磁盤性能通常以每秒輸入/輸出操作(IOPS)來計。結合 I/O 大小,該指標可以衡量每秒的磁盤吞吐量是多少兆。同時,吞吐量也受磁盤的延遲影響,比如需要多久才能完成請求,這些指標主要是針對磁盤存儲技術而言。傳統的硬盤驅動器(HDD)有一個旋轉磁盤,通常比固態硬盤(SSD)或閃存更慢。直到近期,SSD 雖然仍比 HDD 貴,但成本已經降了下來,所以在市場上也更具競爭力。
全部或錯誤配置的磁盤
眾所周知,數據庫會被大量磁盤訪問,所以不正確配置的磁盤可能帶來嚴重的性能缺陷。磁盤應該適當分區,將系統數據目錄和用戶數據日志分開。高度活躍的表應該區分以避免爭用,通過在不同磁盤上存放數據庫和索引增加并行放置,但不要將操作系統和數據庫交換空間放置在同一磁盤上。
內存不足
有限或不恰當的物理內存分配會影響數據庫性能。通常我們認為可用的內存更多,性能就越好。監控分頁和交換,在多個非繁忙磁盤中建立多頁面空間,進一步確保分頁空間分配足夠滿足數據庫要求;每個數據庫供應商也可以在這個問題上提供指導。
網速慢
網絡速度會影響到如何快速檢索數據并返回給終端用戶或調用過程。使用寬帶連接到遠程數據庫。在某些情況下,選擇 TCP/IP 協議而不是命名管道可顯著提高數據庫性能。
5、配置每個數據庫都需設置大量的配置項。通常情況下,默認值可能不足以滿足數據庫所需的性能。所以,檢查所有的參數設置,包括以下問題。
緩沖區緩存太小
通過將數據存儲在內核內存,緩沖區緩存可以進一步提高性能同時減少磁盤 I/O。當緩存太小時,緩存中的數據會更頻繁地刷新。如果它再次被請求,就必須從磁盤重讀。除了磁盤讀取緩慢之外,還給 I/O 設備增添了負擔從而成為瓶頸。除了給緩沖區緩存分配足夠的空間,調優 SQL 查詢可以幫助其更有效地利用緩沖區緩存。
沒有查詢緩存
查詢緩存會存儲數據庫查詢和結果集。當執行相同的查詢時,數據會在緩存中被迅速檢索,而不需要再次執行查詢。數據會更新失效結果,所以查詢緩存是唯一有效的靜態數據。但在某些情況下,查詢緩存卻可能成為性能瓶頸。比如當鎖定為更新時,巨大的緩存可能導致爭用沖突。
磁盤上臨時表創建導致的 I/O 爭用
在執行特定的查詢操作時,數據庫需要創建臨時表,如執行一個 GROUP BY 子句。如果可能,在內存中創建臨時表。但是,在某些情況下,在內存中創建臨時表并不可行,比如當數據包含 BLOB 或 TEXT 對象時。在這些情況下,會在磁盤上創建臨時表。大量的磁盤 I / O 都需要創建臨時表、填充記錄、從表中選擇所需數據并在查詢完成后舍棄。為了避免影響性能,臨時數據庫應該從主數據庫中分離出來。重寫查詢還可以通過創建派生表來減少對臨時表的需求。使用派生表直接從另一個 SELECT 語句的結果中選擇,允許將數據加到內存中而不是當前磁盤上。
6、NoSQL 數據庫NoSQL 的優勢在于它處理大數據的能力非常迅速。但是在實際使用中,也應該綜合參考 NoSQL 的缺點,從而決定是否適合你的用例場景。這就是為什么NoSQL通常被理解為 「不僅僅是 SQL」,說明了 NoSQL 并不總是正確的解決方案,也沒必要完全取代 SQL,以下分別列舉出五大主要原因。
挑剔事務
難以保持 NoSQL 條目的一致性。當訪問結構化數據時,它并不能完全確保同一時間對不同表的更改都生效。如果某個過程發生崩潰,表可能會不一致。一致事務的典型代表是復式記賬法。相應的信貸必須平衡每個借方,反之亦然。如果雙方數據不一致則不能輸入。NoSQL 則可能無法保證「收支平衡」。
復雜數據庫
NoSQL 的支持者往往以高效代碼、簡單性和 NoSQL 的速度為傲。當數據庫任務很簡單時,所有這些因素都是優勢。但當數據庫變得復雜,NoSQL 會開始分解。此時,SQL 則比 NoSQL 更好地處理復雜需求,因為 SQL 已經成熟,有符合行業標準的接口。而每個 NoSQL 設置都有一個唯一的接口。
一致聯接
當執行 SQL 的聯接時,由于系統必須從不同的表中提取數據進行鍵對齊,所以有一個巨大的開銷。而 NoSQL 似乎是一個空想,因為缺乏聯接功能。所有的數據都在同一個表的一個地方。當檢索數據時,它會同時提取所有的鍵值對。問題在于這會創建同一數據的多個副本。這些副本也必須更新,而這種情況下,NoSQL 沒有功能來確保更新。
Schema設計的靈活性由于 NoSQL 不需要 schema,所以在某些情況下也是獨一無二的。在以前的數據庫模型中,程序員必須考慮所有需要的列能夠擴展,能夠適應每行的數據條目。在 NoSQL 下,條目可以有多種字符串或者完全沒有。這種靈活性允許程序員迅速增加數據。但是,也可能存在問題,比如當有多個團體在同一項目上工作時,或者新的開發團隊接手一個項目時。開發人員能夠自由地修改數據庫,也可能會不斷實現各種各樣的密鑰對。
資源密集型
NoSQL 數據庫通常比關系數據庫更加資源密集。他們需要更多的 CPU 儲備和 RAM 分配。出于這個原因,大多數共享主機公司都不提供 NoSQL。你必須注冊一個 VPS 或運行自己的專用服務器。另一方面,SQL 主要是在服務器上運行。初期的工作都很順利,但隨著數據庫需求的增加,硬件必須擴大。單個大型服務器比多個小型服務器昂貴得多,價格呈指數增長。所以在這種企業計算場景下,使用 NoSQL 更為劃算,例如那些由谷歌和 Facebook 使用的服務器。
7、總結本文主要介紹了評估數據庫狀況時需要考量的六個最主要的因素:
事務
查詢性能
用戶和查詢沖突
容量
配置
NoSQL 數據庫
(編譯自:https://dzone.com/articles/top-6-database-performance-metrics-to-monitor-in-e)
OneAPM 為您提供端到端的 Java 應用性能解決方案,我們支持所有常見的 Java 框架及應用服務器,助您快速發現系統瓶頸,定位異常根本原因。分鐘級部署,即刻體驗,Java 監控從來沒有如此簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客。
本文轉自 OneAPM 官方博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/17524.html
據云智慧統計,APM從客戶端采集的性能數據可能占到業務數據的50%,而企業要做到從Request到Response整個鏈路中涉及到的所有數據的準確采集,并進行有效串接,進而實現真正的端到端,絕非一件易事。那么云智慧是如何進行APM數據采樣的,又是如何在端到端應用性能管理中滿足用戶對業務數據的高性能分析的呢?在2016年9月全球運維大會的APM專場上,云智慧首席架構師高馳濤先生為你揭曉APM背后的大...
摘要:根據發布的年上半年中國公有云市場份額報告顯示,阿里云占據了的份額,排在第二位的騰訊云份額僅為。數據顯示,阿里云的合作伙伴數量已經超過家,涵蓋了咨詢公司系統集成商主流。年,阿里云合作伙伴在云市場上的訂單數超過萬單。印象中,幾年前公有云剛冒出來的時候,大眾對這一新概念摸不著頭腦,于是專業的吃瓜群眾專門做了一份公有云的大眾版定義,用通俗易懂的比喻來衡量是不是公有云。幾年過去了,公有云的常識已經不用...
閱讀 2933·2023-04-26 02:22
閱讀 2291·2021-11-17 09:33
閱讀 3138·2021-09-22 16:06
閱讀 1078·2021-09-22 15:54
閱讀 3539·2019-08-29 13:44
閱讀 1917·2019-08-29 12:37
閱讀 1323·2019-08-26 14:04
閱讀 1917·2019-08-26 11:57