1. 程式人生 > >Mysql 檢視連線數,狀態 最大併發數

Mysql 檢視連線數,狀態 最大併發數

-- show variables like '%max_connections%'; 檢視最大連線數 set global max_connections=1000 重新設定

mysql> show status like 'Threads%';

+-------------------+-------+ | Variable_name     | Value | +-------------------+-------+ | Threads_cached    | 58    | | Threads_connected | 57    |   ###這個數值指的是開啟的連線數 | Threads_created   | 3676  | | Threads_running   | 4     |   ###這個數值指的是啟用的連線數,這個數值一般遠低於connected數值

+-------------------+-------+

Threads_connected 跟show processlist結果相同,表示當前連線數。準確的來說,Threads_running是代表當前併發數

這是是查詢資料庫當前設定的最大連線數

mysql> show variables like '%max_connections%'; +-----------------+-------+ | Variable_name   | Value | +-----------------+-------+ | max_connections | 1000  | +-----------------+-------+

可以在/etc/my.cnf裡面設定資料庫的最大連線數

[mysqld]

max_connections = 1000

MySQL伺服器的執行緒數需要在一個合理的範圍之內,這樣才能保證MySQL伺服器健康平穩地執行。Threads_created表示建立過的執行緒數,通過檢視Threads_created就可以檢視MySQL伺服器的程序狀態。

1. mysql> show global status like 'Thread%';

2. +-------------------+-------+

3. | Variable_name | Value |

4. +-------------------+-------+

5. | Threads_cached | 46 |

6. | Threads_connected | 2 |

7. | Threads_created | 570 |

8. | Threads_running | 1 |

9. +-------------------+-------+

如果我們在MySQL伺服器配置檔案中設定了thread_cache_size,當客戶端斷開之後,伺服器處理此客戶的執行緒將會快取起來以響應下一個客戶而不是銷燬(前提是快取數未達上限)。

Threads_created表示建立過的執行緒數,如果發現Threads_created值過大的話,表明MySQL伺服器一直在建立執行緒,這也是比較耗資源,可以適當增加配置檔案中thread_cache_size值,查詢伺服器

thread_cache_size配置:

1. mysql> show variables like 'thread_cache_size';

2. +-------------------+-------+

3. | Variable_name | Value |

4. +-------------------+-------+

5. | thread_cache_size | 64 |

6. +-------------------+-------+

示例中的伺服器還是挺健康的。

1.show status

   Threads_connected  當前的連線數    Connections  試圖連線到(不管是否成功)MySQL伺服器的連線數。    Max_used_connections  伺服器啟動後已經同時使用的連線的最大數量。

2.set GLOBAL max_connections=連線數;     flush privileges

3.修改/etc/my.cnf中的max_connections

4.show processlist   顯示當前正在執行的MySQL連線

5.mysqladmin -u<user> -p<pwd> -h<host> status

   顯示當前mysql狀態

   Uptime: 13131  Threads: 1  Questions: 22  Slow queries: 0  Opens: 16  Flush tables: 1  Open tables: 1  Queries per second avg: 0.1

   mysqladmin -u<user> -p<pwd> -h<host> extended-status

   顯示mysql的其他狀態

+-----------------------------------+----------+ | Variable_name                     | Value    | +-----------------------------------+----------+ | Aborted_clients                   | 0        | | Aborted_connects               | 1        | | Binlog_cache_disk_use       | 0        | | Binlog_cache_use               | 0        | | Bytes_received                   | 1152   | | Bytes_sent                         | 10400 | | Com_admin_commands      | 0        | | Com_assign_to_keycache  | 0        |

.............................................................

.............................................................

| Threads_cached                 | 2        | | Threads_connected            | 1        | | Threads_created                | 3        | | Threads_running                | 1        | | Uptime                                | 13509    | | Uptime_since_flush_status | 13509    | +-----------------------------------+----------+

令: show processlist; 如果是root帳號,你能看到所有使用者的當前連線。如果是其它普通帳號,只能看到自己佔用的連線。 show processlist;只列出前100條,如果想全列出請使用show full processlist; MySQL> show processlist;

命令: show status;

命令:show status like '%下面變數%';

