• Mysql调优基础、Mysql问题排查、Mysql优化、与hikari数据库连接池配合


    【非原创】原文链接:MySQL调优基础, 与hikari数据库连接池配合

    1.根据硬件配置系统关键参数

    wait_timeout          #非交互连接的最大存活时间, 10-30min
    max_connections           #全局最大连接数 默认100 根据情况调整
    back_log            #达到max_connections后, 还能继续接受的连接请求数, linux不超过1000, 根据情况调整
    thread_concurrency       #MySQL处理线程数  cpu核心数*2
    innodb_buffer_pool_size       #innodb引擎的数据页大小, 一般是总内存的50%
    innodb_flush_log_at_try_commit           #将logbuffer写入日志并flush进硬盘的时间点, 一般0(每秒)或者2(提交事务时)
    innodb_log_buffer_size     #log缓存大小  1~8m
    innodb_addtional_mem_pool_size       #数据字典等数据结构的内存池大小  24~48m
    innodb_thread_concurrency   #cpu核心数*2

    2.hikariCP参数配置

    maxLifetime   #连接生命时长, 比mysql的wait_timeout短1分钟左右
    maximumPoolSize  #连接池最大连接数: cpu核心数*2 + 硬盘数, 默认10 一个连接池一般来讲连接数在10-20个, 根据部署的应用程序数量可以推测出mysql的max_connections值
    readonly  #是否是只读数据源, 做读写分离时有用, 保证slave数据源的安全
    connectionTimeout #等待连接池分配连接的最大时长 30s, 如果超过这个时间还没有分配到连接, commit会抛异常
    其他参数一般用默认即可

    3.max_connections

      show status like 'max%connections'
      max_used_connections / max_connections  过去的最大连接数 / 设置的最大连接数, 应该在10%~80%, 可据此调整max_connections

    4.wait_timeout

      show processlist;
      sleep   查看当前连接状态, 如果sleep太多, 可以调小wait_timeout值

    5.key_buffer_size优化

      索引页大小, 基础设置256~512m
      1>show global status like 'key_read%'
        key_reads / key_read_request < 1 / 100 
        使用硬盘里的索引 / 所有索引请求  如果比例过大, 说明索引缓存不够, 大量索引无法加入缓存, 只能从硬盘直接读, 这是要适当调大key_buffer_size值
      2>show global status like 'key_blocks_u%' 
        key_blocks_unused  未使用过的索引页内存簇
        key_blocks_used  使用过的索引页内存簇  
        如果所有索引页内存簇都被使用过, 说明索引页内存使用较多, 可以适当调大key_buffer_size

    6.query_cache查询缓存

      query_cache_size   #查询缓存大小  48~256m
      query_cache_type  #是否用查询缓存  1
      query_cache_limit  #单次查询缓存最大值  1~4m
      query_cache_min_res_unit #缓存空间最小单位 4k
      show global status like 'qcache%'
      1> qcache_free_blocks / qcache_total_blocks < 20%  #过大说明查询的一般都是小数据量查询, 可以适当减少query_cache_min_res_unit
      2>qcache_free_memory / query_cache_size < 20%  #过大说明大量查询缓存未用, 可以适当减少query_cache_size
      3>qcache_lowmem_prunes > 50 #说明内存碎片太多或者query_cache_size不够
      4>qcache_hits / qcache_hits_qcache_inserts  #命中率低说明读少写多

    7.table_cache 表缓存  256m

      show global status like 'Open%tables'
      open_table / table_cache   正在缓存中的表  过大说明表缓存被利用的很充分, 可以适当增加
      opened_table / table_cache  缓存过的表

    8.max_heap_table_size , tmp_table_size  内存临时表大小限制, 由最小值决定

      show global status like 'create_tmp%'
      created_tmp_disk_tables / created_tmp_tables < 25%  过大说明由大量临时表被创建在硬盘中, 这是要适当增加max_heap_table_size和tmp_table_size

    9.thread_cache_size 缓存的线程数

      show global status like 'Thread%'
      Thread_created 过大表示创建线程数太频繁, 可以增大thread_cache_size已缓存更多的线程

    10.sort_buffer_size , record_rnd_buffer_size 排序缓存 , 随机读缓存

      show global status like 'sort%'
      sort_merge_passes   太大说明在硬盘中创建了很多临时文件, 可以增大sort_buffer_size 和 record_rnd_buffer_size

    11.慢查询

      1>show variables like '%slow%'  
         slow_launch_time   超过多长时间的查询视为慢查询 一般 2~5s
      2>show global status like '%slow%'
         slow_queries  慢查询次数
      3>show variables like '%log_query_file%'
         slow_query_log  是否开启了慢查询日志
         slow_query_log_file  慢查询日志文件

    12.表扫描

      show global status like 'handler_read%'
      show global status like 'com_select'
        Handler_read_rnd_next / com_select > 4000 太大说明表扫描太多, 索引没建好

    13.表锁使用

     show global status like 'table_locks%'
        Table_locks_immediate / Table_locks_waited > 5000 立即释放的锁 / 需要等待的锁, 太大的话最好用Innodb, 用行级锁替代立即释放的表锁

    SpringCloudAlibaba实战教程系列  

    Docker(部署常见应用):Docker安装MySql完整教程、实操 

    Docker版:Mysql分库分表MyCat实战  

    Docker实现Mysql主从复制实战(一主一从、双主双从)  

    mysql 5.8以上版本有问题可以参考:

    mysql-管理命令【创建用户、授权、修改密码、删除用户和授权、忘记root密码】

  • 相关阅读:
    养生之《爱的供养》
    道家养生,与佛家养德
    个人的佛法·5·活着,与死去
    自我囚禁与安住于轮回
    个人的佛法·4·我是不是东西?
    个人的佛法·2
    我们都是生命的灯塔
    大O表示法是什么?
    uni-app商城项目(01)
    2059
  • 原文地址:https://www.cnblogs.com/niunafei/p/12824859.html
Copyright © 2020-2023  润新知