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, 用行级锁替代立即释放的表锁
MySQL调优基础, 与hikari数据库连接池配合的更多相关文章
- MySQL 调优基础(一) CPU与进程
一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...
- mysql调优 基础
MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...
- MySQL 调优基础(四) Linux 磁盘IO
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
- MySQL 调优基础(二) Linux内存管理
进程的运行,必须使用内存.下图是Linux中进程中的内存的分布图: 其中最重要的 heap segment 和 stack segment.其它内存段基本是大小固定的.注意stack是向低地址增长的, ...
- MySQL 调优基础(五) Linux网络
1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...
- MySQL 调优基础(三) Linux文件系统
Linux的文件系统有点像MySQL的存储引擎,它支持各种各样的文件系统.它最上层是通过 virtual files system虚拟文件系统作为一个抽象接口层来对外提供调用的.然后下层的各种文件系统 ...
- MySQL 调优基础:Linux内存管理 Linux文件系统 Linux 磁盘IO Linux网络
http://www.cnblogs.com/digdeep/category/739915.html
- MySQL调优系列基础篇
前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...
- MySQL 调优/优化的 100 个建议
MySQL 调优/优化的 100 个建议 MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...
随机推荐
- 自定义控件详解(一):Paint类与Canvas类
前言: 自定义控件必需的两个类:Paint与Canvas Paint --- 相当于绘图的"笔" Canvas --- 相当于绘图的"纸" 一.Pain ...
- 安卓开发_浅谈ListView之分页列表
前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据 ...
- Android--判断是否连接成功了指定wifi
最近在做wifi的相关的东西,打印WifiInfo的时候 无意间发现一个参数,改参数可以查看是否连接成功了指定wifi,但是这是隐藏的,遂将其反射之.代码如下: //通过反射的方式去判断wifi是否已 ...
- 一种快速部署开发用oracle的办法
前段时间工作中需要在不少开发环境中快速提供开发可用的oracle环境,由于一一培训并部署原生oracle人力和时间成本过高,后来使用docker版本oracle,大大方便了开发工作的快速启动,方法记录 ...
- [20171223]grid用户的环境变量问题.txt
[20171223]grid用户的环境变量问题.txt --//oracle 11G 安装RAC,一般需要建立grid用户,使用这个用户管理asm,群集信息.--//在安装过程中,同事的疑问实际上也是 ...
- Excel表格规范
数据处理: 在数据进行分析使用时,需要去除原始数据中的脏数据,让统计数据均为有效数据: 统一表格的格式:去除空格.强制换行符 CLEAN()函数:是去除单元格中的特殊字符: TRIM()函数:去除单元 ...
- JUnit单元测试入门
什么是单元测试 写了个类,要给别人用,会不会有bug?怎么办?测试一下. 用main方法测试好不好?不好! 不能一起运行! 大多数情况下需要人为的观察输出确定是否正确 为什么要进行单元测试 重用测试, ...
- 反射的作用—>实现框架的功能
框架与框架要解决的核心问题 我们做房子卖给用户住,用于用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中.框架与工具类有区别,工具类被用户的类调用,而框架则是 ...
- centos7 安装python2.7与3共存
1.CentOS7默认安装了python2.7.5 2.下载python,到官网下载最新版本. 安装命令为 wget "https://www.python.org/ftp/python/x ...
- Orcale新增、修改、删除字段
一.新增字段 alert table user add( userName VARCHAR2(255 CHAR) ) ; 设置字段不为空, 给出默认值 alert table user add( us ...