zoukankan      html  css  js  c++  java
  • 对MySQL性能影响较大的五类配置参数

     

    以下主要是对MySQL 性能影响关系紧密的五大配置参数的介绍。

    一、      连接

    连接通常来自Web 服务器,下面列出了一些与连接有关的参数,以及该如何设置它们。

    (一)、             max_connections

    这是Web服务器允许的最大连接数,记住每个连接都要使用会话内存(关于会话内存,文章后面有涉及)。

    1.       查看max_connections参数的值

    SQL>show variables like "max_connections";

    2.       调整max_connections参数的值

    1)、临时有效修改办法:SQL>set global max_connections = 200;

            修改完成后实时生效,无需重启MySQL。但是下次重启后这个设置会失效

    2)、永久有效修改办法:修改mysql的ini配置文件my.ini或/etc/my.cnf

    找到mysqld块,修改或者添加下面的设置:max_connections=200

    (二)、             max_allowed_packet

    最大数据包大小,通常等于你需要在一个大块中返回的最大数据集的大小,如果你在使用远程mysqldump,那它的值需要更大。

    1.       查看max_allowed_packet参数的值

    SQL>show variables like "max _allowed_packet";

    2.       调整max_allowed_packet参数的值

    1)、临时有效修改方法:SQL>SET GLOBAL max_allowed_packet = 2*1024*1024*16

    2)、永久有效修改方法:修改mysql的ini配置文件my.ini或/etc/my.cnf

        [mysqld]

        max_allowed_packet = 1M (如果没有增加一行),保存,重起MySQL服务。

    (三)、             aborted_connects

    检查系统状态的计数器,确定其没有增长,如果数量增长说明客户端连接时遇到了错误。

    1.       查看aborted_connects状态的值

    SQL>show status like "aborted_connects";

    2.       查看哪些用户从哪些地方登陆(异常的需要剔除)

    mysql> select host,user from mysql.user;

    3.       清空状态变量

    mysql> flush status;

    (四)、             thread_cache_size

    入站连接会在MySQL中创建一个新的线程,因为MySQL中打开和关闭连接都很廉价,速度也快,它就没有象其它数据库,如Oracle那么多持续连接了,但线程预先创建并不会节约时间,这就是为什么要MySQL线程缓存的原因了。

    如果在增长请密切注意创建的线程,让你的线程缓存更大,对于2550或100的thread_cache_size,内存占用也不多。

    1.       查看thread_cache_size状态的值

    SQL>show global status like 'thread_cache_size';

    2.       修改thread_cache_size状态的值

    1)、临时有效修改方法:mysql> set global thread_cache_size=16

    2)、永久有效修改方法:修改mysql的ini配置文件my.ini或/etc/my.cnf

        [mysqld]

        thread_concurrency = 16

    3.       设置参数值基本规则

    机器物理内存

    thread_concurrency设置值

    1G

    8

    2G

    16

    3G

    32

    >3G

    64

    二、      查询缓存

    MySQL中的缓存查询包括两个解析查询计划,以及返回的数据集,如果基础表数据或结构有变化,将会使查询缓存中的项目无效。

    (一)、             query_cache_min_res_unit

    MySQL参数中query_cache_min_res_unit查询缓存中的块是以这个大小进行分配的,使用下面的公式计算查询缓存的平均大小,根据计算结果设置这个变量,MySQL就会更有效地使用查询缓存,缓存更多的查询,减少内存的浪费。

    (二)、             query_cache_size

    这个参数设置查询缓存的总大小。

    (三)、             query_cache_limit

    这个参数告诉MySQL丢掉大于这个大小的查询,一般大型查询还是比较少见的,如运行一个批处理执行一个大型报表的统计,因此那些大型结果集不应该填满查询缓存。

    1. qcache hit  ratio = qcache_hits  / (qcache_hits + com_select)

    使用以下两个命令找到上述变量:

    SQL >  show status like ‘qcache%’;

    SQL >  show status like ‘com_%’;

    1. average query size = (query_cache_size – qcache_free_memory)/qcache_queries_in_cache

    使用以下命令获取上述显示变量

    SQL >  show variables like ‘query%’;

    qcache_* status variables you can get with:

    SQL >  show status like ‘qcache%’;

    获取query_cache_size的值。

    三、      临时表

    内存速度是相当快的,因此我们希望所有的排序操作都在内存中进行,我们可以通过调整查询让结果集更小以实现内存排序,或将变量设置得更大。

    (一)、             tmp_table_size

    1.       修改tmp_table_size状态的值

    1)、临时有效修改方法:

    SET GLOBAL tmp_table_size=2147483648;    //2G

    SET GLOBAL max_heap_table_size=2147483648;  //2G

    2)、永久有效修改方法:修改mysql的ini配置文件my.ini或/etc/my.cnf

     [mysqld]

      max_heap_table_size = 2048M

      tmp_table_size = 2048M

    (二)、             max_heap_table_size

    无论何时在MySQL中创建临时表,它都会使用这两个变量的最小值作为临界值,除了在磁盘上构建临时表外,还会创建许多会话,这些会话会抢占有限制的资源,因此最好是调整查询而不是将这些参数设置得更高,同时,需要注意的是有BLOB或TEXT字段类型的表将直接写入磁盘。

    四、      会话内存

    MySQL中每个会话都有其自己的内存,这个内存就是分配给SQL 查询的内存,因此你想让它变得尽可能大以满足需要。但你不得不平衡同一时间数据库内一致性会话的数量。这里显得有点黑色艺术的是MySQL是按需分配缓存的,因此,你不能只添加它们并乘以会话的数量,这样估算下来比MySQL典型的使用要大得多。

    最佳做法是启动MySQL,连接所有会话,然后继续关注顶级会话的VIRT列,mysqld行的数目通常保持相对稳定,这就是实际的内存总用量,减去所有的静态MySQL内存区域,就得到了实际的所有会话内存,然后除以会话的数量就得到平均值。

    (一)、             read_buffer_size

    read_buffer_size:是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能

    缓存连续扫描的块,这个缓存是跨存储引擎的,不只是MyISAM表。

    修改案例:db服务器内存16G,8核,dell的pc服务器。qps: 200个左右 ;tps: 1个左右 一分钟50几个

    sort_buffer_size = 32M 大了, 8M即可 

    read_buffer_size = 32M 大了,8M即可 

    join_buffer_size = 32M 大了,8M即可 

    read_rnd_buffer_size = 16M 大了,8M即可 

    table_open_cache = 512       小了,建议改成2048

    max_allowed_packet = 5M     小了,建议改成16M

    tmp_table_size=64M          小了,建议改成2G

    innodb_buffer_pool_size = 3000M   小了,改成db服务器总内存的60% 到80%
    innodb_additional_mem_pool_size = 20M 小了,改成128M

    (二)、             sort_buffer_size

    执行排序缓存区的大小,最好将其设置为1M-2M,然后在会话中设置,为一个特定的查询设置更高的值。

    (三)、             join_buffer_size

    执行联合查询分配的缓存区大小,将其设置为1M-2M大小,然后在每个会话中再单独按需设置。

    (四)、             read_rnd_buffer_size

    用于排序和order by操作,最好将其设置为1M,然后在会话中可以将其作为一个会话变量设置为更大的值。

    五、      慢速查询日志

    慢速查询日志是MySQL很有用的一个特性。

    (一)、             log_slow_queries

    MySQL参数中log_slow_queries参数在my.cnf文件中设置它,将其设置为on,默认情况下,MySQL会将文件放到数据目录,文件以“主机名-slow.log”的形式命名,但你在设置这个选项的时候也可以为其指定一个名字。

    在线修改设置:SQL>set global log_slow_queries = on;          # 开启慢日志

    查看存放日志的形式

    mysql> show variables like 'log_output';

    Variable_name

    Value

    Log_output

    FILE

    这个FILE是指以文件的形式存放. 

    如果是TABLE就是存放到系统表中. mysql.slow_log表中. 

    使用set global log_output='table';变量更改 

     

    mysqldumpslow命令查看慢日志.

    参数说明:  -s,是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序(从大到小),ac、at、al、ar表示相应的倒叙. -t, 是top n的意思,即为返回前面多少条数据. -g,后边可以写一个正则匹配模式,大小写不敏感.

    mysqldumpslow -s c -t 10 host-slow.log

     

    列出返回记录集最多的10个sql语句

    mysqldumpslow -s r -t 10 host-slow.log

     

    按照时间返回前10条里面含有左连接的sql语句

    mysqldumpslow -s t -t 10 -g "left join" host-slow.log

     

    (二)、             long_query_time

    默认值是10秒,你可以动态设置它,值从1到将其设置为on,如果数据库启动了,默认情况下,日志将关闭。截至5.1.21和安装了Google 补丁的版本,这个选项可以以微秒设置,这是一个了不起的功能,因为一旦你消除了所有查询时间超过1秒的查询,说明调整非常成功,这样可以帮助 你在问题变大之前消除问题SQL。

    set [session|global]  long_query_time =0.2    # 设置时间.精确的毫秒

    (三)、             log_queries_not_using_indexes

    开启这个选项是个不错的主意,它真实地记录了返回所有行的查询。

    set global  log_queries_not_using_indexes = on;   # 设置无索引的查询

     

    小结

    我们介绍了MySQL参数的五大类设置,平时我们一般都很少碰它们,在进行MySQL性能调优和故障诊断时这些参数还是非常有用的。

  • 相关阅读:
    DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting
    DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)
    DVWA 黑客攻防演练(八)SQL 注入 SQL Injection
    DVWA 黑客攻防演练(七)Weak Session IDs
    DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA
    DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
    工作流表结构设计
    Visual Studio 2019尝鲜----新建空项目体验
    《使用CSLA 2019:CSLA .NET概述》原版和机译文档下载
    .NET快速开发平台的在线预览
  • 原文地址:https://www.cnblogs.com/cqliyongqiang/p/9553153.html
Copyright © 2011-2022 走看看