• mysql监控优化(一)连接数和缓存


    一、mysql的连接数

            MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,连接数少的话,在大并发下连接数会不够用,会有很多线程在等待其他连接释放,就可能会导致数据库连接超时或者响应时间过长,所以需要调整最大连接数。

    1、设置mysql的最大连接数,在mysql的配置文件中增加:
            max_connections = 1000 #mysql的最大连接数,默认如果不写的话是100个
            wait_timeout = 10 超时时间
    2、查看当前有多少个连接
            show status like '%Threads_connected%';
            show processlist;

    二、mysql的缓存。缓存来自两个维度。

              缓存1(MySQL层):查询缓存 Query Cache

              缓存2(存储引擎层):InnoDB_Buffer_Pool

    1、查询缓存Qcache

    • 缓存完整的SELECT查询结果,当查询命中缓存,MySQL会立刻返回结果,跳过解析、优化和执行阶段。
    • 查询缓存会跟踪系统中的每张表,如果这些表发生变化,那么和这张表相关的所有查询缓存全部失效。
    • 查询缓存对应用程序是完全透明的。应用程序无须关心MySQL是通过查询缓存返回的结果还是实际执行返回的结果。事实上,这2种结果是完全相同的。
    • 在检查查询缓存的时候,MySQL不会对SQL进行任何处理,它精确的使用客户端传来的查询(select),只要字符大小写,或者注释有一点点不同,查询缓存就认为是不同的查询。
    • 任何一个包含不确定的函数(比如now(),current_date())的查询不会被缓存。

       (1)mysql查询缓存开启需要注意的问题

    • 开启查询缓存对于读写都增加了额外的开销。对于读,在查询开始前需要先检查缓存;对于写,在写入后需要更新缓存。
    • 一般情况这些开销相对较小,所以查询缓存一般还是有好处的。但也要根据业务特征权衡是否需要开启查询缓存。

      (2)Qcache参数。查询缓存参数,在mysql配置文件中添加,linux下为my.cnf,windows下为my.ini

                1.query_cache_type = on             是否开启查询缓存,具体选项是off,on

                2.query_cache_size = 200M        分配给查询缓存的总内存,一般建议不超过256M

                3.query_cache_limit = 1M            这个选项限制了MySQL存储的最大结果。如果查询的结果比这个大,那么就不会被缓存。

      (3)查看Qcache状态

               查询qcache状态:

       SHOW VARIABLES LIKE '%query_cache%';

               命令参数列表

              have_query_cache 该MySQL 是否支持Query Cache;

              query_cache_limit  缓存块大小,超过该大小不会被缓存

              query_cache_min_res_unit 每个qcache最小的缓存空间大小

              query_cache_size 分配给查询缓存的总内存

              query_cache_type 是否开启

              query_cache_wlock_invalidate 控制当有锁加在表上的时候,是否先让该表相关的 Query Cache失效

      (4)监控Qcache的使用情况

               查询qcache当前使用情况:

       SHOW STATUS LIKE 'Qcache%';

               命令参数列表

              Qcache_free_blocks  Query Cache中目前还有多少剩余的blocks。如果该值显示较大,则说明Query Cache 中的内存碎片较多了,可能需要寻找合适的机会进行整理。如果这个值非常大,可以使用FLUSH QUERY CACHE;语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。

              Qcache_free_memory  Query Cache 中目前剩余的内存大小

              Qcache_hits  缓存命中次数

              Qcache_inserts 多少次未命中然后插入

             Query Cache 命中率= Qcache_hits / ( Qcache_hits + Qcache_inserts );

             Qcache_lowmem_prunes 多少条Query 因为内存不足而被清除出Query

             Qcache_not_cached   因为query_cache_type 的设置或者不能被cache 的Query 的数量

             Qcache_queries_in_cache  当前Query Cache 中cache 的Query 数量;

             Qcache_total_blocks 当前Query Cache 中的block 数量

    2、存储引擎层-innodb buffer pool

    1. buffer pool是innodb存储引擎带的一个缓存池,查询数据的时候,它首先会从内存中查询,如果内存中存在的话,直接返回,从而提高查询响应时间。
    2. innodb buffer pool和qcache的区别是:qcacche缓存的是sql语句对应的结果集,buffer pool中缓存的是表中的数据。Buffer pool是设置的越大越好,一般设置为服务器物理内存的70%。

       (1)Innodb_buffer_pool参数:

         innodb_buffer_pool_size :Innodb_buffer_pool的大小

         innodb_buffer_pool_dump_now:默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘。

         innodb_buffer_pool_load_at_startup:默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中。

      (2)查看Innodb_buffer_pool的状态

             查询Innodb_buffer_pool状态:

    SHOW VARIABLES LIKE '%innodb_buffer_pool%';

             命令参数列表

    innodb_buffer_pool_size 设置的bp大小

            innodb_buffer_pool_filename  热数据文件名称

            innodb_buffer_pool_dump_at_shutdown 停止mysq服务时是否自动保存热数据

           innodb_buffer_pool_dump_now 启动mysql服务时是否自动读取热数据

      (3)监控Innodb_buffer_pool使用情况

             查询Innodb_buffer_pool当前使用情况:

    SHOW STATUS LIKE '%Innodb_buffer_pool%';

             命令参数列表

    主要关注的两个参数

    Innodb_buffer_pool_read_requests 总共查询bp的次数

    Innodb_buffer_pool_reads 从物理磁盘中获取到数据的次数

            通过这两个参数我们可以知道bp的命中率

     

  • 相关阅读:
    吴恩达机器学习视频笔记——7
    吴恩达机器学习视频笔记——6
    吴恩达机器学习视频笔记——5
    吴恩达机器学习视频笔记——4
    Python入门
    HtmlAgilityPack组件
    AutoMapper扩展
    SqlServer自动化分区
    使用Topshelf快速搭建Windows服务
    elasticsearch-查询
  • 原文地址:https://www.cnblogs.com/mululu/p/9056214.html
Copyright © 2020-2023  润新知