国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL優(yōu)化之連接優(yōu)化

2024-07-24 13:12:29
字體:
供稿:網(wǎng)友

上文MySQL優(yōu)化之緩存優(yōu)化 這篇文章中提到了一個很重要的概念,就是show variables是用來表示系統(tǒng)編譯或者配置在my.cnf中的變量值。而show status則稱之為狀態(tài)值,顯示的是當(dāng)前服務(wù)實例運行所具有的狀態(tài)信息,是一個動態(tài)改變的值。因此常用來觀測當(dāng)前MySQl的運行是否正常,如果不正常那么依靠調(diào)整靜態(tài)參數(shù)來提高MySQL的性能。所以明白這兩個概念的不同,是后面調(diào)優(yōu)的基礎(chǔ)。

MySQL 連接優(yōu)化

記得有一次在公司內(nèi)部連接MySQL的時候,總是連接不上。找到DBA后,經(jīng)過排查原因,是當(dāng)前MySQL連接數(shù)滿了,經(jīng)過調(diào)整后,解決了問題。引發(fā)連接數(shù)過多的錯誤原因一般有兩個,第一的確是有很多人在連接MySQL,造成連接數(shù)用完。第二種是max_connections值過小。

1、連接參數(shù)(show variables)

mysql/222822.html">mysql/223450.html">mysql> show variables like '%connect%';+-----------------------------------------------+-----------------+| Variable_name                 | Value      |+-----------------------------------------------+-----------------+| character_set_connection           | utf8      || collation_connection             | utf8_general_ci || connect_timeout                | 10       || disconnect_on_expired_password        | ON       || init_connect                 |         || max_connect_errors              | 100       || max_connections                | 151       || max_user_connections             | 0        || performance_schema_session_connect_attrs_size | 512       |+-----------------------------------------------+-----------------+ 

max_connections是指MySQL服務(wù)實例能夠同時接受的的最大并發(fā)連接數(shù)。MySQL實際上支持最大連接數(shù)加一的算法,保障當(dāng)連接數(shù)用完的時候,超級管理員依然可以和服務(wù)端建立連接,進行管理。

max_user_connections設(shè)置指定賬號的最大并發(fā)連接數(shù)。

max_connect_errors 當(dāng)某臺非法主機惡意連接MySQL服務(wù)端,遭到的錯誤達到設(shè)置值后,MySQL會解決來自該主機的所有連接。但執(zhí)行flush hosts后會清零。

2、連接狀態(tài)(show status)

有一點需要注意的,變量值(show variables)是以小寫字母開頭的,而狀態(tài)值(show status)是以大寫字母開頭。這樣區(qū)分有助于記憶和分類

mysql> show status like '%connections%';+-----------------------------------+-------+| Variable_name           | Value |+-----------------------------------+-------+| Connection_errors_max_connections | 0   || Connections            | 197  || Max_used_connections       | 2   |+-----------------------------------+-------+

Connection_errors_max_connections 當(dāng)MySQL的最大并發(fā)數(shù)大于系統(tǒng)變量(show variables)中max_connections的最大并發(fā)數(shù),因此而被拒絕的次數(shù),將會記錄在這個變量里。如果Connection_error_max_connections值比較大,則說明當(dāng)前系統(tǒng)并發(fā)比較高,要考慮調(diào)大max_connections的值。

Connections表示MySQL從啟動至今,成功建立連接的連接數(shù),這個值是不斷累加的。

Max_used_connections表示MySQL從啟動至今,同一時刻并發(fā)的連接數(shù),取得是最大值。如果這個值大于 max_connections則表明系統(tǒng)經(jīng)常處于高并發(fā)的狀態(tài),應(yīng)該考慮調(diào)大最大并發(fā)連接數(shù)。

3、連接線程參數(shù)(thread variabls and status)

mysql> show variables like 'thread%';+--------------------+---------------------------+| Variable_name   | Value           |+--------------------+---------------------------+| thread_cache_size | 9             || thread_concurrency | 10            || thread_handling  | one-thread-per-connection || thread_stack    | 262144          |+--------------------+---------------------------+

