自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL集群性能優(yōu)化指南

譯文
運維 系統(tǒng)運維
MySQL集群是一款實時、可擴展的事務(wù)性數(shù)據(jù)庫。可以通過擴展實現(xiàn)諸多企業(yè)級解決方案,例如移動支付系統(tǒng)、實時分析、數(shù)據(jù)流與分析以及內(nèi)容管理等事務(wù)。在本文中,我們將共同探討提升MySQL集群性能的最佳實踐方案。通過這些方案,大家將能在各類工作負載中實現(xiàn)游刃有余的資源分配效果。

【51CTO精選譯文】MySQL集群是一款實時、可擴展的事務(wù)性數(shù)據(jù)庫。其設(shè)計初衷在于為對實時性能要求較高的應(yīng)用程序打造一套嵌入式電信數(shù)據(jù)庫,并實現(xiàn)運營商級別的可用性。不過MySQL集群也可以通過擴展實現(xiàn)諸多企業(yè)級解決方案,例如移動支付系統(tǒng)、實時分析、數(shù)據(jù)流與分析以及內(nèi)容管理等事務(wù)。MySQL集群的橫向擴展能力足以滿足密集型工作負載的需求,其集群架構(gòu)如下圖所示:

整信集群由三類節(jié)點構(gòu)成:數(shù)據(jù)節(jié)點、應(yīng)用程序節(jié)點以及管理節(jié)點。

  • 數(shù)據(jù)節(jié)點通常負責數(shù)據(jù)訪問與存儲事務(wù)。
  • 應(yīng)用程序節(jié)點提供由應(yīng)用程序邏輯層及應(yīng)用API指向數(shù)據(jù)節(jié)點的鏈接。
  • 管理節(jié)點在集群配置體系中的作用至關(guān)重要,并在網(wǎng)絡(luò)分區(qū)環(huán)境下負責負載指派。

在本文中,我們將共同探討提升MySQL集群性能的***實踐方案。通過這些方案,大家將能在各類工作負載中實現(xiàn)游刃有余的資源分配效果。

最適合MySQL集群的應(yīng)用程序

MySQL集群能確保來自應(yīng)用程序或者SQL節(jié)點的更新立即被用于集群體系中的每一個節(jié)點。表格被劃分至一系列商用節(jié)點當中,從而實現(xiàn)數(shù)據(jù)庫的橫向可擴展性。

MYSQL集群在數(shù)據(jù)庫層處理表格劃分,這就避免了對應(yīng)用程序?qū)拥挠绊?。這一特性能夠大大簡化應(yīng)用程序的開發(fā)與維護工作。在事務(wù)性工作負載方面,MySQL集群還能提供非常強大的數(shù)據(jù)吞吐能力。另外,這套集群可以利用多個并行SQL節(jié)點,且每個節(jié)點都提供多個連接。

最適合MySQL集群的應(yīng)用程序包括:

  • 交易平臺/系統(tǒng);
  • 支付網(wǎng)關(guān);
  • 用戶配置管理;
  • 多人網(wǎng)絡(luò)游戲;
  • IMS服務(wù);
  • DHCP寬帶接入;
  • VoIP及視頻會議。

識別性能問題

我們一直建議大家對延遲及事務(wù)數(shù)據(jù)吞吐量等性能指標進行重復(fù)檢測方針。另一大關(guān)注重點在于考量數(shù)據(jù)庫的特定變更及其可用性。大家應(yīng)該在變更實際部署前進行性能測試,并在優(yōu)化技術(shù)安置完畢后再次進行測試。

在某些情況下,我們可能無意中遇上必須滿足的特殊需求。通過迭代流程,大家可以追蹤目標的當前進展。除了檢測應(yīng)用程序的整體性能,大家還應(yīng)該考慮個別事務(wù)的性能表現(xiàn)。某些查詢請求可能需要很長時間才能執(zhí)行完畢。

如果大家利用SQL對接入MySQL Enterprise Monitor的數(shù)據(jù)庫進行查詢,那么不妨試試Query Analyzer--它能追蹤所有負載較高的事務(wù)。如果大家沒有接入Enterprise Monitor,那么MySQL慢速查詢?nèi)罩疽沧阋詭椭覀冋页鎏幚磉^程過長的事務(wù)。我們可以通過對long_query_time變量的設(shè)定選擇日志中到底應(yīng)該保留哪些慢速查詢(即慢到何種程度)。變量數(shù)值的單位是"秒",將該數(shù)值設(shè)為"0"則代表在日志中記錄下所有查詢請求。

由于對long_query_time變量所做出的變更不會馬上體現(xiàn)在活動連接當中,因此大家需要刪除當前連接然后重新建立。

MySQL集群在數(shù)據(jù)節(jié)點內(nèi)保留著全部細節(jié)信息。這部分數(shù)據(jù)可由名為NDBINFO的虛擬數(shù)據(jù)庫直接使用。舉例來說,NDBINFO能夠顯示磁盤頁面緩沖區(qū)的使用信息。所謂磁盤頁面緩沖區(qū),其實是各個數(shù)據(jù)節(jié)點根據(jù)表格進行磁盤操作時的緩存。通常情況下,其緩沖命中率越高、則性能表現(xiàn)越好。調(diào)整這部分緩存的大小會對系統(tǒng)產(chǎn)生顯著影響。大家可以通過mysql命令行訪問磁盤頁面緩沖數(shù)據(jù)。#p#

