日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql许多连接错误而被阻止_怎样解决mysql连接过多的错误?

發(fā)布時間:2023/12/4 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql许多连接错误而被阻止_怎样解决mysql连接过多的错误? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

設置max_execution_time 來阻止太長的讀SQL。那可能存在的問題是會把所有長SQL都給KILL 掉。有些必須要執(zhí)行很長時間的也會被誤殺。

自己寫個腳本檢測這類語句,比如order by rand(), 超過一定時間用Kill query thread_id 給殺掉。

那能不能不要殺掉而讓他正常運行,但是又不影響其他的請求呢?

那mysql 8.0 引入的資源組(resource group,后面簡寫微RG)可以基本上解決這類問題。

比如我可以用 RG 來在SQL層面給他限制在特定的一個CPU核上,這樣我就不管他,讓他繼續(xù)運行,如果有新的此類語句,讓他排隊好了。

為什么說基本呢?目前只能綁定CPU資源,其他的暫時不行。

那我來演示下如何使用RG。

創(chuàng)建一個資源組user_ytt. 這里解釋下各個參數(shù)的含義,

type = user 表示這是一個用戶態(tài)線程,也就是前臺的請求線程。如果type=system,表示后臺線程,用來限制mysql自己的線程,比如Innodb purge thread,innodb read thread等等。

vcpu 代表cpu的邏輯核數(shù),這里0-1代表前兩個核被綁定到這個RG。可以用lscpu,top等列出自己的CPU相關信息。

thread_priority 設置優(yōu)先級。user 級優(yōu)先級設置大于0。

mysqlmysql> create resource group user_ytt type = user ?vcpu = 0-1 thread_priority=19 enable;Query OK, 0 rows affected (0.03 sec)

RG相關信息可以從 information_schema.resource_groups 系統(tǒng)表里檢索。

mysqlmysql> select * from information_schema.resource_groups;+---------------------+---------------------+------------------------+----------+-----------------+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |+---------------------+---------------------+------------------------+----------+-----------------+| USR_default ? ? ? ? | USER ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ?1 | 0-3 ? ? ?| ? ? ? ? ? ? ? 0 || SYS_default ? ? ? ? | SYSTEM ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ?1 | 0-3 ? ? ?| ? ? ? ? ? ? ? 0 || user_ytt ? ? ? ? ? ?| USER ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ?1 | 0-1 ? ? ?| ? ? ? ? ? ? ?19 |+---------------------+---------------------+------------------------+----------+-----------------+3 rows in set (0.00 sec)

我們來給語句select guid from t1 group by left(guid,8) order by rand() 賦予RG user_ytt。

mysql> show processlist;+-----+-----------------+-----------+------+---------+-------+------------------------+-----------------------------------------------------------+| Id ?| User ? ? ? ? ? ?| Host ? ? ?| db ? | Command | Time ?| State ? ? ? ? ? ? ? ? ?| Info ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|+-----+-----------------+-----------+------+---------+-------+------------------------+-----------------------------------------------------------+| ? 4 | event_scheduler | localhost | NULL | Daemon ?| 10179 | Waiting on empty queue | NULL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|| 240 | root ? ? ? ? ? ?| localhost | ytt ?| Query ? | ? 101 | Creating sort index ? ?| select guid from t1 group by left(guid,8) order by rand() || 245 | root ? ? ? ? ? ?| localhost | ytt ?| Query ? | ? ? 0 | starting ? ? ? ? ? ? ? | show processlist ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|+-----+-----------------+-----------+------+---------+-------+------------------------+-----------------------------------------------------------+3 rows in set (0.00 sec)

找到連接240對應的thread_id。

mysqlmysql> select thread_id from performance_schema.threads where processlist_id = 240;+-----------+| thread_id |+-----------+| ? ? ? 278 |+-----------+1 row in set (0.00 sec)

給這個線程278賦予RG user_ytt。沒報錯就算成功了。

mysqlmysql> set resource group user_ytt for 278;Query OK, 0 rows affected (0.00 sec)

當然這個是在運維層面來做的,我們也可以在開發(fā)層面結合 MYSQL HINT 來單獨給這個語句賦予RG。比如:

mysqlmysql> select /*+ resource_group(user_ytt) */guid from t1 group by left(guid,8) order by rand()....8388602 rows in set (4 min 46.09 sec)

RG的限制:

Linux 平臺上需要開啟 CAPSYSNICE 特性。比如我機器上用systemd 給mysql 服務加上

systemctl edit mysql@80 [Service]AmbientCapabilities=CAP_SYS_NICE

mysql 線程池開啟后RG失效。

freebsd,solaris 平臺thread_priority 失效。

目前只能綁定CPU,不能綁定其他資源。

總結

以上是生活随笔為你收集整理的mysql许多连接错误而被阻止_怎样解决mysql连接过多的错误?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。