成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

GreatSQL連接數(shù)被打滿的三種緊急解決方案

數(shù)據(jù)庫 其他數(shù)據(jù)庫
使用數(shù)據(jù)庫時(shí),偶爾會出現(xiàn)數(shù)據(jù)庫連接數(shù)飆升的場景,最嚴(yán)重的情況是連接打滿,root 用戶無法獲取到連接,登陸數(shù)據(jù)庫失敗。這時(shí)候無法登錄數(shù)據(jù)庫kill 掉相關(guān)的數(shù)據(jù)連接,影響數(shù)據(jù)庫的穩(wěn)定性。

背景

使用數(shù)據(jù)庫時(shí),偶爾會出現(xiàn)數(shù)據(jù)庫連接數(shù)飆升的場景,最嚴(yán)重的情況是連接打滿,root 用戶無法獲取到連接,登陸數(shù)據(jù)庫失敗。這時(shí)候無法登錄數(shù)據(jù)庫kill 掉相關(guān)的數(shù)據(jù)連接,影響數(shù)據(jù)庫的穩(wěn)定性。下面將對這類的故障的處理進(jìn)行詳述。

場景復(fù)現(xiàn)

  1. 設(shè)置max_connections 為500
greatsql> SET GLOBAL max_connections=500; 
Query OK, 0 rows affected (0.00 sec)
greatsql> SHOW variables LIKE '%max_connections%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 500   |
+------------------------+-------+
1 rows in set (0.01 sec)

2. 使用sysbench 模擬并發(fā)連接

準(zhǔn)備測試數(shù)據(jù)
$ sysbench oltp_read_write --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=yourusername --mysql-password=yourpassword --mysql-db=sysbench_test --tables=10 --table-size=10000 prepare
執(zhí)行測試
$ sysbench oltp_read_write --mysql-host=127.0.0.1  --mysql-port=3306 --mysql-user=yourusername --mysql-password=yourpassword --mysql-db=sysbench_test --tables=10 --table-size=10000 --time=600 --threads=500 --report-interval=10 run

3. 嘗試登錄數(shù)據(jù)庫報(bào)錯(cuò)

$ /greatsql/svr/greatsql/bin/mysql -h127.0.0.1 -uroot -p
ERROR 1040 (HY000): Too many connections

場景分析

方案1:使用 admin_port 進(jìn)行故障處理

從GreatSQL 8.0起,GreatSQL 支持在配置文件配置admin_portadmin_address,這兩個(gè)參數(shù)都是靜態(tài)參數(shù),不支持動態(tài)修改。admin_address沒有默認(rèn)值,如果沒有顯式開啟,GreatSQL 不會維護(hù)任何的管理接口。admin_port即為管理接口連接TCP/IP的端口號,默認(rèn)值為33062。

注意如果admin_address未設(shè)置,admin_port也將無效。

  • 查看配置文件是否配置了admin_addressadmin_port
$cat /greatsql/conf/greatsql.cnf | grep admin
admin_address='127.0.0.1'
admin_port=3806
  • 使用admin_port  和admin_address嘗試登錄數(shù)據(jù)庫,登錄成功。
$ /greatsql/svr/greatsql/bin/mysql -h127.0.0.1 -uroot -p -P3806
greatsql > SELECT count(*),User FROM information_schema.processlist GROUP BY 2 ;
+----------+-----------------+
| count(*) | User            |
+----------+-----------------+
|        1 | root            |
|      500 | test_user       |
+----------+-----------------+
1 row in set (0.00 sec)
  • 使用kill 將特定條件的連接殺掉,如果處于業(yè)務(wù)高峰期,也可以先使用SET GLOBAL max_connections=[value]臨時(shí)調(diào)大連接數(shù),要注意此時(shí)資源的負(fù)載情況。 下面表示的是查找出語句正在運(yùn)行中且執(zhí)行時(shí)間超過100s,用戶叫test_user 的id 并拼裝成kill 語句。請結(jié)合實(shí)際場景進(jìn)行條件調(diào)整。
greatsql> SELECT concat("kill ",id,";") FROM information_schema.processlist 
WHERE info IS NOT NULL  
AND command != 'sleep'
AND time>100
AND USER ='test_user';

方案2:GDB 在線關(guān)閉 TCP SOCKET

上述演示是最為順利的情況,但是不妨假設(shè),如果未設(shè)置admin_address 和admin_port ,難道只有剩下數(shù)據(jù)庫重啟這種方式了嗎?