性能優(yōu)化

訪問模式

要想讓MySQL集群部署發(fā)揮出與預(yù)期相符的性能,最重要的一點在于了解數(shù)據(jù)庫結(jié)構(gòu)。有一點需要注意--MySQL集群表格中的數(shù)據(jù)并不會被保存在MySQL服務(wù)器當中。這些數(shù)據(jù)實際上被劃分至由多個數(shù)據(jù)節(jié)點構(gòu)成的資源池當中,如下圖所示。

表格中的各行將被拆分成多個區(qū)塊,每個數(shù)據(jù)節(jié)點保留一個區(qū)塊的主片段及另一個區(qū)塊的次片段。

如果查詢需要多次網(wǎng)絡(luò)跳轉(zhuǎn),例如由服務(wù)器向數(shù)據(jù)節(jié)點或者在不同數(shù)據(jù)節(jié)點之間,那么性能與可擴展性都可能受到影響。因此,要想讓MySQL集群獲得***性能表現(xiàn),我們必須盡量減少網(wǎng)絡(luò)跳轉(zhuǎn)次數(shù)。表格劃分基于主鍵散列,但我們可以對其進行重寫以提高性能。簡單的訪問模式是創(chuàng)建可擴展且高性能解決方案的關(guān)鍵。

網(wǎng)絡(luò)跳轉(zhuǎn)的必要次數(shù)取決于來自各分支結(jié)構(gòu)的結(jié)果集與接合深度。如果表格的接合深度過大,那么指向數(shù)據(jù)節(jié)點的每一次跳轉(zhuǎn)也將耗費更多時間。要想獲得***性能,我們需要利用主鍵查找--其完成時間是恒定的,與數(shù)據(jù)庫規(guī)模及數(shù)據(jù)節(jié)點數(shù)目沒有關(guān)系。

使用AQL

通過使用AQL(即適應(yīng)性查詢本地化),性能改善將體現(xiàn)得更為明顯。

AQL能夠?qū)⒉樵冇蒑ySQL服務(wù)器指派向全部數(shù)據(jù)節(jié)點,且查詢由本地數(shù)據(jù)副本負責執(zhí)行。然后它會向MySQL服務(wù)器發(fā)回合并結(jié)果集,從而最終實現(xiàn)減少網(wǎng)絡(luò)跳轉(zhuǎn)、提高性能表現(xiàn)的目的。

AQ能幫助MySQL集群高效處理涉及大量復(fù)雜查詢事務(wù)的用例。

為了獲得更理想的使用效果,大家可以在變更表格模式(包括添加、刪除索引或者執(zhí)行其它重要變更)后在某一臺MySQL服務(wù)器中運行OPTIMIZE TABLE <tab-name>。

在實際使用環(huán)境中的測試結(jié)果顯示,AQL能夠?qū)⒋罅坎樵兪聞?wù)的整體效率提升70倍。在測試中,一套網(wǎng)絡(luò)內(nèi)容存儲管理系統(tǒng)中包含有十一套復(fù)雜表格,在對其進行正常查詢時,整個流程需要耗時87秒。但在AQL的幫助下,整個流程的時耗被直接縮短至1.26秒。

在默認情況下,AQL受到全局變量ndb_join_pushdown的控制。為了能夠讓AQL切實起效,我們需要對其進行如下規(guī)則修改:

  • 要加入的列必須使用同一種數(shù)據(jù)類型,包括VARCHAR長度列在內(nèi)。
  • 無法對指向BLOB或TEXT列的連接起效。
  • 不支持顯式封鎖,但我們可以通過基于NDB存儲引擎鎖定的隱式行實現(xiàn)同等效果。
  • 無法對明顯由HASH或者RANGE進行劃分的連接起效。

分布感知應(yīng)用

在利用MySQL集群向表格中添加行時,每一行都歸屬于一個分區(qū)。每個分區(qū)又都由集群中的一個特定數(shù)據(jù)節(jié)點所掌控。只有事務(wù)需要的全部數(shù)據(jù)都被劃分到同一個分區(qū)當中時,集群性能才能實現(xiàn)***。這意味著我們要利用一個單獨數(shù)據(jù)節(jié)點來取消在多個節(jié)點之間往復(fù)傳輸所帶來的延遲提升。

MySQL集群默認通過主鍵散列對數(shù)據(jù)進行劃分。我們可以指定主鍵中的特定字段并將其提交給散列算法,從而改變默認方案。

大家也可以利用分區(qū)裁剪方案。分區(qū)裁剪流程是指通過單一數(shù)據(jù)節(jié)點進行索引掃描,其延遲改善效果取決于數(shù)據(jù)節(jié)點的數(shù)量及結(jié)果集的大小。數(shù)據(jù)節(jié)點越多、需要取回的記錄越少,改進的效果也就越好。

