MySql中的常用參數(shù)查詢
目錄
- 1、超時時間
- 2、查看最大連接數(shù)
- 3、查看當前數(shù)據(jù)庫狀態(tài)
- 總結(jié)
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
:連接響應(yīng)超時時間。服務(wù)器端在這個時間內(nèi)如未連接成功,則會返回連接失敗。wait_timeout
:連接空閑超時時間。與服務(wù)器端無交互狀態(tài)的連接,直到被服務(wù)器端強制關(guān)閉而等待的時間。可以認為是服務(wù)器端連接空閑的時間,空閑超過這個時間將自動關(guān)閉。interactive_timeout
:連接空閑超時時間。與服務(wù)器端無交互狀態(tài)的連接,直到被服務(wù)器端強制關(guān)閉而等待的時間。interactive_timeout
和wait_timeoutu
意義雖然相同,但是有使用對象有本質(zhì)的區(qū)別。interactive_timeout針對交互式連接(比如通過mysql客戶端連接數(shù)據(jù)庫),wait_timeout針對非交互式連接(比如一般在PHP中使用PDO連接數(shù)據(jù)庫,當然你可以設(shè)置CLIENT_INTERACTIVE選項來改變)。所謂的交互式連接,即在mysql_real_connect()函數(shù)中使用了CLIENT_INTERACTIVE選項。net_read_timeout
:數(shù)據(jù)讀取超時時間。在終止讀之前,從一個連接獲得數(shù)據(jù)而等待的時間秒數(shù);當服務(wù)正在從客戶端讀取數(shù)據(jù)時,net_read_timeout控制何時超時。即客戶端執(zhí)行數(shù)據(jù)讀取,等待多少秒仍未執(zhí)行成功時自動斷開連接。net_write_timeout
:數(shù)據(jù)庫寫超時時間。和net_read_timeout意義類似,在終止寫之前,等待多少秒把block寫到連接;當服務(wù)正在寫數(shù)據(jù)到客戶端時,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:則是在連接執(zhí)行時起作用。
MySQL連接超時設(shè)置的問題。默認的wait_timeout 是28800,8個小時。
解決辦法有兩種,
方法一,將連接池中的超時時間設(shè)置的短于這個值(本項目用的spring boot data jpa,默認連接,設(shè)置后不起作用);
方法二,把mysql的這個值設(shè)大一些:在[mysqld]下加wait_timeout = 86400。此時是設(shè)置的全局設(shè)定,可通過命令 show global variables like “%timeout%”;看到變化,而show variables like “%timeout%”;和show session variables like “%timeout%”;仍為原值。
這個值設(shè)置為多大應(yīng)根據(jù)應(yīng)用使用情況來定。太小會導(dǎo)致頻繁超時,太多會導(dǎo)致連接長時間不釋放,也會出錯。所以一方面調(diào)整好這個數(shù)值,一方面采用更好的連接池方案。
2、查看最大連接數(shù)
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的大小應(yīng)該設(shè)置為比Max_used_connections狀態(tài)值大,Max_used_connections狀態(tài)值反映服務(wù)器連接在某個時間段是否有尖峰,如果該值大于max_connections值,代表客戶端至少被拒絕了一次,可以簡單地設(shè)置為符合以下條件:Max_used_connections/max_connections=0.8
3、查看當前數(shù)據(jù)庫狀態(tài)
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 --------------
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持。