thread_cache_size 設(shè)置連接線程緩存的數(shù)目。這個緩存相當(dāng)于MySQL線程的緩存池(thread cache pool),將空閑的連接線程放入連接池中緩存起來,而非立即銷毀。當(dāng)有新的連接請求時,如果連接池中有空閑的連接,則直接使用。否則要重新創(chuàng)建線程。創(chuàng)建線程是一個不小的系統(tǒng)開銷。MySQL的這部分線程處理和Nginx 的線程處理有異曲同工之妙,以后介紹Nginx的線程處理時,會拿來做對比。

thread_handling 默認值是: one-thread-per-connection 表示為每個連接提供或者創(chuàng)建一個線程來處理請求,直至請求完畢,連接銷毀或者存入緩存池。當(dāng)值是no-threads 時,表示在始終只提供一個線程來處理連接,一般是單機做測試使用的。

thread_stack stack 是堆的意思,由PHP 進程詳解這篇博客,知道進程和線程都是有唯一的ID的,進程的ID系統(tǒng)會維護,二線程的ID,則由具體的線程庫區(qū)維護,當(dāng)進程或者線程休眠的時候,進程的上下文信息要在內(nèi)存中開辟出一塊區(qū)域,保存進程的上下文信息,以便于迅速喚醒程序。默認為MySQL的每個線程設(shè)置的堆棧大小為:262144/1024=256k

查看線程狀態(tài)信息

mysql> show status like 'Thread%';+-------------------+-------+| Variable_name   | Value |+-------------------+-------+| Threads_cached  | 1   || Threads_connected | 1   || Threads_created  | 2   || Threads_running  | 1   |+-------------------+-------+

Thread_cached 當(dāng)前線程池的線程數(shù)

Thread_connected 當(dāng)前的連接數(shù)

Thread_cached: 當(dāng)前連接線程創(chuàng)建數(shù), 如果這個值過高,可以調(diào)整threadcachesize 也就是調(diào)整線程緩存池的大小。

Thred_runnint: 當(dāng)前活躍的線程數(shù)。

連接請求堆棧

MySQL在很短的時間內(nèi),突然收到很多的連接請求時,MySQL會將不能來得及處理的連接請求保存在堆棧中,以便MySQL后續(xù)處理。back_log參數(shù)設(shè)置了堆棧的大小,可以通過如下命令查看:

mysql> show variables like 'back_log';+---------------+-------+| Variable_name | Value |+---------------+-------+| back_log   | 80  |+---------------+-------+

連接異常

mysql> show status like 'Aborted%';+------------------+-------+| Variable_name  | Value |+------------------+-------+| Aborted_clients | 0   || Aborted_connects | 219  |+------------------+-------+

Aborted_clients MySQL 客戶機被異常關(guān)閉的次數(shù)。

Aborted_connects 試圖連接到MySQL服務(wù)器而失敗的連接次數(shù)。

other

mysql> show status like 'Slow%';+---------------------+-------+| Variable_name    | Value |+---------------------+-------+| Slow_launch_threads | 0   || Slow_queries    | 0   |+---------------------+-------+
mysql> show variables like 'slow_launch_time';+------------------+-------+| Variable_name  | Value |+------------------+-------+| slow_launch_time | 2   |+------------------+-------+

Slow_lunch_threads 創(chuàng)建線程的時間過長,超過slow_launch_time的設(shè)定值,則會記錄。

可以通過使用 Connection_error%來查看連接的錯誤狀態(tài)信息:

mysql> show status like 'Connection_error%';+-----------------------------------+-------+| Variable_name           | Value |+-----------------------------------+-------+| Connection_errors_accept     | 0   || Connection_errors_internal    | 0   || Connection_errors_max_connections | 0   || Connection_errors_peer_address  | 0   || Connection_errors_select     | 0   || Connection_errors_tcpwrap     | 0   |+-----------------------------------+-------+

Connection_errors_peer_address 查找MySQL客戶機IP地址是發(fā)生的錯誤數(shù)。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丹东市| 永州市| 永福县| 三明市| 隆子县| 宝清县| 阳西县| 祁阳县| 双辽市| 道孚县| 吴旗县| 泽普县| 罗源县| 东阿县| 红原县| 金平| 若羌县| 仁布县| 久治县| 扶沟县| 彭阳县| 龙江县| 通江县| 岳阳县| 沽源县| 固原市| 临海市| 濉溪县| 杭锦后旗| 德格县| 黑河市| 桃源县| 巨鹿县| 汕头市| 出国| 华宁县| 石嘴山市| 抚宁县| 青川县| 咸丰县| 临夏县|