其實(shí)不然,GreatSQL 默認(rèn)使用 TCP/IP 進(jìn)行網(wǎng)絡(luò)連接,那是否可以把實(shí)例上由遠(yuǎn)程機(jī)器請求的部分 TCP socket 連接 kill 掉,但保持?jǐn)?shù)據(jù)庫進(jìn)程的運(yùn)行,以騰出部分連接數(shù)供 root 用戶登錄呢?

通過查閱資料, gdb attach 剛好能滿足我們的設(shè)想:gdb attach 是 GDB(GNU 調(diào)試器)中的一個(gè)命令,用于附加(Attach)到一個(gè)正在運(yùn)行的進(jìn)程,而關(guān)閉一個(gè) SOCKET,只要調(diào)用 close 函數(shù)就可以了。簡單來說就是使用gdb attach 到進(jìn)程上下文,然后 call close($fd)

不過需要注意的是,gdb attach 會暫停目標(biāo)進(jìn)程的所有線程。對于生產(chǎn)環(huán)境中需要持續(xù)運(yùn)行的進(jìn)程(如服務(wù)、數(shù)據(jù)庫、實(shí)時(shí)系統(tǒng)等),這種暫停可能導(dǎo)致服務(wù)中斷或超時(shí)。且gdb 需要較大的性能開銷,進(jìn)程的運(yùn)行速度會顯著下降,需要經(jīng)過謹(jǐn)慎評估后再使用此方式。

繼續(xù)復(fù)現(xiàn)一個(gè)連接數(shù)打滿,但是未啟用admin_address和 admin_port 的場景,此時(shí)嘗試用管理員登錄報(bào)錯(cuò)ERROR 1040 (HY000): Too many connections 。

  1. 通過 netstat 反查數(shù)據(jù)庫的進(jìn)程號為18979
$ netstat -nltp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      18979/mysqld

2. 使用 lsof 找到進(jìn)程號18979的文件描述,并找到對應(yīng)的 socket

$ lsof -np 18979
COMMAND  PID    USER   FD      TYPE             DEVICE   SIZE/OFF     NODE NAME
mysqld 18979 greatsql  cwd       DIR                8,2       4096  4971025 /greatsql/dbdata/data3306/data
mysqld 18979 greatsql  rtd       DIR                8,2       4096        2 /
mysqld 18979 greatsql  txt       REG                8,2 1241425104  4971271 /greatsql/svr/GreatSQL-8.0.32-27-Linux-glibc2.17-x86_64/bin/mysqld
mysqld 18979 greatsql  mem       REG                8,2      37216   688174 /usr/lib64/libnss_sss.so.2
...
mysqld 18979 greatsql  371u     IPv6           31132193        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40694 (ESTABLISHED)
mysqld 18979 greatsql  372u     IPv6           31132194        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40698 (ESTABLISHED)
mysqld 18979 greatsql  373u     IPv6           31132195        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40700 (ESTABLISHED)
mysqld 18979 greatsql  374u     IPv6           31132196        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40702 (ESTABLISHED)
mysqld 18979 greatsql  375u     IPv6           31132197        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40704 (ESTABLISHED)
mysqld 18979 greatsql  376u     IPv6           31132198        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40706 (ESTABLISHED)
mysqld 18979 greatsql  377u     IPv6           31132201        0t0      TCP 172.17.134.208:mysql->172.17.139.57:40708 (ESTABLISHED)
...

其中NODE NAME 有(ESTABLISHED)表示兩臺主機(jī)TCP連接已經(jīng)成功建立。找到對應(yīng)的 FD,并記錄下來

3. 使用 gdb 連接到進(jìn)程,并關(guān)閉 socket 連接

$ gdb -p 18979
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
Copyright (C) 2013 Free Software Foundation, Inc
....
Loaded symbols for /greatsql/svr/greatsql/lib/mysql/libjemalloc.so
Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.
$ (gdb) call close(371u)
$1 = 0
$ (gdb) call close(372u)
$1 = 0
....

4. 查看數(shù)據(jù)庫進(jìn)程,并再次嘗試登錄數(shù)據(jù)庫,登錄成功。

$ ps -ef | grep mysql
greatsql  18979     1 99 13:30 ?        00:48:41 /greatsql/svr/greatsql/bin/mysqld --defaults-file=/greatsql/conf/greatsql.cnf

方案3:預(yù)防性設(shè)置 max_user_connections

以上的情況為出現(xiàn)問題的時(shí)候的緊急處理,但作為DBA,保障線上穩(wěn)定性為第一前提,連接數(shù)打滿已經(jīng)是一個(gè)較為糟糕的情況了。且前文描述的是數(shù)據(jù)庫大版本為 8.0 后才開始支持admin_address ,admin_port  作為突發(fā)情況的緊急處理。但如果GreatSQL 5.7 或者更低的情況, 如何去保障生產(chǎn)的穩(wěn)定性呢?

