共計 3637 個字符,預計需要花費 10 分鐘才能閱讀完成。
這篇文章給大家介紹 mysql 連接數滿如何查看 sql 及命令,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1:使用 root 登錄 mysql
mysql -uroot -p****
2:查看 mysql 連接數設置
show variables like %max_connections%
3:修改連接數設置
set GLOBAL max_connections=500
4:列出連接數
方法一:登錄 mysql 后執行
mysql -uroot -p****
show full processlist;
方法二:操作系統執行
mysqladmin -uroot -p**** processlist
方法三:通過動態視圖查詢
SELECT *
FROM information_schema.processlist
WHERE user = me and state IS NOT NULL;
查看客戶端的連接數:
select substring_index(host, : ,1),count(*) from information_schema. processlist group by substring_index(host, : ,1);
show variables like %innodb_thread_concurrency%
列出結果如下:
id:
mysql 線程 id
command:
顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect)
time:
這個狀態持續的時間,單位是秒。
info 列:
顯示這個 sql 語句,因為長度有限,所以長的 sql 語句就顯示不全,但是一個判斷問題語句的重要依據。
state 列:
語句執行的某個狀態一個 sql 語句,以查詢為例,可能需要經過 copying to tmp table,Sorting result,Sending data 等狀態才可以完成。狀態如下:
Checking table
正在檢查數據表(這是自動的)。
Closing tables
正在將表中修改的數據刷新到磁盤中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁盤空間是否已經滿了或者磁盤是否正處于重負中。
Connect Out
復制從服務器正在連接主服務器。
Copying to tmp table on disk
由于臨時結果集大于 tmp_table_size,正在將臨時表從內存存儲轉為磁盤存儲以此節省內存。
Creating tmp table
正在創建臨時表以存放部分查詢結果。
deleting from main table
服務器正在執行多表刪除中的第一部分,剛刪除第一個表。
deleting from reference tables
服務器正在執行多表刪除中的第二部分,正在刪除其他表的記錄。
Flushing tables
正在執行 FLUSH TABLES,等待其他線程關閉數據表。
Killed
發送了一個 kill 請求給某線程,那么這個線程將會檢查 kill 標志位,同時會放棄下一個 kill 請求。MySQL 會在每次的主循環中檢查 kill 標志 位,不過有些情況下該線程可能會過一小段才能死掉。如果該線程程被其他線程鎖住了,那么 kill 請求會在鎖釋放時馬上生效。
Locked
被其他查詢鎖住了。
Sending data
正在處理 SELECT 查詢的記錄,同時正在把結果發送給客戶端。
Sorting for group
正在為 GROUP BY 做排序。
Sorting for order
正在為 ORDER BY 做排序。
Opening tables
這個過程應該會很快,除非受到其他因素的干擾。例如,在執 ALTER TABLE 或 LOCK TABLE 語句行完以前,數據表無法被其他線程打開。正嘗試打開一個表。
Removing duplicates
正在執行一個 SELECT DISTINCT 方式的查詢,但是 MySQL 無法在前一個階段優化掉那些重復的記錄。因此,MySQL 需要再次去掉重復的記錄,然后再把結果發送給客戶端。
Reopen table
獲得了對一個表的鎖,但是必須在表結構修改之后才能獲得這個鎖。已經釋放鎖,關閉數據表,正嘗試重新打開數據表。
Repair by sorting
修復指令正在排序以創建索引。
Repair with keycache
修復指令正在利用索引緩存一個一個地創建新索引。它會比 Repair by sorting 慢些。
Searching rows for update
正在講符合條件的記錄找出來以備更新。它必須在 UPDATE 要修改相關的記錄之前就完成了。
Sleeping
正在等待客戶端發送新請求.
System lock
正在等待取得一個外部的系統鎖。如果當前沒有運行多個 mysqld 服務器同時請求同一個表,那么可以通過增加 –skip-external-locking 參數來禁止外部系統鎖。
Upgrading lock
INSERT DELAYED 正在嘗試取得一個鎖表以插入新記錄。
Updating
正在搜索匹配的記錄,并且修改它們。
User Lock
正在等待 GET_LOCK()。
Waiting for tables
該線程得到通知,數據表結構已經被修改了,需要重新打開數據表以取得新的結構。然后,為了能的重新打開數據表,必須等到所有其他線程關閉這個表。以下幾種 情況下會產生這個通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。
waiting for handler insert
INSERT DELAYED 已經處理完了所有待處理的插入操作,正在等待新的請求。
大部分狀態對應很快的操作,只要有一個線程保持同一個狀態好幾秒鐘,那么可能是有問題發生了,需要檢查一下。
5:查看連接狀態
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 服務器工作了多少秒。
6:殺線程:
kill id
select concat (kill , ,id,),t.*
from information_schema.processlist t
where user= xxxx
7:通過 linux 命令查看哪些 pid 使用了端口
netstat -anp |grep 3306
freebsd 系統使用 sockstat
關于 mysql 連接數滿如何查看 sql 及命令就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。