mysql优化之连接优化

 

第一篇 序章
第二篇 连接优化
第三篇 索引优化
第四篇 查询优化
第五篇 到实战中去

连接优化

连接优化主要指客户端连接数据库以及数据库为响应客户端的请求而打开数据表和索引的过程中涉及到的参数调整。原文可以参考这里或者这里。(原文链接 http://ddbiz.com/?p=950)
尽管不同的mysql发行版本的编译和链接方式也会影响到客户端的链接请求,但是由于我的系统多是直接安装mysql的发行包,且很少会做改动,因此关于手动编译mysql的以达到优化的目的的方面,此处无法聊及,或许日后会有机会涉足其中。

根据MySQL如何使用内存中的说法,下面的参数会影响到客户端的每个请求:

  1. open-files-limit

    命令行参数: –open-files-limit=#
    ini/cnf参数: open-files-limit
    mysql 变量: open_files_limit
    全局变量,不可动态调整,取值范围 0到65535。
    open_files_limit指mysql能够打开的文件句柄数。该值不足时,会引发 Too many open files错误。具体需要多少个文件句柄,还需要根据 max_connections 和 table_open_cache来计算。
    一个有趣的现象是,在我的64bit linux中, –open-files-limit或者–open_files_limit可以设置超过 64k,如:
    --open-files-limit

    open-files-limit可能受到操作系统的限制,比如linux中,/proc/sys/fs/file-max,就限制了系统最大能够开启的文件句柄数目。像oracle在linux的安装运行要求,对最低要求就是要超过 64k. 可以通过修改/etc/sysctl.conf,增加或者修改 fs.file-max=#来增加系统最大打开值,别忘了修改完了,用 sysctl -p 来启用新值(以上操作为centos/rhel)。
    在linux中,还有一个参数可能会限制系统最大打开文件数值,就是/etc/security/limits.conf
    fs.file-max
    具体如何修改其值,请参考系统文档

    受如下参数影响: 受系统限制
    将影响如下参数: max_connections table_open_cache
    调整触发条件: 当系统出现 Too many open files 时需要调整此参数。

  2. thread_stack

    命令行参数: –thread_stack=#
    ini/cnf参数: thread_stack
    mysql 变量: thread_stack
    全局变量,不可动态调整。
    32bit系统中默认为192k, 64bit系统中默认为256k. 先谈及thread_stack是因为他对下面要讲的max_connections有关键影响因素。

    thread_stack 对应于操作系统层面中的stack size,windows中的默认线程的stack size为1M, linux根据版本不同会有变化,一般在8m或者10m。在我的几个Centos 5.x/6.x中,默认的stack size 都是10M(这要比windows高出10倍)

    ulimit -s
    10240

    stack size在32bit的OS中是一个很重要的参数,减少一个线程的stack size可以增加线程数,比如从10m减少到64k。但是在64bit的Linux(内核版本>= 2.6.x)中,如果允许 /proc/sys/vm/overcommit_memory,stack size或许没那么重要了。

    受如下参数影响: 无
    将影响如下参数: max_connections
    调整触发条件: max_connections 已经达到当前系统允许的最大值。

  3. max_connections

    命令行参数: –max_connections 或者 –max-connections
    ini/cnf定义: max_connections
    mysql 变量: max_connections
    全局变量,可动态调整

    MySQL数据库允许的并发连接数
    对于一个访问者众多(pv值很高)的网站来说,有时可能会发生 : Too many connections 的错误。可以考虑增加此值。对于MySQL来说,能够支持的最大的并发连接数,取决于很多因素,包括:

    1. 操作系统线程模型、操作系统版本(参见 thread_size)
    2. 可用的内存数量
    3. 每个连接的内存使用量/工作负载(参见 thread_size)
    4. 预期的服务器响应时间

    在内存允许的情况下,32bit windows可以支持最大2000左右的并发请求(因为单进程最大支持的内存为2G,而默认的一个线程需要资源为1MB),64bit windows 也可以根据内存计算得出可支持的线程数。(关于windows中可用线程估算,可以参考Mark Russinovich的文章Pushing the Limits of Windows: Processes and Threads,或者参考微软的一篇简述(进程地址空间))。
    而Linux中的因素可能更复杂,不过 stack_size 依然如同windows中一样,是制约线程数的一个重要因素,最大线程数在Liunx下也有默认值,cat /proc/sys/kernel/threads-max, 当不调整这个值时,MySQL的max_connections应该远小于它。

    在实际应用中,可支持的并发数将会远小于理论值,因为每个线程不可能只是空连接一下就断开。线程工作时的CPU/内存损耗,会降低整个系统的可用资源调配。对于MySQL来说,其提供了一个可以调整stack size的参数: thread_stack.
    mysql 的 max_connections * thread_stack 应小于可用内存;根据mysql的官方文档(doc5.5),linux(或者solaris)下,可以支持500到1000个并发连接,如果每个连接的工作很小,且服务器内存很大的话,那么可以支持到10k的链接。在windows下,则有一个 (open tables*2+open connection) < 2048的限制。因此:

    受如下参数影响: thread_stack table_open_cache open_file_limit
    将影响如下参数: 无
    调整触发条件: 当threads_connected(show status like ‘threads_connected’) 接近 max_connections 时,应该采取行动提高并发数.

  4. thread_cache_size

    命令行参数: –thread_cache_size
    ini/cnf定义: thread_cache_size
    mysql 变量: thread_cache_size
    全局变量,可动态调整, 默认值0,最大值16k

    mysql使用此参数限定数据库服务中,缓存多少个线程共客户端使用。 如果服务器每秒都有几百个新的连接出现,那么这个值应该挑高一些。通过评测connections和threads_created判定是否需要增加thread_cache_size.
    mysql> show status like ‘%connections%’; 输出
    Connections 尝试连接请求(包括不能成功建立连接的请求)
    Max_used_connections 最大并发连接数量

    mysql> show status like ‘threads_c%’; 输出
    threads_cached 当前缓存线程数
    threads_connected 当前连接数
    thread_created 线程创建数

    当连接缓存的利用率( thread cache hit =(connections – threads_created)/connections*100%) 的值较低时,表明mysql需要创建更多的线程(线程缓存不够了)来接受客户端请求。

    受如下参数影响: 无
    将影响如下参数: 无
    调整触发条件: 当thread cache hit较低时,应该采取行动提高thread_cache_size此值.

  5. table_open_cache/table_cache

    命令行参数: –table-open-cache
    ini/cnf定义: table_open_cache
    mysql 变量: table_open_cache
    全局变量,可动态调整, 默认值400,最大值512k

    mysql打开表的描述符,被缓存在table_open_cache中,table_open_cache >= max_connections * 2,这是因为有些表打开时,需要两个文件符,如myisam表,另外还有index、临时表等的文件符。自链接的查询语句,会额外再多开启一个该表的文件符。

    一个针对性的设置是,找到和数据库有关的所有最复杂的查询语句(包括自链接,left/right/outer join,以及group 等统计语句)查看这些链接将打开多少数据表,设定此值为 N,则

    table_open_cache > max_connections * N

    受如下参数影响: max_connections open_file_limit
    将影响如下参数: max_connections
    调整触发条件: 当opened_tables(show status like ‘opened_tables’)值很大时,应该采取行动提高table_open_cache此值.

  6. net_buffer_length

    命令行参数: –net_buffer_length
    ini/cnf定义: net_buffer_length
    mysql 变量: thread_cache_size
    全局变量,可动态调整, 默认值16k,范围1k到1m.

    客户端连接时的缓冲和结果缓冲, 可以动态调整(自动调整,意味着 set net_buffer_length=xxx是无效的)到最大max_allowed_packet的大小。每个SQL语句结束后,这个值会恢复到初始值。内存不足时–这个情况也很少了,毕竟现在内存这么便宜–或者并发连接很大时,可以适当的缩小这个初始值,比如1k.

    受如下参数影响: max_allowed_packet
    将影响如下参数: 无
    调整触发条件: 如果要装载/导入/导出大量数据时;查询结果中包含大的数据字段时,如TEXT,BLOB等

  7. max_allowed_packet

    命令行参数: –max_allowed_packet
    ini/cnf定义: max_allowed_packet
    mysql 变量: max_allowed_packet
    全局变量,可动态调整, 默认值1m,范围1k到1g.

    客户端和服务端的max_allowed_packet需要一致,或者客户端的max_allowed_packet要大于服务端的max_allowed_packet。

    受如下参数影响: 无
    将影响如下参数: 无
    调整触发条件: 如果要装载/导入/导出大量数据时;查询结果中包含大的数据字段时,如TEXT,BLOB等

    Q:max_allowed_packet和net_buffer_length会影响load data infile吗?
    A:No 

  8. wait_timeout

    命令行参数: –wait_timeout
    ini/cnf定义: wait_timeout
    mysql 变量: wait_timeout
    全局变量,可动态调整, 默认值8小时,范围1秒到31536000.
    wait_timeout定义了一个已连接的客户端在不进行任何查询动作时最常的空闲时间。
    注意:对已经建立的连接将不产生影响。
    可以通过 show processlist 来查看当前数据库连接的状况,如:
    [singlepic id=96 w=320 h=240 float=none]

    受如下参数影响:
    将影响如下参数: max_connections
    调整触发条件: 短链接、高并发的系统应用中.

上一篇 序章 下一篇 索引优化

转载于:https://www.cnblogs.com/zengkefu/p/5645705.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家用电脑配置_游戏搬砖必看教程,游戏工作室电脑如何配置

文章只针对新手对电脑硬件配置了解&#xff0c;大佬可直接关闭&#xff0c;电脑如何配置只代表个人观点!想游戏搬砖赚钱&#xff0c;资金方面也有这个能力的小伙伴可能对手机开那么几个号无法满足&#xff0c;那么今天要说的就是如何利用电脑多开&#xff0c;来达到利益最大化这…

基于MATLAB的Dijkstra算法实现及案例分析

摘要:为研究两地点之间距离&#xff08;或耗时&#xff09;最短路线规划&#xff0c;采用MATLAB编程的方法来实现&#xff0c;并利用Floyd算法记录距离&#xff08;或耗时&#xff09;最短路线。在不考虑各种影响因素的情况下&#xff0c;以随机小样本数据为例进行演示&#xf…

win10共享打印机怎么设置_关于win10网络共享,选择“启用文件和打印机共享”之后,无法保存设置的解决办法...

写个流水账&#xff0c;把我解决这个问题的前因后果记录一下&#xff0c;供遇到相同问题的同学参考之用&#xff0c;希望能有点启发。这个问题的来源&#xff0c;是我想利用客厅的小米盒子&#xff0c;访问同一个路由器局域网之下的pc&#xff0c;直接访问共享文件的方式&#…

MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)

