資料庫技術分享:淺談資料庫連接
在資料庫操作過程中,經常會遇到一些非業務邏輯錯誤,這樣的錯誤要求開發人員對於自己正在操作的硬體軟體乃至網路都有一定的了解,這裡說說關於資料庫最大連接數量的那點事兒
在某個項目操作過程中,資料庫使用MySQL,在進行用戶並發訪問測試時,當並發量達到一定程度的時候就會出現程序連接資料庫1040錯誤,1040錯誤的具體描述是:「Can not connect to MySQL server. Too many connections」,也就是過多的資料庫連接數量,這個明顯就不是業務本身的問題,而是資料庫系統配置的問題了。解決這個問題從以下幾個方面進行處理
查看當前資料庫最大連接數量和最大允許連接數量
修改最大連接數量
1. 查看當前資料庫mysql最大連接數量和最大允許連接數量
查看最大連接數量
SHOW VARIABLES LIKE "max_connections";
mysql最大允許連接數量限制 16384 個
2. 設置mysql資料庫最大連接數量
設置最大連接數量有兩種方式(命令行修改 | 配置文件修改)
命令行修改最大連接數量
set global max_connections = 1000
優點:即時生效,運行命令之後直接生效
缺點:如果一旦重啟mysql資料庫服務的話,默認最大連接數量重置
配置文件修改
# 修改mysql的配置文件my.ini
[mysql]
...
max_connections=1000
優點:穩定,可靠,修改完之後永久生效
缺點:修改配置文件的操作方式需要重啟mysql資料庫服務才能生效
3.常見資料庫維護的命令操作
# 查看當前資料庫的連接狀態
show status like "Threads%";
# threads_cached:緩存的連接
# threads_connected:建立的連接數量
# threads_created:創建過的線程數量
# threads_running:激活的連接數量
# 查看當前連接信息,root用戶可以查看所有正在連接的信息
show processlist;
# 查看當前資料庫運行狀態設置
show status;
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 伺服器工作了多少秒。
※你不能不知道的14個大數據專業辭彙
※Swoft 快速上手小貼士
TAG:千鋒JAVA開發學院 |