GreatSQL 還有一個(gè)參數(shù)max_user_connections  ,我們來比較max_user_connections  和max_connections 的區(qū)別

  • max_connections:代表允許連接數(shù)據(jù)庫的所有用戶的連接數(shù)總和
  • max_user_connections:代表允許單個(gè)用戶的連接數(shù)最大值,即并發(fā)值

出故障的時(shí)候,往往是同一個(gè)用戶頻繁的申請連接,那如果我們把單個(gè)用戶的最大連接數(shù)調(diào)整到比最大連接數(shù)再小一點(diǎn)的值,確保管理員賬號有足夠的連接數(shù)進(jìn)行突發(fā)故障的處理。 也可以有效減少連接打滿的情況。且可以動態(tài)調(diào)整,可以使用SET GLOBAL max_user_connections=[value]生效。除此之外,該參數(shù)可針對特定用戶設(shè)置 :如ALTER USER 'test_user'@'%' WITH MAX_USER_CONNECTIONS 100;

總結(jié)

  1. 無論對于5.7 還是8.0,建議設(shè)置max_user_connections降低連接數(shù)打滿的風(fēng)險(xiǎn)
  2. 對于8.0 版本,可以通過配置增加admin_addressadmin_port來啟用管理接口,以應(yīng)對突發(fā)的情況。
  3. 如果出現(xiàn)連接數(shù)打滿且未啟用管理端口的情況,可以使用gdb attach在線關(guān)掉部分 socket,以避免數(shù)據(jù)庫的重啟。但需要注意gdb attach對機(jī)器性能的開銷和 gdb 運(yùn)行時(shí)數(shù)據(jù)庫的所有線程都會暫停,請?jiān)u估后再使用該方式。
  4. 監(jiān)控可以加上對連接數(shù)的監(jiān)控,達(dá)到閾值時(shí)告警出來,提前介入處理。
  5. 事后應(yīng)排查連接數(shù)打滿的原因,和業(yè)務(wù)協(xié)調(diào)優(yōu)化措施,建議采用線程池等技術(shù)提前規(guī)避連接數(shù)飆高的場景。
責(zé)任編輯:武曉燕 來源: GreatSQL社區(qū)
相關(guān)推薦

2010-05-24 11:00:18

2010-11-09 13:37:26

SQLSERVER查詢

2024-08-07 08:21:05

2010-09-30 14:40:45

2011-07-21 10:22:36

OLEDBAccessDatab

2011-05-12 14:50:03

2020-08-20 20:51:17

打散算法打散法原算法

2020-03-31 16:13:26

分布式事務(wù)方案TCC

2010-09-13 15:41:23

sql server數(shù)

2015-10-21 14:23:08

反模式持續(xù)部署自動化運(yùn)維

2010-09-10 12:59:33

DIV嵌套CSS

2023-08-01 07:42:33

Redis數(shù)據(jù)項(xiàng)目

2025-02-04 12:05:10

2010-04-23 16:26:30

Oracle并發(fā)連接數(shù)

2025-05-29 02:10:00

2010-04-26 15:00:32

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

2018-12-03 12:05:17

菲數(shù)科技解決方案

2012-05-04 08:03:21

Windows

2025-06-12 07:05:11

2025-06-12 08:50:25

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 米奇7777狠狠狠狠视频 | 亚洲综合资源 | 亚洲精品一二三区 | 国产精品久久久久久 | 成人自拍视频 | 中文在线观看视频 | 精品国产99 | 欧美激情在线精品一区二区三区 | 可以免费观看的av | 色一级| 午夜电影网站 | 欧美亚洲视频 | 国产成人在线视频免费观看 | 四虎影院新地址 | 久久久国产精品视频 | 国产精品久久久久久模特 | www.亚洲精品 | 日韩精品一区二区三区中文字幕 | 国产99在线 | 欧美 | 欧美激情一区二区三级高清视频 | 男女激情网站免费 | 91极品视频| 日本精品裸体写真集在线观看 | av网站在线看 | 中文字幕在线看 | 人人射人人插 | 成人午夜精品 | 成人黄色三级毛片 | 九九精品在线 | 在线观看黄视频 | 亚洲国产精品成人无久久精品 | 久久一区二区免费视频 | 一色一黄视频 | 精品亚洲一区二区三区 | 久久久噜噜噜久久中文字幕色伊伊 | 一区二区三区在线免费 | 国产精品精品 | 欧美精品一区二区蜜桃 | 亚洲欧美日韩网站 | 狠狠亚洲 |