查看MySQL最大連接數,當前連接數,執行SQL等


  這次是解決snoar的靜態檢查問題,sonar檢查需要關閉DruidDataSource。 

       為了驗證這個問題,我監控了MySQL的連接情況,SpringBoot項目啟動后,可以看到MySQL的連接數有增加,新增加連接的客戶端ip就是本機的ip。   SpringBoot項目關閉后,MySQL的連接數會減少,本機ip的連接都被釋放。

       MySQL的不同連接對應於不同的客戶端ip和端口,SpringBoot項目關閉后,java進程關閉,正常情況下,端口應該被釋放,之前和MySQL建立的連接也應該被釋放 。

       關閉SpringBoot項目時,不僅是io密集型,應該不要使用kill -9 pid,使用kill pid即可。

       之前我們也解決過 類似問題,多個定時任務一起執行時,發現頁面的操作基本無響應了,找到對應的定時任務,放到凌晨后執行,並且多個定時任務的執行時間也做好間隔時間規避。

 

       為了解決上述問題,查了不少對應的文章,下面的是比較好的,引用一下。

       https://www.cnblogs.com/haciont/p/6277675.html

 

  -- 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   顯示當前正在執行的連接

 

  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; 

  命令: 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
  好了,行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM