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

首頁 > 數據庫 > MySQL > 正文

MySQL thread_stack連接線程的優化

2024-07-24 13:12:58
字體:
來源:轉載
供稿:網友

MySQL連接不僅能通過網絡方式,還可以通過命名管道的方式,不論是哪種方式連接MySQL,在MySQL中都是通過線程的方式管理所有客戶端請求的。每一個客戶端連接都會有一個與之對應的連接線程。在MySQL中實現了一個Thread Cache池,將空閑的連接線程存放其中,而不是完成請求后就銷毀。這樣,當有新的連接請求時,MySQL首先會檢查Thread Cache中是否存在空閑連接線程,如果存在則取出來直接使用,如果沒有空閑連接線程,才創建新的連接線程。具體參數:
Thread_cache_size:Thread Cache池中應該存放的連接線程數。
Thread_stack:每個連接線程被創建時,MySQL給它分配的內存大小。當MySQL創建一個新的連接線程時,需要給它分配一定大小的內存堆棧空間,以便存放客戶端的請求的Query及自身的各種狀態和處理信息。
查看連接線程相關的系統變量的設置值: show variables like 'thread%';

mysql> show variables like 'thread%';
+-------------------+--------+
| Variable_name | Value |
+-------------------+--------+
| thread_cache_size | 32 |
| thread_stack | 196608 |
+-------------------+--------+
2 rows in set (0.00 sec)

如圖,系統設置了Thread Cache池最多將緩存25個連接線程,每個連接線程創建之初,系統分配192KB的內存堆棧給它。
查看系統被連接的次數及當前系統中連接線程的狀態值

mysql> show status like 'connections';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections | 620 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show status like '%thread%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| Delayed_insert_threads | 0 |
| Slow_launch_threads | 0 |
| Threads_cached | 3 |
| Threads_connected | 4 |
| Threads_created | 7 |
| Threads_running | 1 |
+------------------------+-------+
6 rows in set (0.00 sec)

系統啟動到現在共接受到客戶端的連接620次,共創建了7個連接線程,當前有1個連接線程處于和客戶端連接的狀態,而3個連接狀態的線程中只有一個處于 active 狀態,即只有一個正在處理客戶端提交的請求,。而在Thread Cache池中共緩存了3個連接線程。

Thread Cache 命中率:
Thread_Cache_Hit = (Connections - Threads_created) / Connections * 100%;
一般在系統穩定運行一段時間后,Thread Cache命中率應該保持在90%左右才算正常。

實際應用:

針對16G/32G的機器,一般設置 512K

當然如果遇到下面的錯誤提示就應該考慮增加這個值了。

mysql-debug: Thread stack overrun

bug info

報錯信息:
java.sql.SQLException: Thread stack overrun: 5456 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.

官方相應信息:

The default (192KB) is large enough for normal operation. If the thread stack size is too small, it limits the complexity of the SQL statements that the server can handle, the recursion depth of stored procedures, and other memory-consuming actions

可以使用

show variables where `variable_name` = 'thread_stack';

查詢當前數據庫的默認線程棧的大小,一般情況下都能正常使用,但是當查詢語句或者存儲過程復雜時會報Thread stack overrun錯誤,此時只要修改默認配置就可以。

解決

windows: 修改mysql安裝目錄下的my-small.ini或者my.ini設置為256k,或者更大,然后重啟服務

[mysqld]
thread_stack = 256k
linux: 同樣要修改配置文件,但是!!!,不是安裝目錄下的配置文件,是/etc/my.cnf,只有這個文件才能生效,然后重啟服務service mysql restart

[mysqld]
thread_stack = 256k

 

注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂川县| 定结县| 大理市| 会同县| 左贡县| 海阳市| 霍林郭勒市| 绍兴县| 兴义市| 弋阳县| 巢湖市| 科技| 筠连县| 水富县| 同心县| 千阳县| 湘阴县| 平湖市| 尼木县| 东乌珠穆沁旗| 金乡县| 亳州市| 巨野县| 门头沟区| 英山县| 拉萨市| 阳原县| 安阳县| 上栗县| 宁夏| 勐海县| 鹿邑县| 永修县| 门源| 垣曲县| 兴安县| 精河县| 兖州市| 郑州市| 鹤峰县| 莱芜市|