BP神经网络&#xff1a;是1986年由Rumelhart和McClelland为首的科学家提出的概念&#xff0c;是一种按照误差逆向传播算法训练的多层前馈神经网络&#xff0c;是目前应用最广泛的神经网络。神经网络是把生活中的常见情节推广到计算仿真的范畴&#xff0c;这样的启发式算法还有许…

前端性能优化知识,包括css和js

作者&#xff1a;野次链接&#xff1a;http://www.zhihu.com/question/33032042/answer/95948831来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 1. 减少HTTP请求次数 尽量合并图片、CSS、JS。比如加载一个页面&#xf…

快速理解编程结构_为什么系统编程全都用英文而不用中文?听完专家的解释恍然大悟!...

全球博弈(quanqiuboyi)——不一样的观点&#xff0c;不一样的解读&#xff0c;8000万人订阅的超级微信大号。不关注时事&#xff0c;你将会被这个世界抛弃&#xff0c;点击标题下蓝字“全球博弈”关注&#xff0c;我们将为您提供有价值、有意思的时事解读。人类走进科技发展的道…

用了十年的昵称badboy_怎样用5秒钟看清一对夫妻的真实感情状况?

“只要一分钟&#xff0c;我就能看清一对夫妻感情的状况。”从事情感咨询几十年的行业前辈告诉我&#xff0c;她的诀窍就是——听他们之间如何称呼对方。“大部分情侣在恋爱时都会给对方起一个专属的爱称&#xff0c;比如&#xff1a;小白猪、大宝宝之类的&#xff0c;总之很亲…