下圖顯示了分區(qū)裁剪對性能的提升情況。

分區(qū)裁剪能夠有效降低小型結(jié)果集的延遲狀況,但對較大的結(jié)果集而言反倒會提高延遲表現(xiàn)。上圖中的紅色條形代表分區(qū)裁剪后的延遲數(shù)字。

在這種情況下,應(yīng)用程序分布機制對于新增額外節(jié)點的識別能力就成了保證性能改善的關(guān)鍵。

使用連接池

MySQL集群在多個數(shù)據(jù)節(jié)點進行大量并行操作時的吞吐能力***。有鑒于此,我們必須同時利用多臺MySQL服務(wù)器且應(yīng)用程序的各個線程全部接入這些服務(wù)器。要訪問數(shù)據(jù)節(jié)點,mysqld進程會默認使用單獨的NDB API連接。由于大量應(yīng)用程序線程同時搶占這一條連接,我們需要設(shè)置一套互斥機制以避免吞吐操作發(fā)生沖突。

一種方案是讓每個應(yīng)用線程都使用其專用的mysqld進程,但這不僅浪費資源、同時也會增加應(yīng)用程序的復(fù)雜性。

更為高效的方案是如上圖所示,建立由mysqld進程向數(shù)據(jù)節(jié)點的多條NDB API連接。

為了使用連接池,每條(來自mysqld)連接都需要在config.ini文件中擁有自己的[mysqld]或者[api]分節(jié)號,然后在my.cnf文件中將ndbcluster-connection-pool值設(shè)置為大于1。另外,我們也絕不能在啟動mysqld進程的同時將ndb-node-ida作為命令行選項。在我們的測試實例中,單一mysqld進程擁有四個NDB API連接。

上圖顯示了連接池所帶來的性能提升。一般來說,應(yīng)用程序的性能普遍能獲得70%的提升,但在某些特殊情況下、其提升幅度可能超過150%。

添加節(jié)點以實現(xiàn)擴展

MySQL集群在設(shè)計思路中納入了橫向擴展考量。能夠添加額外的MySQL服務(wù)器或者數(shù)據(jù)節(jié)點,大家可以顯著提升整體性能。

我們還能夠向處于運行狀態(tài)的MySQL集群中添加新的MySQL服務(wù)器或者節(jié)點組。也就是說,我們完全不必關(guān)機并重新加載集群?,F(xiàn)有表格中的數(shù)據(jù)將被重新劃分到所有接入數(shù)據(jù)節(jié)點當中。最安全的處理方式是使用MySQL Cluster Manager。這款集群管理器能自動處理關(guān)于額外節(jié)點添加的所有事務(wù),而且我們不必擔心整個過程會造成任何服務(wù)丟失。

總結(jié)

在過去九年中(自2004年起),MySQL集群已經(jīng)逐步成為一款成熟的解決方案,能夠滿足極端性能水平要求以及高達99.99%的嚴格正常運行標準。正如在文章開頭所說,自適應(yīng)查詢本地化、參數(shù)調(diào)整以及分布感知等特性令MySQL集群在性能方面更上一層樓,從而有能力服務(wù)于更廣泛的應(yīng)用組合方案。作為數(shù)據(jù)庫技術(shù)的核心要素,實時監(jiān)控與報告功能的強化也幫助數(shù)據(jù)庫開發(fā)人員及管理員們得以更好地在MySQl集群中擴展自己的用例。

原文鏈接:

http://www.agileload.com/agileload/blog/2013/03/11/optimizing-the-performance-of-mysql-cluster

責任編輯:黃丹 來源: 51CTO.com
相關(guān)推薦

2010-06-07 09:14:55

Hadoop集群

2019-11-01 14:00:58

前端性能優(yōu)化代碼

2022-11-27 17:39:06

大數(shù)據(jù)集群性能

2013-11-21 11:03:29

Nginx性能優(yōu)化

2025-04-18 07:43:41

2010-05-24 14:59:29

Hadoop集群

2020-10-19 19:45:58

MySQL數(shù)據(jù)庫優(yōu)化

2021-01-31 17:50:41

數(shù)據(jù)庫查詢程序員

2024-06-11 09:00:00

異步編程代碼

2010-03-02 09:53:14

MySQL性能優(yōu)化

2020-03-23 15:15:57

MySQL性能優(yōu)化數(shù)據(jù)庫

2009-04-20 08:51:50

MySQL查詢優(yōu)化數(shù)據(jù)庫

2022-04-27 10:53:34

web優(yōu)化性能

2011-07-19 09:51:32

性能優(yōu)化Designing FAndroid

2018-06-07 08:54:01

MySQL性能優(yōu)化索引

2023-04-17 16:33:27

云計算工具云性能測試

2011-04-25 09:11:15

2023-12-14 12:56:00

MongoDB數(shù)據(jù)庫優(yōu)化

2025-02-08 08:42:40

Kafka消息性能

2024-10-09 23:32:50

點贊
收藏

51CTO技術(shù)棧公眾號