我們經常會遇見「mysql: error 1040: too many connections」的情況,一種是訪問量確實很高,mysql伺服器抗不住,這個時候就要考慮增加從伺服器分散讀寫壓力,另外一種情況是mysql配置檔案中max_connections值過小。
資料庫連線池最小連線數和最大連線數:
最小連線數是連線池一直保持的資料連線。如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費掉。
mysql預設的最大連線數為100,mysql伺服器允許的最大連線數16384
最大連線數是連線池能申請的最大連線數。如果資料連線請求超過此數,後面的資料連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。如果最小連線數與最大連線數相差太大,那麼,最先的連線請求將會獲利,之後超過最小連線數量的連
接請求等價於建立乙個新的資料庫連線。不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時後被釋放。
mysql伺服器的連線數並不是要達到最大的100%為好,還是要具體問題具體分析
檢視當前資料庫的引數資訊可用:mysql>show variables;
mysql> show variables like 'max_connections';
+-----------------+-------+
| variable_name | value |
+-----------------+-------+
| max_connections | 650 |
+-----------------+-------+
這台mysql伺服器最大連線數是650,然後查詢一下伺服器響應的最大連線數:
mysql> show global status like 'max_used_connections';
mysql伺服器最大連線數是650,沒有達到伺服器連線數上限650,應該不會出現oo many connections(1040)錯誤,比較理想的設定是:
max_used_connections / max_connections * 100% ≈ 85%
最大連線數佔上限連線數的85%左右,如果發現比例在10%以下,mysql伺服器連線上限就設定得過高了。
從以下幾種方法都可以實現修改連線數的目的。
1. 進入到mysql的安裝目錄找到mysqld_safe(我的安裝路徑是:cd /opt/mysql-5.6/bin/mysqld_safe);
vim mysqld_safe
找到then $nohup_niceness $ledir/$mysqld
$defaults --basedir=$my_basedir_version
--datadir=$datadir $user_option
--pid-file=$pid_file
--skip-external-locking
-o max_connections=650
>> $err_log 2>&1 else
eval "$nohup_niceness $ledir/$mysqld
$defaults --basedir=$my_basedir_version
--datadir=$datadir $user_option
--pid-file=$pid_file
--skip-external-locking $args
-o max_connections=650>>
$err_log 2>&1"
紅色行代表要新增的字段。儲存,退出。
重啟mysql服務,即可。
檢視當前資料庫的引數資訊可用:mysql>show variables;
2. 相對來說比較簡單,直接更改mysql的配置檔案my.cnf找到max_connections將預設值改為你需要的值,儲存退出,重啟服務即可。
3.命令列方式更改最大連線數:以管理員身份登入到資料庫:
mysql>set global max_connections=650
顯示當前執行的query:mysql> show processlist
顯示當前狀態:mysql> show status
對於併發較大的系統,建立一次連線然後快取起來連續使用,直到程式結束等情況下再釋放連線,就能夠將系統資源集中在對資料庫操作的處理上,從而大大提高效能。通常情況下將資料連線的建立和斷開委託給一種能夠資料庫連線池的元件或服務進行管理。而dbcp, c3p0, proxool等都是常用的開源的連線池元件。
在修改最大連線數的時候會有這樣乙個疑問—這個值是不是越大越好,或者設定為多大才合適?這個引數的大小要綜合很多因素來考慮,比如使用的平台所支援的執行緒庫數量、伺服器的配置(特別是記憶體大小)、每個連線占用資源(記憶體和負載)的多少、系統需要的響應時間等。可以在global或session範圍內修改這個引數。連線數的增加會帶來很多連鎖反應,需要在實際中避免由此引發的負面影響。
mysql為每個連線分配執行緒來處理,可以通過threads_connected引數檢視當前分配的執行緒數量:
比較threads_connected引數和前面提到的max_connections引數,也可以作為目前的系統負載的參照,決定是否需要修改連線數。
mysql連線池 順序 Mysql 連線池
通常,如果我們的服務涉及到mysql的操作,當乙個新的請求進來的時候,可以先連線mysql,使用完之後再斷開連線即可。但這樣做有個弊端,當請求量巨大時,會在瞬間有大量的資料庫連線與斷開操作,這是非常影響 mysql 效能的做法。此時,我們就需要使用mysql連線池。在 python 服務中使用 my...
mysql連線池的概念 連線池概念
1 連線池是乙個程序 多個連線是在乙個程序裡面儲存 管理的。這個程序儲存所有的連線,當我們開啟連線,如果有未用連線可用,則返回該連線。如果池中的連線都用完了,則建立乙個新的連線儲存到連線池。而但我們關閉連線的時候,連線池裡面並不關閉連線,而是返回連線池中並標記為可重用的狀態,等待重新連線直到等待超時...
nhibernate連線池配置
nhibernate連線池配置 nhibernate.driver.sqlclientdriver server 127.0.0.1 initial catalog sun user id sun password 123456 min pool size 10 max pool size 50 c...