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, 用行级锁替代立即释放的表锁

MySQL调优基础, 与hikari数据库连接池配合的更多相关文章

  1. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  2. mysql调优 基础

    MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...

  3. MySQL 调优基础(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  4. MySQL 调优基础(二) Linux内存管理

    进程的运行,必须使用内存.下图是Linux中进程中的内存的分布图: 其中最重要的 heap segment 和 stack segment.其它内存段基本是大小固定的.注意stack是向低地址增长的, ...

  5. MySQL 调优基础(五) Linux网络

    1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...

  6. MySQL 调优基础(三) Linux文件系统

    Linux的文件系统有点像MySQL的存储引擎,它支持各种各样的文件系统.它最上层是通过 virtual files system虚拟文件系统作为一个抽象接口层来对外提供调用的.然后下层的各种文件系统 ...

  7. MySQL 调优基础:Linux内存管理 Linux文件系统 Linux 磁盘IO Linux网络

    http://www.cnblogs.com/digdeep/category/739915.html

  8. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  9. MySQL 调优/优化的 100 个建议

    MySQL 调优/优化的 100 个建议   MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...

随机推荐

  1. 《ASP.NET MVC企业实战》(三)MVC开发前奏

    ​ 在上一篇“<ASP.NET MVC企业级实战>(二)MVC开发前奏”中跟随作者大概了解了一些C#3.0和3.5中的新特性.本篇继续以这样的方式来学习C#中的一些特性.   一.C#3. ...

  2. NoHttp封装--03 cookie

    NoHttp请求自动维持Cookie:   1.支持Session.Cookie.临时Cookie的位置.   2.支持App重启.关机开机后继续持久化维持.   3.提供了接口,允许开发者监听Coo ...

  3. Android之移动热修复

    阿里云推出了移动热修复服务,听说这个服务傻瓜式接入,性能相对较好,对新技术比较好奇的我决定尝试一下. 1.首先,需要开通这个服务,创建应用 2.然后,在项目中接入服务.按照文档所述 第一步:gradl ...

  4. 安装office2010提示要安装MSXML6.10.1129.0解决方法

    系统win7 32位 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 1.下载MSXML6.10.1129.0进行安装 2.若本机已安装过不管用: a.在运行里 ...

  5. 进入正在运行的 docker 容器(docker container)

    在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望: ➜ compose docker exec --help Usage: ...

  6. Shell脚本应用(for、while循环语句和case分支语句)

    1.for:读取不同的变量值,逐个执行同一组命令,直到取值完毕退出,变量值以空格分隔 语法: for  变量值  in  取值列表 do 命令序列 done 2.while:重复测试某个条件,成立则执 ...

  7. 初识Python - Python的历史(转)

    声明: 本文转自维基百科 如有意见请联系删除 综述 该编程语言 的Python是在20世纪80年代末的设想,和实施是在1989年12月开始由吉多·范罗苏姆在CWI在荷兰的继任者农行能够异常处理,并与接 ...

  8. 三叔学FPGA系列之二:Cyclone V中的POR、配置、初始化,以及复位

    对于FPGA内部的复位,之前一直比较迷,这两天仔细研究官方数据手册,解开了心中的诸多疑惑,感觉自己又进步了呢..... 原创不易,转载请转原文,注明出处,谢谢.   一.关于POR(Power-On ...

  9. golang的定时任务

    golang的定时任务使用的是cron这个包来解决的 官方文档地址:https://godoc.org/github.com/robfig/cron cron包的基础知识 字段名 是否必须 允许的值 ...

  10. box-shadow的动效制作

    突然发现原来box-shadow的功能很强大,还能做动效,下面整理下box-shadow几个效果 案例1:hover效果 <a href="/app/list">WEB ...