MySql中的常用參數查詢
目錄
- 1、超時時間
- 2、查看最大連接數
- 3、查看當前數據庫狀態
- 總結
1、超時時間
以下這些配置項單位都是秒,在mysql命令行中可以使用show global variables like '變量名';可查詢配置值。
mysql> show global variables like "%timeout%"; +-----------------------------+----------+ | Variable_name ? ? ? ? ? ? ? | Value ? ?| +-----------------------------+----------+ | connect_timeout ? ? ? ? ? ? | 10 ? ? ? | | delayed_insert_timeout ? ? ?| 300 ? ? ?| | have_statement_timeout ? ? ?| YES ? ? ?| | innodb_flush_log_at_timeout | 1 ? ? ? ?| | innodb_lock_wait_timeout ? ?| 50 ? ? ? | | innodb_rollback_on_timeout ?| OFF ? ? ?| | interactive_timeout ? ? ? ? | 28800 ? ?| | lock_wait_timeout ? ? ? ? ? | 31536000 | | net_read_timeout ? ? ? ? ? ?| 30 ? ? ? | | net_write_timeout ? ? ? ? ? | 60 ? ? ? | | rpl_stop_slave_timeout ? ? ?| 31536000 | | slave_net_timeout ? ? ? ? ? | 60 ? ? ? | | wait_timeout ? ? ? ? ? ? ? ?| 28800 ? ?| +-----------------------------+----------+
connect_timeout
:連接響應超時時間。服務器端在這個時間內如未連接成功,則會返回連接失敗。wait_timeout
:連接空閑超時時間。與服務器端無交互狀態的連接,直到被服務器端強制關閉而等待的時間??梢哉J為是服務器端連接空閑的時間,空閑超過這個時間將自動關閉。interactive_timeout
:連接空閑超時時間。與服務器端無交互狀態的連接,直到被服務器端強制關閉而等待的時間。interactive_timeout
和wait_timeoutu
意義雖然相同,但是有使用對象有本質的區別。interactive_timeout針對交互式連接(比如通過mysql客戶端連接數據庫),wait_timeout針對非交互式連接(比如一般在PHP中使用PDO連接數據庫,當然你可以設置CLIENT_INTERACTIVE選項來改變)。所謂的交互式連接,即在mysql_real_connect()函數中使用了CLIENT_INTERACTIVE選項。net_read_timeout
:數據讀取超時時間。在終止讀之前,從一個連接獲得數據而等待的時間秒數;當服務正在從客戶端讀取數據時,net_read_timeout控制何時超時。即客戶端執行數據讀取,等待多少秒仍未執行成功時自動斷開連接。net_write_timeout
:數據庫寫超時時間。和net_read_timeout意義類似,在終止寫之前,等待多少秒把block寫到連接;當服務正在寫數據到客戶端時,net_write_timeout控制何時超時。slave-net-timeout
:從庫延后同步的時間,當slave認為連接master的連接有問題時,就等待N秒,然后斷開連接,重新連接master
slave-net-timeout在主從同步時從庫上起作用;connect_timeout:在獲取連接階段起作用;interactive_timeout和wait_timeout:在連接空閑階段起作用;net_read_timeout和net_write_timeout:則是在連接執行時起作用。
MySQL連接超時設置的問題。默認的wait_timeout 是28800,8個小時。
解決辦法有兩種,
方法一,將連接池中的超時時間設置的短于這個值(本項目用的spring boot data jpa,默認連接,設置后不起作用);
方法二,把mysql的這個值設大一些:在[mysqld]下加wait_timeout = 86400。此時是設置的全局設定,可通過命令 show global variables like “%timeout%”;看到變化,而show variables like “%timeout%”;和show session variables like “%timeout%”;仍為原值。
這個值設置為多大應根據應用使用情況來定。太小會導致頻繁超時,太多會導致連接長時間不釋放,也會出錯。所以一方面調整好這個數值,一方面采用更好的連接池方案。
2、查看最大連接數
mysql> show global status like "Max_used_connections"; +----------------------+-------+ | Variable_name ? ? ? ?| Value | +----------------------+-------+ | Max_used_connections | 4 ? ? | +----------------------+-------+ 1 row in set (0.00 sec) ? mysql> show variables like "max_connections%"; +-----------------+-------+ | Variable_name ? | Value | +-----------------+-------+ | max_connections | 10000 | +-----------------+-------+ 1 row in set (0.01 sec)
通常max_connections的大小應該設置為比Max_used_connections狀態值大,Max_used_connections狀態值反映服務器連接在某個時間段是否有尖峰,如果該值大于max_connections值,代表客戶端至少被拒絕了一次,可以簡單地設置為符合以下條件:Max_used_connections/max_connections=0.8
3、查看當前數據庫狀態
mysql> status; -------------- mysql ?Ver 14.14 Distrib 5.7.14, for linux-glibc2.5 (x86_64) using ?EditLine wrapper ? Connection id:?? ??? ?17318 Current database:?? ? Current user:?? ??? ?root@localhost SSL:?? ??? ??? ?Not in use Current pager:?? ??? ?stdout Using outfile:?? ??? ?"" Using delimiter:?? ?; Server version:?? ??? ?5.7.14-log MySQL Community Server (GPL) Protocol version:?? ?10 Connection:?? ??? ?Localhost via UNIX socket Server characterset:?? ?utf8 Db ? ? characterset:?? ?utf8 Client characterset:?? ?utf8 Conn. ?characterset:?? ?utf8 UNIX socket:?? ??? ?/tmp/mysql.sock Uptime:?? ??? ??? ?20 hours 2 min 14 sec ? Threads: 5 ?Questions: 118037 ?Slow queries: 0 ?Opens: 1743 ?Flush tables: 1 ?Open tables: 916 ?Queries per second avg: 1.636 --------------
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。