Aborted_clients 由於客戶沒有正確關閉連線已經死掉,已經放棄的連線數量。  Aborted_connects 嘗試已經失敗的MySQL伺服器的連線的次數。  Connections 試圖連線MySQL伺服器的次數。  Created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量。  Delayed_insert_threads 正在使用的延遲插入處理器執行緒的數量。  Delayed_writes 用INSERT DELAYED寫入的行數。  Delayed_errors 用INSERT DELAYED寫入的發生某些錯誤(可能重複鍵值)的行數。  Flush_commands 執行FLUSH命令的次數。  Handler_delete 請求從一張表中刪除行的次數。  Handler_read_first 請求讀入表中第一行的次數。  Handler_read_key 請求數字基於鍵讀行。  Handler_read_next 請求讀入基於一個鍵的一行的次數。  Handler_read_rnd 請求讀入基於一個固定位置的一行的次數。  Handler_update 請求更新表中一行的次數。  Handler_write 請求向表中插入一行的次數。  Key_blocks_used 用於關鍵字快取的塊的數量。  Key_read_requests 請求從快取讀入一個鍵值的次數。  Key_reads 從磁碟物理讀入一個鍵值的次數。  Key_write_requests 請求將一個關鍵字塊寫入快取次數。  Key_writes 將一個鍵值塊物理寫入磁碟的次數。  Max_used_connections 同時使用的連線的最大數目。  Not_flushed_key_blocks 在鍵快取中已經改變但是還沒被清空到磁碟上的鍵塊。  Not_flushed_delayed_rows 在INSERT DELAY佇列中等待寫入的行的數量。  Open_tables 開啟表的數量。  Open_files 開啟檔案的數量。  Open_streams 開啟流的數量(主要用於日誌記載)  Opened_tables 已經開啟的表的數量。  Questions 發往伺服器的查詢的數量。  Slow_queries 要花超過long_query_time時間的查詢數量。  Threads_connected 當前開啟的連線的數量。  Threads_running 不在睡眠的執行緒數量。  Uptime 伺服器工作了多少秒。

My.ini配置 虛擬記憶體

innodb_buffer_pool_size=576M   ->128M InnoDB引擎緩衝區

query_cache_size=100M             ->32 查詢快取 tmp_table_size=102M                  ->32M 臨時表大小 key_buffer_size=16m                  ->8M

設定max_connections

命令:show variables like '%max_connections%' (這個辦法在debian+mysql  Ver 12.22 Distrib 4.0.22, for pc-Linux (i386) 裡實驗了) 設定辦法是在my.cnf檔案中,新增下面的最後紅色的一行:

--------------------------------------------------------------------------------

[mysqld]  port=3306  #socket=MySQL  skip-locking  set-variable = key_buffer=16K  set-variable = max_allowed_packet=1M  set-variable = thread_stack=64K  set-variable = table_cache=4  set-variable = sort_buffer=64K  set-variable = net_buffer_length=2K  set-variable = max_connections=32000  (在院裡的DELL機器mysql4.0裡的語法不同 max_connecionts=2000 直接這麼寫就好了

--------------------------------------------------------------------------------

修改完畢後,重啟MySQL即可。當然,為了確保設定正確,應該檢視一下max_connections。

注意:  1、雖然這裡寫的32000。但實際MySQL伺服器允許的最大連線數16384;  2、除max_connections外,上述其他配置應該根據你們系統自身需要進行配置,不必拘泥;  3、添加了最大允許連線數,對系統消耗增加不大。  4、如果你的mysql用的是my.ini作配置檔案,設定類似,但設定的格式要稍作變通。

用mysqld --help 可以檢視到max_connections 變數。  或者 mysql -uuser -p後mysql>show variables; 也會看到max_connections 。   

下面是修改張老師 的redhat9的方法:

先是mysql -uw01f -p mysql>show variables; 看到max_connections 為100 mysql>exit; vi /etc/my.cnf     [mysqld] set-variable=max_connections=250  #加入這些內容 :wq

/etc/init.d/mysqld restart 好了,行了。

下面的是抄的,我用不了 mysql的最大連線數預設是100, 這個數值對於併發連線很多的資料庫應用是遠遠不夠的,當連線請求大於預設連線數後,就會出現無法連線資料庫的錯誤,因此我們需要把它適當調大一些, 有兩種辦法可以修改最大連線數,一種是修改safe_mysqld,另一種是直接修改原始碼並重新編譯。下面我們就分別介紹這兩種方法:

1.修改safe_mysqld  找到safe_mysqld編輯它,找到mysqld啟動的那兩行,在後面加上引數 :

-O max_connections=1000

例如 :(其中前面有---的是原來的內容,而+++是修改過以後的)  --- safe_mysqld.orig Mon Sep 25 09:34:01 2000  +++ safe_mysqld Sun Sep 24 16:56:46 2000  @@ -109,10 +109,10 @@  if test "$#" -eq 0  then  nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR /  - --skip-locking >> $err_log 2>&1  + --skip-locking -O max_connections=1000 >> $err_log 2>&1  else  nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR /  - --skip-locking "[email protected]" >> $err_log 2>&1  + --skip-locking "[email protected]" -O max_connections=1000 >> $err_log 2>&1  fi  if test ! -f $pid_file # This is removed if normal shutdown  then  然後關閉mysql重啟它,用  /mysqladmin所在路徑/mysqladmin -uroot -p variables  輸入root資料庫賬號的密碼後可看到  | max_connections | 1000 |  即新改動已經生效。

2.修改原始碼

解開MySQL的原始碼,進入裡面的sql目錄修改mysqld.cc找到下面一行:

{ "max_connections", (long*) &max_connections,1000,1,16384,0,1},

把它改為:

{ "max_connections", (long*) &max_connections,1000,1,16384,0,1},

存檔退出,然後./configure ;make;make install可以獲得同樣的效果。