1. 程式人生 > >MySQL高效處理大量併發的資料庫連線方法

MySQL高效處理大量併發的資料庫連線方法

單機單MySQL伺服器處理資料庫連線請求利用多執行緒機制,但正如任何處理方式一樣都會有它的功能瓶頸。單機單MySQL伺服器如何提高處理瞬時成千上萬的資料庫連線請求呢?
首先,我們從MySQL伺服器的工作原理出發來思考問題。MySQL伺服器利用多執行緒機制來充分發揮對多使用者訪問的支援,首先它分析客戶傳送過來的連線字串,
在資料庫連線的執行緒快取中尋找是否有這樣的執行緒可以支援處理這一連線訪問請求,如果存在就啟用它;否則就新建一個執行緒來處理客戶的訪問連線請求。
    當多個數據庫連線請求訪問的是同一個資料庫物件或者是同一部分資料,就會觸發同步   機制使得一些請求處於等待狀態。
這就引出兩個問題,首先是MySQL伺服器是否可以虛擬為多個伺服器來提供對資料庫連線請求的處理?再就是如何對客戶請求的資源進行快速響應,減少等待的時間。

     第一個問題,通過開放多個埠來實現。同一服務上開啟多個MySQL埠有兩種方式,一種是在編譯的時候指定特定埠,



第二是修改配置檔案來達到 {mod}多個埠的目的。通過對MySQL_multi.conf修改可以實現第二種方式。

MySQLd_multi可以管理多個幀聽不同Unix套接字檔案和TCP/IP埠的連線的MySQLd程序。它可以啟動或停止伺服器,或報告它們的當前狀態。
程式尋找my.cnf中的[MySQLdN]組(或 --config-file選項指定的檔案)。N 可以為任何正整數。
同時,在my.cnf配置檔案中對以下各引數進行適當的設定。首先是與網路連線的效能配置項。

Max_connections:整個MySQL允許的最大連線數。
如果客戶的連線請求數超過max_connections,就會產生大量連線請求的等待,所以應該在主機效能允許的情況下,將該引數設定的儘可能大一些。
Max_user_connections:每個使用者允許的最大連線數。
Net_buffer_length:網路包傳輸中,傳輸訊息之前的net buffer初始化大小。
Max_allowed_packet:在網路傳輸中,一次訊息傳輸量的最大值
Back_log:在MySQL的連線請求等待佇列中允許存放的最大連線請求數。
再次是與連線執行緒相關的系統引數及狀態變數"
Thread_cache_size:Thread Cache池中應該存放的連線執行緒數。
Thread_stack:每個連線執行緒被建立時,MySQL給它分配的記憶體大小。

第二個問題,主要通過以下幾個方面來處理
第一, 適當分庫。根據業務劃分多個數據庫,即database。通過SQL命令 showdatabases可以顯示所有的資料庫。這樣可以將資料資源的訪問進行有效地均衡,使得在各個業務資料的訪問之間減少干擾,這樣通過訪問字串進行資料庫連線的時候也可以更為有效的利用MySQL的多執行緒機制。而且,通過這樣的處理,也有效減少了對同一部分資料的訪問。
第二,對MySQL進行Query Cache優化。