• MySQL 缓存


    配置文件设置缓存

     my.ini 或 my.cy 找到 [mysqld]

    query_cache_size = 20M  #缓存大小
    query_cache_type = ON  #开启缓存
    table_cache=256    #用于限制缓存表的最大数目,如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存

    参数调优

    mysql> show global status like 'open%_tables';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Open_tables   | 0     |  #当前正在打开表的数量
    | Opened_tables | 35    |  #所有已经打开表的数量,建议table_cache 比Opened_tables的数值大一些
    +---------------+-------+

    查询缓存相关配置参数

    mysql> show variables like '%query_cache%';
    +------------------------------+---------+
    | Variable_name                | Value   |
    +------------------------------+---------+
    | have_query_cache             | YES     | #是否支持查询缓存
    | query_cache_limit            | 1048576 | #可缓存具体查询结果的最大值
    | query_cache_min_res_unit     | 4096    | #查询缓存是以块来申请内存空间的,每次申请的块大小为设定值 
    | query_cache_size             | 0       | #查询缓存的大小
    | query_cache_type             | ON      | #关闭或是开启缓存
    | query_cache_wlock_invalidate | OFF     |  #该参数用于设置行级排它锁与查询缓存之间的关系,默认为为0(OFF),表示施加行级排它所的同时,该表的所有查询缓存依然有效。如果设置为1(ON),表示事假行级排它锁的同时,该表的所有查询缓存失效。
    +------------------------------+---------+

    查询缓存使用情况

    mysql> show status like 'Qcache%';
    +-------------------------+-------+
    | Variable_name           | Value |
    +-------------------------+-------+
    | Qcache_free_blocks      | 0     | #缓冲区碎片数量
    | Qcache_free_memory      | 0     | #表示当前MySQL服务实例的查询缓存还有多少可用内存
    | Qcache_hits             | 0     | #使用查询缓存的次数
    | Qcache_inserts          | 0     | #表示查询缓存中此前总共缓存过多少条select 语句的结果集。
    | Qcache_lowmem_prunes    | 0     | #值非常大,则表明经常出现缓冲不够的情况
    | Qcache_not_cached       | 0     |  #表示没有进入查询缓存的select个数
    | Qcache_queries_in_cache | 0     |  #缓存中缓存这多少条select语句的结果集
    | Qcache_total_blocks     | 0     |  #查询缓存的总个数
    +-------------------------+-------+

    清理缓存碎片 

    mysql> flush query cache;
    Query OK, 0 rows affected (0.00 sec)
    mysql> flush tables;   #清空当前所有缓存的表
    Query OK, 0 rows affected (0.00 sec)
    
    
    
    mysql> reset query cache; #清理内存中的碎片
    Query OK, 0 rows affected (0.00 sec)

    MyISAM 存储引擎缓存索引

     key_buffer_size 是用于索引块的缓冲区的大小,也称为密钥缓存

    sql 缓存索引相关命令

    mysql> SHOW STATUS like 'key_%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | Key_blocks_not_flushed | 0     |  # MyISAM密钥缓存中已更改但尚未刷新到磁盘 的密钥块数
    | Key_blocks_unused      | 22365 |  # 密钥缓存 中未使用的块数
    | Key_blocks_used        | 1     |  # MyISAM密钥缓存 中已使用块的数量。此值是一个高水位标记,表示一次使用过的最大块数。
    | Key_read_requests      | 1     | # 从MyISAM密钥缓存中读取密钥块的请求数
    | Key_reads              | 1     | # 从磁盘到MyISAM密钥缓存的密钥块的物理读取次数,如果 Key_reads 很大,那么你的 key_buffer_size 价值可能太小了
    | Key_write_requests     | 0     |  # 将密钥块写入MyISAM密钥缓存的请求数
    | Key_writes             | 0     |  # 密钥块从MyISAM密钥缓存到磁盘的物理写入次数
    +------------------------+-------+

    高速缓存未命中率可以计算为 Key_reads/Key_read_requests 比率通常应小于0.01,Key_writes/Key_write_requests如果您主要使用更新和删除,则比率通常接近1,但如果您倾向于同时执行影响多行的更新或者您正在使用DELAY_KEY_WRITE 表选项,则比率可能会小得多

    注意:如果创建表时 ALTER TABLE table_name DELAY_KEY_WRITE= 1  需要在 my.ini 配置 [mysqld] 下添加  myisam-recover=BACKUP,FORCE,这样在你启动mysql的时候会检查你的表并同步表和索引。

    使用的密钥缓冲区的分数可以 key_buffer_size 结合 Key_blocks_unused 状态变量和缓冲区块大小来确定 ,缓冲区块大小可以从 key_cache_block_size 系统变量中获得:1 ((Key_blocks_unused * key_cache_block_size/ key_buffer_size)

        

  • 相关阅读:
    redis如何实现数据同步
    mysql调优学习笔记
    介绍一个好用的dao层与mybatis互跳的idea插件MyBatisCodeHelperPro
    springboot执行流程
    zookeeper
    (原创) cocos2dx使用Curl连接网络(客户端)
    (转) Eclipse连接MySQL数据库(傻瓜篇)
    (原创)cocos2dx使用jsoncpp的正确姿势
    Java web开发(17)SpirngMVC 详解
    PLC 程序和仿真
  • 原文地址:https://www.cnblogs.com/xuey/p/9533409.html
Copyright © 2020-2023  润新知