一種單機運行多MySQL數據庫實例的方法和設備的制作方法
【專利摘要】本發明實施例公開了一種單機運行多MySQL數據庫實例的方法,通過應用本發明實施例所提出的技術方案,將多個MySQL數據庫實例部署在同一臺包含多個CPU節點的主機(服務器)上,使每個MySQL數據庫實例只綁定在一個CPU節點上,且各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間,從而,將各CPU節點上的MySQL數據庫實例進行物理隔離,避免了在內存分配不均衡時導致swap的情況,克服了MySQL數據庫無法充分發揮NUMA架構服務器的性能,服務器CPU資源利用率低的問題,充分提升了服務器資源利用率,節約了系統資源和電力資源。
【專利說明】—種單機運行多MySQL數據庫實例的方法和設備
【技術領域】
[0001]本申請涉及計算機【技術領域】,特別是涉及一種單機運行多MySQL數據庫實例的方法和設備。
【背景技術】
[0002]NUMA(Non Uniform MemoryAccess,非對稱式內存訪問)技術可以使眾多服務器像單一系統那樣運轉,同時保留小系統便于編程和管理的優點,是介于SMP(SymmetriCMult1-Processor,多處理器結構)和MPP (Massive Parallel Processing,海量并行處理結構)之間的一種服務器架構,將系統分為多個處理節點,內存分為本地內存和遠程內存。
[0003]基于電子商務應用對內存訪問提出的更高的要求,NUMA也向復雜的結構設計提出了挑戰。
[0004]目前的服務器都采用NUMA架構,S卩非對稱式內存訪問,如圖1所示,為現有技術中的Inte15600的結構示意圖。
[0005]在該結構中,服務器有兩個CPU (Central Processing Unit,中央處理器)節點,每個CPU節點都有各自的本地內存資源,兩個CPU節點之間通過高速互聯總線連接起來,在圖1所示的架構中,QPI (Quick Path Interconnect,快速通道互聯)即為上述高速互聯總線。
[0006]在NUMA架構中,CPU訪問本地內存和遠程內存的代價是不一樣的,CPU可以直接訪問本地內存,而訪問遠程內存需要通過CPU之間的高速互聯總線,導致訪問遠程內存的延遲比訪問本地內存大,所以,系統會優先選擇在本地內存中分配空間。
[0007]如果要充分利用NUMA的特性,應用程序必須支持NUMA,MySQL (—種關系型數據庫管理系統)對于NUMA的支持并不好,不僅無法充分利用CPU的資源,甚至會出現內存分配不均衡,導致數據存儲在swap空間(交換空間)的情況出現,嚴重影響性能。
[0008]在SSD(Solid State Disk,固態硬盤)出現之前,服務器只配置了普通磁盤,對于數據庫應用來說,10(Input/0utput,輸入/輸出)是瓶頸,而不是CPU,所以無法充分利用CPU的資源,當SSD存儲技術出現以后,單塊SSD可以達到5000010PS(Input/OutputOperations Per Second,每秒進行讀寫操作的次數)的能力,10不再是系統的瓶頸。
[0009]隨著CPU技術的不斷發展,一顆CPU上集成了越來越多的處理核心,而一臺服務器有很多CPU,服務器的處理能力越來越強。比如:Intel5600系列CPU,每個CPU有4個核心,每臺服務器有兩顆CPU,加上超線程技術,操作系統可以看到16個CPU。
[0010]在實現本申請的過程中,發明人發現現有技術至少存在如下問題:
[0011]MySQL對于多核CPU系統的利用率并不高,CPU計算能力的增強并不能帶來MySQL性能的提升。
[0012]MySQL采用單一進程模式,用戶連接都是線程分配,當MySQL進程被分配到某個CPU節點上時,NUMA的內存分配策略會盡量在本地節點中分配內存,這樣就導致了內存分配不均衡的情況出現。比如:一個CPU節點還有空閑內存,但是MySQL所在的CPU節點內存已經使用完,導致出現swap現象,嚴重影響性能。過去,解決這個問題的方案是關閉硬件NUMA特性,這是不得已而為之的解決方案。
[0013]綜上所述,現有的技術方案中缺少解決MySQL對多核CPU利用率不高,以及不支持NUMA架構的問題的方案。
【發明內容】
[0014]本申請的目的在于提供一種單機運行多MySQL數據庫實例的方法和設備,以解決現有的技術方案中MySQL對多核CPU利用率不高,以及不支持NUMA架構的問題。
[0015]為了達到上述目的,本申請實施例提供了一種單機運行多MySQL數據庫實例的方法,應用在支持NUMA架構的包含多個CPU節點的服務器上,包括以下步驟:
[0016]將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上;
[0017]分別將各MySQL數據庫實例所對應的內存分配策略配置為本地內存分配;
[0018]分別通過各CPU節點運行所綁定的各MySQL數據庫實例,其中,各CPU節點只在本地內存中,為自身所綁定的MySQL數據庫實例分配內存空間。
[0019]優選的,所述將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上之前,還包括:
[0020]獲取所述服務器的NUMA信息,至少確定所述服務器所包含的CPU節點的數量,以及各CPU節點所對應的本地內存信息。
[0021]優選的,所述獲取所述服務器的NUMA信息,具體為:
[0022]向所述服務器發送numactl-hardware命令,獲取所述服務器的NUMA信息。
[0023]優選的,所述將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上,具體為:
[0024]根據所述服務器所包含的CPU節點的數量,確定所述服務器可以綁定MySQL數據庫實例的CPU節點;
[0025]根據各CPU節點所對應的本地內存信息,選擇各MySQL數據庫實例所需要綁定的(PU節點;
[0026]將各MySQL數據庫實例分別綁定在所選擇的不同的CPU節點上。
[0027]優選的,所述將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上,具體為:
[0028]向所述服務器分別發送對應于各MySQL數據庫實例的numactl-cpubind命令,將各MySQL數據庫實例分別綁定在相應的CPU節點上。
[0029]優選的,所述方法還包括:
[0030]設置不同的MySQL數據庫實例分別使用不同的存儲設備;和/或,
[0031]設置不同的MySQL數據庫實例分別使用不同的IP地址。
[0032]優選的,所述存儲設備,具體為SSD。
[0033]另一方面,本申請實施例還提供了一種管理設備,應用在包括至少一個支持NUMA架構的包含多個CPU節點的服務器的應用場景中,包括:
[0034]綁定模塊,用于將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上;
[0035]配置模塊,用于分別將所述綁定模塊所綁定的各MySQL數據庫實例所對應的內存分配策略配置為本地內存分配;
[0036]處理模塊,用于分別通過各CPU節點運行所述綁定模塊所綁定的各MySQL數據庫實例,其中,根據所述配置模塊所配置的內存分配策略,各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間。
[0037]優選的,所述管理設備還包括:
[0038]獲取模塊,用于獲取所述服務器的NUMA信息,至少確定所述服務器所包含的CPU節點的數量,以及各CPU節點所對應的本地內存信息。
[0039]優選的,所述綁定模塊,具體用于:
[0040]根據所述獲取模塊所確定的所述服務器所包含的CPU節點的數量,確定所述服務器可以綁定MySQL數據庫實例的CPU節點;
[0041]根據所述獲取模塊所確定的各CPU節點所對應的本地內存信息,選擇各MySQL數據庫實例所需要綁定的CPU節點;
[0042]將各MySQL數據庫實例分別綁定在所選擇的不同的CPU節點上。
[0043]優選的,所述配置模塊,還用于:
[0044]設置不同的MySQL數據庫實例分別使用不同的存儲設備;和/或,
[0045]設置不同的MySQL數據庫實例分別使用不同的IP地址。
[0046]與現有技術相比,本申請實施例所提出的技術方案具有以下優點:
[0047]通過應用本申請實施例所提出的技術方案,將多個MySQL數據庫實例部署在同一臺包含多個CPU節點的主機(服務器)上,使每個MySQL數據庫實例只綁定在一個CPU節點上,且各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間,從而,將各CPU節點上的MySQL數據庫實例進行物理隔離,避免了在內存分配不均衡時導致內存數據交換(swap)的情況,克服了 MySQL數據庫無法充分發揮NUMA架構服務器的性能,服務器CPU資源利用率低的問題,充分提升了服務器資源利用率,節約了系統資源和電力資源。
【專利附圖】
【附圖說明】
[0048]為了更清楚地說明本申請實施例或現有技術的技術方案,下面將對本申請實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請實施例的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0049]圖1為現有技術中的Intel5600的結構示意圖;
[0050]圖2為本申請實施例提供的一種單機運行多MySQL數據庫實例的方法的流程示意圖;
[0051]圖3為本申請實施例提供的一種應用單機運行多MySQL數據庫實例的方法的具體應用場景的不意圖;
[0052]圖4為本申請實施例提供的一種管理設備的結構示意圖。
【具體實施方式】
[0053]下面將結合本申請中的附圖,對本申請中的技術方案進行清楚、完整的描述,顯然,所描述的實施例是本申請的一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動的前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0054]如圖2所示,為本申請實施例所提供的一種單機運行多MySQL數據庫實例的方法的流程示意圖,該方法應用在支持NUMA架構的包含多個CPU節點的服務器上,具體包括以下步驟:
[0055]步驟S201、將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上。
[0056]在本步驟之前,為了準確的確定服務器當前的資源狀態,還可以進行相應的硬件信息獲取過程,從而獲取所述服務器的NUMA信息。
[0057]在此過程中,至少確定所述服務器所包含的CPU節點的數量,以及各CPU節點所對應的本地內存信息,以此作為進行MySQL數據庫實例綁定的依據。
[0058]在具體的處理場景中,上述的硬件信息獲取過程的具體實現方式可以為:
[0059]向所述服務器發送numactl-hardware命令,獲取所述服務器的NUMA信息。
[0060]需要說明的是,上述的numactl-hardware命令具體為Linux操作系統的命令,這樣操作的前提是以該命令對NUMA架構的支持為前提的,在實際應用中,也可以采用其他的命令形式,或者直接根據已知(或預先定義)的硬件信息直接進行MySQL數據庫實例的綁定,這樣的變化并不影響本申請的保護范圍。
[0061]在獲取到相應的硬件信息的基礎上,本步驟中的具體綁定過程說明如下:
[0062](I)根據所述服務器所包含的CPU節點的數量,確定所述服務器可以綁定MySQL數據庫實例的CPU節點。
[0063]為了實現對各MySQL數據庫實例的隔離,需要使每個MySQL數據庫實例分別獨自綁定在一個CPU節點上,因此,CPU節點的數量的確定過程,實際上是對該服務器所能夠綁定的MySQL數據庫實例的最大數量的確定過程。
[0064](2)根據各CPU節點所對應的本地內存信息,選擇各MySQL數據庫實例所需要綁定的CPU節點。
[0065]在存在相應的CPU節點的情況下,進一步需要確定這樣的CPU節點是否適合進行MySQL數據庫實例的綁定,即對CPU節點進行適應性篩選的過程。
[0066]具體的篩選依據為該CPU節點的本地內存情況,包括本地內存資源總量以及當前空閑本地內存資源量兩個方面。
[0067]本地內存資源總量體現了該CPU節點的極限處理能力,而當前空閑本地內存資源量則體現了該CPU節點當前的實際處理能力,結合這兩點信息,可以確定該CPU節點是否滿足MySQL數據庫實例對于處理資源的要求,如果不能滿足,則表示該CPU節點不能保證MySQL數據庫實例的正常運行,因此,該CPU節點不能綁定MySQL數據庫實例。
[0068](3)將各MySQL數據庫實例分別綁定在所選擇的不同的CPU節點上。
[0069]在完成了上述的處理過程后,最終確定了可以進行MySQL數據庫實例綁定的CPU節點,從而,可以根據相應的選擇規則為各MySQL數據庫實例選擇相應的CPU節點進行綁定。
[0070]在具體的處理場景中,這樣的選擇規則可以是隨機的,也可以是按照一定順序的,這樣的變化并不影響本申請的保護范圍。
[0071]具體的,上述的綁定過程可以通過向所述服務器分別發送對應于各MySQL數據庫實例的numactl-cpubind命令來實現,從而,將各MySQL數據庫實例分別綁定在相應的CPU節點上。
[0072]需要說明的是,上述的numactl-cpubind命令具體為Linux操作系統的命令,這樣操作的前提是以該命令對NUMA架構的支持為前提的,在實際應用中,也可以采用其他的命令形式進行MySQL數據庫實例的綁定,這樣的變化并不影響本申請的保護范圍。
[0073]步驟S202、分別將各MySQL數據庫實例所對應的內存分配策略配置為本地內存分配。
[0074]具體的,上述的配置過程同樣可以Linux的numactl命令來實現,從而對NUMA架構進行支持。
[0075]在實際應用中,本地內存分配具體可以通過localalloc (本地內存分配)策略來實現上述操作,這是NUMA架構所支持的一種內存分配策略。
[0076]在實際應用中,可以將上述的CPU節點的綁定和內存分配策略的配置通過一條numactl命令來實現,例如,如果需要將當前MySQL數據庫實例綁定在CPU節點O上,并配置本地內存分配的內存分配策略,貝1J相應的numactl命令具體可以表示為numactl-cpubind—0_1oc&1&11c ο
[0077]需要說明的是,上述的numactl命令具體為Linux操作系統的命令,這樣操作的前提是以該命令對NUMA架構的支持為前提的,在實際應用中,也可以采用其他的命令形式進行MySQL數據庫實例的內存分配策略的配置,這樣的變化并不影響本中請的保護范圍。
[0078]步驟S203、分別通過各CPU節點運行所綁定的各MySQL數據庫實例。
[0079]其中,各CPU節點只在本地內存中,為自身所綁定的MySQL數據庫實例分配內存空間。
[0080]通過上述的處理流程,實現了對于MySQL數據庫實例的CPU節點綁定和內存分配策略的配置,但是,考慮到實際操作中除了 CPU和內存之外,各MySQL數據庫實例之間還可能存在其他共用資源,本申請實施例進一步對相應的共用資源進行隔離,從而保證MySQL數據庫實例不會在NUMA架構下產生性能問題。
[0081]具體的,可以通過以下的部分或全部操作實現上述的目的:
[0082]操作A、設置不同的MySQL數據庫實例分別使用不同的存儲設備。
[0083]本操作的目的在于實現對各MySQL數據庫實例實現IO隔離,在具體的應用場景中,服務器如果采用SSD作為具體的存儲設備,則IO不再是系統性能的瓶頸,從而,使不同的MySQL數據庫實例可以使用不同的存儲設備,實現對于IO的物理隔離,避免了各MySQL數據庫實例相互之間的影響。
[0084]操作B、設置不同的MySQL數據庫實例分別使用不同的IP地址。
[0085]本操作的目的在于實現對各MySQL數據庫實例實現網絡隔離,在具體的應用場景中,對各MySQL數據庫實例采用不同的IP地址,從而,將各MySQL數據庫實例分別綁定在不同的網卡上,實現對于網絡的物理隔離,避免了各MySQL數據庫實例相互之間的影響。
[0086]需要進一步指出的是,上述的IO和網絡是實際操作中各MySQL數據庫實例之間比較常見的共用資源,如果還有其他共用資源,同樣可以采用相類似的方式實現對相應的共用資源的物理隔離,從而,保證各MySQL數據庫實例不會在NUMA架構下由于資源共用而產生性能問題,這樣的變化同樣屬于本申請的保護范圍。[0087]與現有技術相比,本申請實施例所提出的技術方案具有以下優點:
[0088]通過應用本申請實施例所提出的技術方案,將多個MySQL數據庫實例部署在同一臺包含多個CPU節點的主機(服務器)上,使每個MySQL數據庫實例只綁定在一個CPU節點上,且各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間,從而,將各CPU節點上的MySQL數據庫實例進行物理隔離,避免了在內存分配不均衡時導致swap的情況,克服了 MySQL數據庫無法充分發揮NUMA架構服務器的性能,服務器CPU資源利用率低的問題,充分提升了服務器資源利用率,節約了系統資源和電力資源。
[0089]為了進一步說明本申請實施例所提出的技術方案,下面結合具體的實施場景,對本申請實施例所提出的技術方案進行說明。
[0090]根據本申請實施例所給出的前述的技術方案,本申請實施例的技術思路是在單機(一個服務器)上運行多個MySQL數據庫實例,并將不同的MySQL數據庫實例綁定在不同的CPU節點上,相當于每個MySQL數據庫實例單獨使用一個CPU節點,從而,在支持NUMA架構的情況下,保證多個CPU節點之間的CPU資源和內存分配互不干擾。
[0091]具體的,操作系統提供了可以控制NUMA分配CPU和內存策略的命令,比如Linux操作系統的numactl命令,在具體的處理場景中,NUMA架構下,支持如下幾種內存分配策略:
[0092]1、缺省(default):總是在本地節點分配(分配在當前進程運行的節點上)。
[0093]2、綁定(bind):強制分配到指定節點上。
[0094]3、交叉(interleave):在所有節點或者指定的節點上交織分配。
[0095]4、優先(preferred):在指定節點上分配,失敗則在其他節點上分配。
[0096]顯然,其中的綁定(bind)策略可以適用于本申請實施例所提出的技術方案中。
[0097]下面,基于上述的Linux命令,對本申請實施例所提出的一種單機運行多MySQL數據庫實例的方法在具體應用場景中的應用過程進行說明。
[0098]假設當前的服務器包括兩個CPU節點,并且有兩個MySQL數據庫實例需要在該服務器上運行,則相應的處理過程如下。
[0099]首先,通過numactl-hardware命令,可以獲取到該服務器的NUMA信息,比如CPU節點,本地內存容量等。
[0100]例如,具體的,基于前述假設,該服務器有兩個CPU節點,因此,所獲取到的該服務器的NUMA信息具體如下:
[0101]numactl—hardware
[0102]available:2nodes(0_l)
[0103]nodeOsize:32320MB
[0104]nodeOfree: 14551MB
[0105]node I size: 32294MB
[0106]nodelfree: 14802MB
[0107]node distances:
[0108]node 0 I
[0109]0: 10 20
[0110]I ; 20 10[0111]有上述信息可以看出,該服務器包括兩個CPU節點,分別為CPU節點O和CPU節點1,其中,CPU節點O的本地內存總量為32320MB,當前的空閑本地內存資源為14551MB,而CPU節點I的本地內存總量為32294MB,當前的空閑本地內存資源為14802MB。
[0112]根據以上的資源狀態信息,確定可以同時在該服務器上綁定兩個MySQL數據庫實例。
[0113]具體的綁定過程可以通過numactl-cpubind命令來完成,從而,可以將不同的MySQL數據庫實例綁定在不同的CPU節點上。
[0114]進一步的,在綁定過程中,同時可以設置內存分配策略為localalloc(本地內存分配),這樣,就只允許MySQL數據庫實例在所綁定的CPU的本地內存中分配空間。 [0115]具體的,對于需要綁定在CPU節點O上的MySQL數據庫實例,相應的命令為numactl—cpubind = O—localalloc。
[0116]而對于需要綁定在CPU節點I上的MySQL數據庫實例,相應的命令為numactl—cpubind = l—localalloc。
[0117]通過上述操作,分別將兩個MySQL數據庫實例綁定在了服務器的CPU節點O和CPU節點1,具體如圖3所示,為本申請實施例提供的一種應用單機運行多MySQL數據庫實例的方法的具體應用場景的示意圖。
[0118]需要進一步說明的是,在本方案中,除了 CPU和內存以外,還可能涉及到其他共用的資源,比如:10和網絡,因此,本申請實施例進一步給出以下的資源隔離策略:
[0119](I) 10隔離策略。
[0120]服務器采用SSD作為存儲,10不再是系統瓶頸,不同的MySQL數據庫實例可以使用不同的存儲設備,從而,實現10資源的物理隔離,使不同的MySQL數據庫實例之間的10資源互不影響。
[0121](2)網絡隔離策略.[0122]使不同的MySQL數據庫實例使用不同的IP地址,分別綁定在不同的網卡上,從而,實現網絡資源的物理隔離,使不同的MySQL數據庫實例之間的網絡資源互不影響。
[0123]需要進一步指出的是,上述的10和網絡是實際操作中各MySQL數據庫實例之間比較常見的共用資源,如果還有其他共用資源,同樣可以采用相類似的方式實現對相應的共用資源的物理隔離,從而,保證各MySQL數據庫實例不會在NUMA架構下由于資源共用而產生性能問題,這樣的變化同樣屬于本申請的保護范圍。
[0124]通過上述資源隔離方案,分別實現了 CPU、本地內存、10和網絡的隔離,從而,在單機運行多個MySQL數據庫實例的情況下,相互之間可以實現互不影響,大大提升了服務器的CPU利用率,解決MySQL數據庫實例在NUMA架構下的性能問題。
[0125]需要進一步指出的是,本申請實施例所提出的一種替代方案是采用虛擬機實現前述技術方案,即將物理主機劃分為多個虛擬機,然后分別運行多個MySQL數據庫實例,從而,提升主機利用率。具體的原理與前述過程相類似,這樣的技術方案同樣屬于本申請的保護范圍。
[0126]與現有技術相比,本申請實施例所提出的技術方案具有以下優點:
[0127]通過應用本申請實施例所提出的技術方案,將多個MySQL數據庫實例部署在同一臺包含多個CPU節點的主機(服務器)上,使每個MySQL數據庫實例只綁定在一個CPU節點上,且各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間,從而,將各CPU節點上的MySQL數據庫實例進行物理隔離,避免了在內存分配不均衡時導致swap的情況,克服了 MySQL數據庫無法充分發揮NUMA架構服務器的性能,服務器CPU資源利用率低的問題,充分提升了服務器資源利用率,節約了系統資源和電力資源。
[0128]另一方面,本申請實施例還提供了一種管理設備,應用在包括至少一個支持NUMA架構的包含多個CPU節點的服務器的應用場景中,其結構示意圖如圖4所示,包括:
[0129]綁定模塊41,用于將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上;
[0130]配置模塊42,用于分別將所述綁定模塊41所綁定的各MySQL數據庫實例所對應的內存分配策略配置為本地內存分配;
[0131 ] 處理模塊43,用于分別通過各CPU節點運行所述綁定模塊41所綁定的各MySQL數據庫實例,其中,根據所述配置模塊42所配置的內存分配策略,各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間。
[0132]優選的,該管理設備還包括:
[0133]獲取模塊44,用于獲取所述服務器的NUMA信息,至少確定所述服務器所包含的CPU節點的數量,以及各CPU節點所對應的本地內存信息。
[0134]進一步的,所述綁定模塊41,具體用于:
[0135]根據所述獲取模塊44所確定的所述服務器所包含的CPU節點的數量,確定所述服務器可以綁定MySQL數據庫實例的CPU節點;
[0136]根據所述獲取模塊44所確定的各CPU節點所對應的本地內存信息,選擇各MySQL數據庫實例所需要綁定的CPU節點;
[0137]將各MySQL數據庫實例分別綁定在所選擇的不同的CPU節點上。
[0138]在實際的應用場景中,所述配置模塊42,還用于:
[0139]設置不同的MySQL數據庫實例分別使用不同的存儲設備;和/或,
[0140]設置不同的MySQL數據庫實例分別使用不同的IP地址。
[0141]需要說明的是,上述的管理設備可以獨立于前述的至少一個支持NUMA架構的包含多個CPU節點的服務器之外,對相應的服務器進行控制,也可以直接集成在具體的服務器上,對該服務器進行具體的管理操作,其具體的物理形態的變化并不會影響本申請的保護范圍。
[0142]與現有技術相比,本申請實施例所提出的技術方案具有以下優點:
[0143]通過應用本申請實施例所提出的技術方案,將多個MySQL數據庫實例部署在同一臺包含多個CPU節點的主機(服務器)上,使每個MySQL數據庫實例只綁定在一個CPU節點上,且各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間,從而,將各CPU節點上的MySQL數據庫實例進行物理隔離,避免了在內存分配不均衡時導致swap的情況,克服了 MySQL數據庫無法充分發揮NUMA架構服務器的性能,服務器CPU資源利用率低的問題,充分提升了服務器資源利用率,節約了系統資源和電力資源。
[0144]本領域技術人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分布于實施例的裝置中,也可以進行相應變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。[0145]上述本申請實施例序號僅僅為了描述,不代表實施例的優劣。
[0146]通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺終端設備(可以是手機,個人計算機,服務器,或者網絡設備等)執行本申請各個實施例所述的方法。
[0147]以上所述僅是本申請的優選實施方式,應當指出,對于本【技術領域】的普通技術人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視本申請的保護范圍。
【權利要求】
1.一種單機運行多MySQL數據庫實例的方法,其特征在于,應用在支持NUMA架構的包含多個CPU節點的服務器上,包括以下步驟:
將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上; 分別將各MySQL數據庫實例所對應的內存分配策略配置為本地內存分配; 分別通過各CPU節點運行所綁定的各MySQL數據庫實例,其中,各CPU節點只在本地內存中,為自身所綁定的MySQL數據庫實例分配內存空間。
2.如權利要求1所述的方法,其特征在于,所述將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上之前,還包括: 獲取所述服務器的NUMA信息,至少確定所述服務器所包含的CPU節點的數量,以及各CPU節點所對應的本地內存信息。
3.如權利要求2所述的方法,其特征在于,所述獲取所述服務器的NUMA信息,具體為: 向所述服務器發送numactl-hardware命令,獲取所述服務器的NUMA信息。
4.如權利要求2所述的方法,其特征在于,所述將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上,具體為: 根據所述服務器所包含的CPU節點的數量,確定所述服務器可以綁定MySQL數據庫實例的CPU節點; 根據各CPU節點所對應的本地內存信息,選擇各MySQL數據庫實例所需要綁定的CPU節點; 將各MySQL數據庫實例分別綁定在所選擇的不同的CPU節點上。
5.如權利要求1所述的方法,其特征在于,所述將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上,具體為: 向所述服務器分別發送對應于各MySQL數據庫實例的numactl-cpubind命令,將各MySQL數據庫實例分別綁定在相應的CPU節點上。
6.如權利要求1所述的方法,其特征在于,所述方法還包括: 設置不同的MySQL數據庫實例分別使用不同的存儲設備;和/或, 設置不同的MySQL數據庫實例分別使用不同的IP地址。
7.如權利要求6所述的方法,其特征在于,所述存儲設備,具體為SSD。
8.一種管理設備,其特征在于,應用在包括至少一個支持NUMA架構的包含多個CPU節點的服務器的應用場景中,包括: 綁定模塊,用于將多個MySQL數據庫實例分別綁定在所述服務器的不同的CPU節點上; 配置模塊,用于分別將所述綁定模塊所綁定的各MySQL數據庫實例所對應的內存分配策略配置為本地內存分配; 處理模塊,用于分別通過各CPU節點運行所述綁定模塊所綁定的各MySQL數據庫實例,其中,根據所述配置模塊所配置的內存分配策略,各CPU節點只在本地內存中為自身所綁定的MySQL數據庫實例分配內存空間。
9.如權利要求8所述的管理設備,其特征在于,還包括: 獲取模塊,用于獲取所述服務器的NUMA信息,至少確定所述服務器所包含的CPU節點的數量,以及各CPU節點所對應的本地內存信息。
10.如權利要求9所述的管理設備,其特征在于,所述綁定模塊,具體用于: 根據所述獲取模塊所確定的所述服務器所包含的CPU節點的數量,確定所述服務器可以綁定MySQL數據庫實例的CPU節點; 根據所述獲取模塊所確定的各CPU節點所對應的本地內存信息,選擇各MySQL數據庫實例所需要綁定的CPU節點; 將各MySQL數據庫實例分別綁定在所選擇的不同的CPU節點上。
11.如權利要求8所述的管理設備,其特征在于,所述配置模塊,還用于: 設置不同的MySQL數據庫實例分別使用不同的存儲設備;和/或, 設置不同的MySQL數據庫 實例分別使用不同的IP地址。
【文檔編號】H04L29/08GK103634344SQ201210301832
【公開日】2014年3月12日 申請日期:2012年8月23日 優先權日:2012年8月23日
【發明者】張瑞, 彭立勛, 李春 申請人:阿里巴巴集團控股有限公司