mysql最大連線數第二章
阿新 • • 發佈:2019-02-15
1.檢視
show variables like 'max_connections';
2.顯示當前執行的Query
show processlist
3.檢視當前狀態
show status
Aborted_connects 嘗試已經失敗的MySQL伺服器的連線的次數。
Connections 試圖連線MySQL伺服器的次數。
Created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量。
Delayed_insert_threads 正在使用的延遲插入處理器執行緒的數量。
Delayed_writes 用INSERT DELAYED寫入的行數。
Delayed_errors 用INSERT DELAYED寫入的發生某些錯誤(可能重複鍵值)的行數。
Flush_commands 執行FLUSH命令的次數。
show variables like '%time%';
SET GLOBAL connect_timeout = 15;
set interactive_timeout = 1;
4.設定新的MySQL最大連線數為200:
set GLOBAL max_connections=200
也可以按照如下修改
在 my.cnf 配置檔案裡面修改 max_connections 的值,然後重啟 mysql 就行。如果 my.ini 檔案中沒有找到 max_connections 條目,可自行新增以下條目
max_connections = 200
5.檢視當前連結列表
SHOW FULL PROCESSLIST; SELECT
count(*)
FROM user a
WHERE 1=1
show processlist; 可以顯示前100條連線資訊 show full processlist; 可以顯示全部。隨便說下,如果用普通賬號登入,就只顯示這使用者的。注意命令後有分號
6.檢視當前最大連線數
SHOW STATUS LIKE '%max%';
7.Mysql設定自增長主鍵的初始值
alter table test AUTO_INCREMENT = 200;
8.mysql超時關閉連線設定
檢視
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
設定
set global wait_timeout=864000;
或
/etc/my.cnf檔案,在[mysqld]下方新增文字:
wait_timeout=864000
(1) 檢視慢SQL日誌是否啟用
mysql> show variables like 'log_slow_queries';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | ON |
+------------------+-------+
1 row in set (0.00 sec)
(2) 檢視執行慢於多少秒的SQL會記錄到日誌檔案中
mysql> show variables like 'long_query_time';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 1 |
+-----------------+-------+
1 row in set (0.00 sec)
這裡value=1, 表示1秒
2. 配置my.ini檔案(inux下檔名為my.cnf), 查詢到[mysqld]區段,增加日誌的配置,如下示例(linux沒有引號):
[mysqld]
log="C:/temp/mysql.log"
log_slow_queries="C:/temp/mysql_slow.log"
long_query_time=1
log指示日誌檔案存放目錄;
log_slow_queries指示記錄執行時間長的sql日誌目錄;
long_query_time指示多長時間算是執行時間長,單位s。
Linux下這些配置項應該已經存在,只是被註釋掉了,可以去掉註釋。但直接新增配置項也OK啦。
3.優化
MyISAM在讀操作佔主導的情況下是很高效的。可一旦出現大量的讀寫併發,同InnoDB相比,MyISAM的效率就會直線下降,而且,MyISAM和InnoDB的資料儲存方式也有顯著不同:通常,在MyISAM裡,新資料會被附加到資料檔案的結尾,可如果時常做一些UPDATE,DELETE操作之後,資料檔案就不再是連續的,形象一點來說,就是資料檔案裡出現了很多洞洞,此時再插入新資料時,按預設設定會先看這些洞洞的大小是否可以容納下新資料,如果可以,則直接把新資料儲存到洞洞裡,反之,則把新資料儲存到資料檔案的結尾。之所以這樣做是為了減少資料檔案的大小,降低檔案碎片的產生。但InnoDB裡則不是這樣,在InnoDB裡,由於主鍵是cluster的,所以,資料檔案始終是按照主鍵排序的,如果使用自增ID做主鍵,則新資料始終是位於資料檔案的結尾。
瞭解了這些基礎知識,下面說說MyISAM幾個容易忽視的配置選項:
concurrent_insert:
通常來說,在MyISAM裡讀寫操作是序列的,但當對同一個表進行查詢和插入操作時,為了降低鎖競爭的頻率,根據concurrent_insert的設定,MyISAM是可以並行處理查詢和插入的:
當concurrent_insert=0時,不允許併發插入功能。
當concurrent_insert=1時,允許對沒有洞洞的表使用併發插入,新資料位於資料檔案結尾(預設)。
當concurrent_insert=2時,不管表有沒有洞洞,都允許在資料檔案結尾併發插入。
這樣看來,把concurrent_insert設定為2是很划算的,至於由此產生的檔案碎片,可以定期使用OPTIMIZE TABLE tableName語法優化。
max_write_lock_count:
預設情況下,寫操作的優先順序要高於讀操作的優先順序,即便是先發送的讀請求,後傳送的寫請求,此時也會優先處理寫請求,然後再處理讀請求。這就造成一個問題:一旦我發出若干個寫請求,就會堵塞所有的讀請求,直到寫請求全都處理完,才有機會處理讀請求。此時可以考慮使用max_write_lock_count:
max_write_lock_count=1
有了這樣的設定,當系統處理一個寫操作後,就會暫停寫操作,給讀操作執行的機會。
low-priority-updates:
我們還可以更乾脆點,直接降低寫操作的優先順序,給讀操作更高的優先順序。
low-priority-updates=1
綜合來看,concurrent_insert=2是絕對推薦的,至於max_write_lock_count=1和low-priority-updates=1,則視情況而定,如果可以降低寫操作的優先順序,則使用low-priority-updates=1,否則使用max_write_lock_count=1。
show variables like 'max_connections';
2.顯示當前執行的Query
show processlist
3.檢視當前狀態
show status
具體引數說明
Threads_connected 當前的連線數
Max_used_connections 伺服器啟動後已經同時使用的連線的最大數量。
Aborted_connects 嘗試已經失敗的MySQL伺服器的連線的次數。
Connections 試圖連線MySQL伺服器的次數。
Created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量。
Delayed_insert_threads 正在使用的延遲插入處理器執行緒的數量。
Delayed_writes 用INSERT DELAYED寫入的行數。
Delayed_errors 用INSERT DELAYED寫入的發生某些錯誤(可能重複鍵值)的行數。
Flush_commands 執行FLUSH命令的次數。
show variables like '%time%';
SET GLOBAL connect_timeout = 15;
set interactive_timeout = 1;
4.設定新的MySQL最大連線數為200:
set GLOBAL max_connections=200
也可以按照如下修改
在 my.cnf 配置檔案裡面修改 max_connections 的值,然後重啟 mysql 就行。如果 my.ini 檔案中沒有找到 max_connections 條目,可自行新增以下條目
max_connections = 200
5.檢視當前連結列表
SHOW FULL PROCESSLIST; SELECT
count(*)
FROM user a
WHERE 1=1
show processlist; 可以顯示前100條連線資訊 show full processlist; 可以顯示全部。隨便說下,如果用普通賬號登入,就只顯示這使用者的。注意命令後有分號
6.檢視當前最大連線數
SHOW STATUS LIKE '%max%';
7.Mysql設定自增長主鍵的初始值
alter table test AUTO_INCREMENT = 200;
8.mysql超時關閉連線設定
檢視
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
設定
set global wait_timeout=864000;
或
/etc/my.cnf檔案,在[mysqld]下方新增文字:
wait_timeout=864000
(1) 檢視慢SQL日誌是否啟用
mysql> show variables like 'log_slow_queries';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | ON |
+------------------+-------+
1 row in set (0.00 sec)
(2) 檢視執行慢於多少秒的SQL會記錄到日誌檔案中
mysql> show variables like 'long_query_time';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 1 |
+-----------------+-------+
1 row in set (0.00 sec)
這裡value=1, 表示1秒
2. 配置my.ini檔案(inux下檔名為my.cnf), 查詢到[mysqld]區段,增加日誌的配置,如下示例(linux沒有引號):
[mysqld]
log="C:/temp/mysql.log"
log_slow_queries="C:/temp/mysql_slow.log"
long_query_time=1
log指示日誌檔案存放目錄;
log_slow_queries指示記錄執行時間長的sql日誌目錄;
long_query_time指示多長時間算是執行時間長,單位s。
Linux下這些配置項應該已經存在,只是被註釋掉了,可以去掉註釋。但直接新增配置項也OK啦。
3.優化
MyISAM在讀操作佔主導的情況下是很高效的。可一旦出現大量的讀寫併發,同InnoDB相比,MyISAM的效率就會直線下降,而且,MyISAM和InnoDB的資料儲存方式也有顯著不同:通常,在MyISAM裡,新資料會被附加到資料檔案的結尾,可如果時常做一些UPDATE,DELETE操作之後,資料檔案就不再是連續的,形象一點來說,就是資料檔案裡出現了很多洞洞,此時再插入新資料時,按預設設定會先看這些洞洞的大小是否可以容納下新資料,如果可以,則直接把新資料儲存到洞洞裡,反之,則把新資料儲存到資料檔案的結尾。之所以這樣做是為了減少資料檔案的大小,降低檔案碎片的產生。但InnoDB裡則不是這樣,在InnoDB裡,由於主鍵是cluster的,所以,資料檔案始終是按照主鍵排序的,如果使用自增ID做主鍵,則新資料始終是位於資料檔案的結尾。
瞭解了這些基礎知識,下面說說MyISAM幾個容易忽視的配置選項:
concurrent_insert:
通常來說,在MyISAM裡讀寫操作是序列的,但當對同一個表進行查詢和插入操作時,為了降低鎖競爭的頻率,根據concurrent_insert的設定,MyISAM是可以並行處理查詢和插入的:
當concurrent_insert=0時,不允許併發插入功能。
當concurrent_insert=1時,允許對沒有洞洞的表使用併發插入,新資料位於資料檔案結尾(預設)。
當concurrent_insert=2時,不管表有沒有洞洞,都允許在資料檔案結尾併發插入。
這樣看來,把concurrent_insert設定為2是很划算的,至於由此產生的檔案碎片,可以定期使用OPTIMIZE TABLE tableName語法優化。
max_write_lock_count:
預設情況下,寫操作的優先順序要高於讀操作的優先順序,即便是先發送的讀請求,後傳送的寫請求,此時也會優先處理寫請求,然後再處理讀請求。這就造成一個問題:一旦我發出若干個寫請求,就會堵塞所有的讀請求,直到寫請求全都處理完,才有機會處理讀請求。此時可以考慮使用max_write_lock_count:
max_write_lock_count=1
有了這樣的設定,當系統處理一個寫操作後,就會暫停寫操作,給讀操作執行的機會。
low-priority-updates:
我們還可以更乾脆點,直接降低寫操作的優先順序,給讀操作更高的優先順序。
low-priority-updates=1
綜合來看,concurrent_insert=2是絕對推薦的,至於max_write_lock_count=1和low-priority-updates=1,則視情況而定,如果可以降低寫操作的優先順序,則使用low-priority-updates=1,否則使用max_write_lock_count=1。