Skip to content

Commit

Permalink
fixbug
Browse files Browse the repository at this point in the history
  • Loading branch information
kinoxyz1 committed Oct 10, 2022
1 parent c26e974 commit 0941afc
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions note/MySQL/MySQL逻辑架构.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,17 @@ Connector 指的是不同语言中, 与 SQL 的交互。MySQL 首先是一个网

连接完成后,如果没有后续操作,这个连接就会处于空闲状态,可以执行 `show processlist` 查询连接信息。例如下图中,`Command` 列显示为 `Sleep`, 就表示这是一个空闲连接。

![查看连接](../../img/mysql/mysql逻辑架构/2.查看连接.png)
```sql
mysql> show processlist;
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 45581 | Waiting on empty queue | NULL |
| 14 | root | localhost | NULL | Query | 0 | init | show processlist |
| 15 | root | localhost | NULL | Sleep | 2 | | NULL |
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
3 rows in set (0.00 sec)
```

如果客户端太长时间没有后续操作,连接器就会自动将它断开。这个参数由: `wait_timeout` 控制,默认是 8 小时。

Expand All @@ -55,7 +65,7 @@ mysql> show variables like 'wait_timeout';

如果所有的连接都是用长链接,MySQL 占用的内存会涨的特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的,这些资源在连接断开的时候才释放,所以如果长连接累积下来,可能导致占用内存太大,被系统强行杀掉(OOM),从现象上就是 MySQL 异常重启了。解决这个的两个方案:
1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
2. 在 MySQ5.7 之后,可以在每次执行一个比较大的操作后,通过 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重新连接和重新做权限校验,但是会将连接恢复到刚刚创建完时的状态。
2. 在 MySQ5.7 之后,可以在每次执行一个比较大的操作后,通过 [mysql_reset_connection](https://dev.mysql.com/doc/c-api/5.7/en/mysql-reset-connection.html) 来重新初始化连接资源。这个过程不需要重新连接和重新做权限校验,但是会将连接恢复到刚刚创建完时的状态。


## 1.3 服务层
Expand Down Expand Up @@ -530,6 +540,5 @@ Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把






0 comments on commit 0941afc

Please sign in to comment.