MATLAB—经纬度坐标转换为平面坐标

原理示意图&#xff1a; Mercator投影变换示意图 2. 公式: XY平面被当作Mercator投影平面&#xff0c;Y轴和X轴原点分别设为0纬度和0经度。通过如下公式将地理坐标变换到Mercator投影平面。由于标准电子海图/航道图使用WGS84坐标系&#xff0c;本文使用WGS84参数进行变换。投影…

io密集型和cpu密集型_和小胖一起理解CPU负载和利用率

作者&#xff1a;小胖前言凌晨一点&#xff0c;正整着炸鸡的小胖&#xff0c;微信一呼“你的服务器CPU持续超载 … “麻溜的连上服务器&#xff0c;先把CPU负载摁下来。仔细一想&#xff0c;最近1分钟平均负载很大&#xff0c;但CPU利用率却≤30%&#xff0c;不经陷入了深思&am…

gui显示文本动态框

软件文本框&#xff0c;显示一些希望被阅读的文本&#xff1b; 包含main函数(kuang)&#xff0c;gui作为子函数&#xff0c;以及必要的txt文件。 直接运行kuang函数即可。时间0.5秒内。 可以顺序显示希望输入的内容&#xff0c;并保存记录&#xff0c;如下 也可以每次只显示新…

redis5 外部不能连接_【硬见小百科】PCB连接的方法

