设为首页 收藏本站
查看: 582|回复: 0

[经验分享] MYSQL 最大连接数设置

[复制链接]

尚未签到

发表于 2018-10-7 11:56:26 | 显示全部楼层 |阅读模式
Open tables:110,即当前数据库打开表的数量是110个,注意这个100并不是实际的110个表,因为MySQL是多线程的系统,几个不同的并发连接可能打开同一个表,这就需要为不同的连接session分配独立的内存空间来存储这些信息以避免冲突。因此连接数的增加会导致MySQL需要的文件描述符数目的增加。另外对于MyISAM表,还会建立一个共享的索引文件描述符。  

  
    在MySQL数据库层面,有几个系统参数决定了可同时打开的表的数量和要使用的文件描述符,那就是table_open_cache、max_tmp_tables和open_files_limit。
  

  
mysql> show variables like 'table_open%';
  
+------------------+-------+
  
| Variable_name    | Value |
  
+------------------+-------+
  
| table_open_cache | 256   |
  
+------------------+-------+
  
1 row in set (0.00 sec)
  

  
    table_open_cache:256,这就是说所有的MySQL线程一共能同时打开256个表,我们可以搜集系统的打开表的数量的历史记录和这个参数来对比,决定是否要增加这个参数的大小。查看当前的打开表的数目(Open tables)可用上边提到过的status命令,另外可以直接查询这个系统变量的值:
  

  
mysql> show status like 'open_tables';
  
+---------------+-------+
  
| Variable_name | Value |
  
+---------------+-------+
  
| Open_tables   | 3     |
  
+---------------+-------+
  
1 row in set (0.00 sec)
  

  
    Open_tables就是当前打开表的数目,通过flush tables命令可以关闭当前打开的表。 这个值如果过大,并且如果没有经常的执行flush tables命令,可以考虑增加table_open_cache参数的大小。
  

  
接下来看max_tmp_tables:
  
mysql> show variables like 'max_tmp%';
  
+----------------+-------+
  
| Variable_name  | Value |
  
+----------------+-------+
  
| max_tmp_tables | 32    |
  
+----------------+-------+
  
1 row in set (0.00 sec)
  
max_tmp_tables:32即单个客户端连接能打开的临时表数目。查看当前已    打开的临时表的信息:
  
mysql> show global status like '%tmp%table%';
  
+-------------------------+-------+
  
| Variable_name           | Value |
  
+-------------------------+-------+
  
| Created_tmp_disk_tables | 0     |
  
| Created_tmp_tables      | 11    |
  
+-------------------------+-------+
  
2 rows in set (0.00 sec)
  
    根据这两个值可以判断临时表的创建位置,一般选取BLOB和TEXT列、Group by 和 Distinct语句的数据量超过512 bytes,或者union的时候select某列的数据超过512 bytes的时候,就直接在磁盘上创建临时表了,另外内存中的临时表变大的时候,也可能被MySQL自动转移到磁盘上(由tmp_table_size和max_heap_table_size参数决定)。
  

  
    增加table_open_cache或max_tmp_tables 参数的大小后,从操作系统的角度看,mysqld进程需要使用的文件描述符的个数就要相应的增加,这个是由open_files_limit参数控制的。
  
mysql> show variables like 'open_files%';
  
+------------------+-------+
  
| Variable_name    | Value |
  
+------------------+-------+
  
| open_files_limit | 2670  |
  
+------------------+-------+
  
1 row in set (0.00 sec)
  
    但是这个参数是OS限制的,所以我们设定的值并不一定总是生效。如果OS限制MySQL不能修改这个值,那么置为0。如果是专用的MySQL服务器上,这个值一般要设置的尽量大,就是设为没有报Too many open files错误的最大值,这样就能一劳永逸了。当操作系统无法分配足够的文件描述符的时候,mysqld进程会在错误日志里记录警告信息。
  
相应的,有两个状态变量记录了当前和历史的文件打开信息:
  
mysql> show global status like '%open%file%';
  
+---------------+-------+
  
| Variable_name | Value |
  
+---------------+-------+
  
| Open_files    | 0     |
  
| Opened_files  | 76    |
  
+---------------+-------+
  
2 rows in set (0.00 sec)
  
MySQL为每个连接分配线程来处理,可以通过threads_connected参数查看当前分配的线程数量:
  
mysql> show status like '%thread%';
  
+------------------------------------------+-------+
  
| Variable_name                            | Value |
  
+------------------------------------------+-------+
  
| Delayed_insert_threads                   | 0     |
  
| Performance_schema_thread_classes_lost   | 0     |
  
| Performance_schema_thread_instances_lost | 0     |
  
| Slow_launch_threads                      | 0     |
  
| Threads_cached                           | 0     |
  
| Threads_connected                        | 1     |
  
| Threads_created                          | 1     |
  
| Threads_running                          | 1     |
  
+------------------------------------------+-------+
  
8 rows in set (0.00 sec)
  
    比较threads_connected参数和前面提到的max_connections参数,也可以作为目前的系统负载的参照,决定是否需要修改连接数。
  

  
    查看每个线程的详细信息:mysql>show processlist;对影响系统运行的线程:kill connection|query threadid的命令杀死。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614308-1-1.html 上篇帖子: 如何通过网络yum源安装Mysql 下篇帖子: Mysql分库分表方案总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表