MySQL连接资源占用与状态分析(v1)

来源:互联网 发布:古风mmd动作数据 编辑:程序博客网 时间:2024/04/29 22:24
 
1 怎么查看连接信息
MySQL一个连接就是线程。
查看连接状态:
mysql> show status;
Threads_cached           | 0     |
| Threads_connected        | 1     |              //正在连接的连接数
| Threads_created          | 3     |              //已经创建过的连接数
| Threads_running          | 1     |              //正在运行的连接数
| Uptime                   | 22947 |
 
查看连接参数:
mysql> show variables;
| max_connections                 | 16384       //允许的最大连接数
 
查看连接线程状态:
mysql> show processlist;
+----+-----------+-----------+------+---------+------+-------+------------------+
| Id | User      | Host      | db   | Command | Time | State | Info             |
+----+-----------+-----------+------+---------+------+-------+------------------+
| 3 | denny | localhost | NULL | Query   |    0 | NULL | show processlist |
+----+-----------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)
 
2 连接资源的分配
key_buffer_size      指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。read_buffer_size = 4M 读查询操作所能使用的缓冲区大小。
join_buffer_size = 8M 联合查询操作所能使用的缓冲区大小.
sort_buffer_size 
  
注意:每个连接使用具体线程的空间, 下面参数每个连接独占:
*         堆栈(默认64KB,变量thread_stack)
*         连接缓存区(变量net_buffer_length)
*         结果缓存区(变量net_buffer_length)
接缓存区和结果缓存区可以根据需要动态扩充到max_allowed_packet。
max_allowed_packet = 4M
如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。
 
对于每个打开的MyISAM表,索引文件打开一次;数据文件为每个并行运行的线程打开一次。对于每个并行线程,将分配一个表结构、一个每个列的列结构和大小为3 * N的缓存区(其中N是最大行的长度,而不是计算BLOB列)。一个BLOB列需要5至8个字节加上BLOB数据的长度。MyISAM 存储引擎维护一个额外的行缓存区供内部应用。
当并行执行的线程结束时,FLUSH TABLE语句或mysqladmin flush-table命令可以立即关闭所有不使用的表并将所有使用中的表标记为已经关闭。这样可以有效释放大多数使用中的内存。FLUSH TABLE在关闭所有表之前不返回结果。
 
内存使用下面的加起来不要超过2G:(一些系统对文件大小的限制,一个表就是一个文件)
innodb_buffer_pool_size
+ key_buffer_size
+ max_connections * (sort_buffer_size + read_buffer_size + binlog_cache_size)
+ max_connections * 2MB    //thread stack