PCB是电子产品的基本元器件&#xff0c;任何电子产品都需要PCB才能制成。那么&#xff0c;PCB在电子产品之中&#xff0c;必须要与其他器件相互连接在一起&#xff0c;这就是PCB的互连。总的来说&#xff0c;PCB的连接有三个方面&#xff1a;芯片到PCB、PCB内部、PCB与外部器件…

最小费用最大流问题

最小费用最大流问题 解决如下最小费用最大流问题。 以前的资源由于matlab版本问题等已不适用。现在做出修改&#xff0c;适用于matlab2014a以后的版本。 注意&#xff0c;数据格式按代码中的例子的格式&#xff0c;否则需要修改代码。 查了很多资源发现用MATLAB操作的好用的不多…

windows7无人值守应答文件.rar_数智化赋能人力共享运营,人力管理走向“无人值守”...

关键词&#xff1a;人力共享&#xff0c;HR&#xff0c;数智化&#xff0c;用友&#xff0c;NC Cloud&#xff0c;无人值守人力共享是近几年人力资源从业者持续关注的热点话题。无论是从效率提升、体验改进&#xff0c;还是助力人力资源角色转型&#xff0c;对人力共享能带来的…

iphone彻底删除照片如何恢复_手机删除的照片如何恢复?OPPO最新照片恢复

手机删除的照片如何恢复&#xff1f;小编给大家带来了OPPO最新照片恢复方法&#xff0c;可谓是专属福利啊&#xff01;手机照片误删&#xff0c;焕发出来的照片很模糊&#xff1f;这有何难&#xff01;手机照片管家APP竟然可以恢复高清图片&#xff0c; 不过现在安卓机只有OPPO…

社区发现SLPA算法

社区&#xff08;community&#xff09;定义&#xff1a;同一社区内的节点与节点之间关系紧密&#xff0c;而社区与社区之间的关系稀疏。 设图GG(V,E),所谓社区发现是指在图G中确定nc(>1)个社区C{C1,C2,...,Cnv},使得各社区的顶点集合构成V的一个覆盖。 若任意两个社区的顶点…

bucket sort sample sort 并行_MOOSE: 实现大规模并行多物理场仿真(二)

转载自wx公众号&#xff1a;CS guy来源于文章 MOOSE: Enabling massively parallel multiphysics simulation网址&#xff1a;https://www.sciencedirect.com/science/article/pii/S2352711019302973?via%3Dihub2.软件说明2.1 软件架构MOOSE旨在促进创建FEM工具&#xff0c;以…

iphone数据迁移到新iphone_Mac专业iPhone数据恢复软件----Omni Recover

Omni Recover mac是一个MacOS上的专业iPhone数据恢复软件&#xff0c;Omni Recover Mac版可以检索多达20多种类型的iOS数据&#xff0c;支持从iDevices恢复丢失的数据&#xff0c;轻松帮你找回数据&#xff0c;赶紧下载试试Omni Recove 激活版吧&#xff01;软件介绍Omni Recov…

文档根元素 project 必须匹配 doctype 根 null_快评:全新MG5上市6.49万起,但买它必须准备10万?...

原标题&#xff1a;快评&#xff1a;全新MG5上市万起&#xff0c;但买它必须准备10万&#xff1f;上汽荣威新推出了一款A级轿车——MG5&#xff0c;售价万。上市前&#xff0c;我曾经在网上见过这款车的造型图&#xff0c;很有好感。所以当看到它的最低售价只有万时&#xff0c…

关于oracle sql语句查询时表名和字段名要加双引号的问题

oracle初学者一般会遇到这个问题。用navicat可视化创建了表&#xff0c;可是就是不能查到&#xff01;后来发现②语句可以查询到①select * from user; 但是&#xff0c;我们如果给user加上双引号就可以查到了&#xff01; ②select * from "user"; 难道oracle跟mysq…

模拟退火算法(代码可直接运行)

模拟退火算法&#xff08;SA&#xff09; 模拟退火是很经典的算法&#xff0c;针对大多数模型、应用&#xff0c;受限于SA运行时间长等特点&#xff0c;已不能直接应用SA&#xff0c;这样的算法值得去改进&#xff0c;我试图找一些缩短运行时间的方法&#xff0c;已经在测试&a…