mysql性能优化学习笔记
mysql性能优化
硬件对数据库的影响
CPU资源和可用内存大小
- 服务器硬件对mysql性能的影响
- 我们的应用是CPU密集型?
- 我们的应用的并发量如何?
数量比频率更好
64位使用32位的服务器版本
32位不能使用超过4G的内容,因此选择的时候需要注意。
myisam
innodb
磁盘的配置和选择
机械硬盘:
存储容量
传输速度
访问时间
主轴转速
物理尺寸使用RAID增加传统机器硬盘的性能
RAID:一系列小磁盘组成大磁盘,数据冗余
RAID 0 :成本最低,但是没有数据冗余会造成数据丢失。
RAID 1 :磁盘镜像,一个磁盘的数据镜像到另外一个磁盘。数据冗余性好,读性能好。
RAID 5 :分布式奇偶校验磁盘阵列。如果单一一块磁盘损坏可以通过其余磁盘值进行恢复,如果同时两块损坏则无法恢复。写比较慢。读比较快。
RAID 10 :是数据库最好的选择。又称为分片镜像。使用固态存储SSD或PCIe卡
相比传统机械硬盘有更好的随机读写性能
有更好的并发支持
但固态磁盘更容易损坏适用于大量随机IO的情况
使用解决单线程IO负载的IO瓶颈
如果只有一个ssd硬盘,应该使用在从服务器上确保数据的安全。使用网络存储SAN和NAS
SAN设备通过光纤连接到服务器上,设备通过块接口访问。服务器可以当作硬盘使用。可以使用大量的顺序读写
随机访问和随机写比较慢NAS是通过网络访问协议进行访问,有网络访问的延迟。
使用场景:
不适用于数据库存储
适用于数据库备份
** CPU **
> * 64位的CPU运行64位的系统
> * 高并发的场景,cpu数量比频率重要
> * CPU密集型的场景和复杂sql则频率越高越好
** 内存 **
- 采用主板能使用的最高频率的内存
- 内存尽可能大
** I/O **
- PCIe > SSD > Raid > 机械硬盘 > 网络存储(SAN)
操作系统对性能的影响-MySQL适合的操作系统
选择服务器版本,而不是桌面版本。
CentOS系统参数优化
内核相关参数(/etc/sysctl.conf)
网络性能设置
端口监听队列:net.core.somaxconn=65535
接受数据的速率:net.core.netdev_max_backlog=65535
未获得连接的请求和保存在内存中的数量,超过时会被丢弃:net.ipv4.tcp_max_sync_backlog=65535
- 上述三个应该同时调大
tcp连接处理等待时间:net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
- 上述三个主要加快网络连接的回收。
net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
- 缓冲区接受和发送数据大小的最大值和默认值
探测的时间间隔(s): net.ipv4.tcp_keepalive_time=120
消息重发时的时间间隔(s): net.ipv4.tcp_keepalive_intvl=30
tcp连接超时前最多发送几次: net.ipv4.tcp_keepalive_probes=3
- 内存
kernel.shmmax = 4292967295
- 这个参数应该设置得足够大,以便于在一个共享内存段中容纳下整个Innodb缓冲池的大小
- 这个值的大小对于64位linux系统,可以取内存最大值-1byte,建议大于物理内存的一半。一般大于Innodb缓冲池的大小即可。
vm.swappiness = 0 :当内存不足时会对系统性能产生比较大的影响。
Linux系统内存交换区(swap):
vm.swapppiness = 0
当系统内存不足时会将一些虚拟内存写入磁盘交换区(swap)中。
由于使用swap会对mysql性能产生灾难性的影响。因此对mysql服务器是否使用swap分区存在一些争议。
如果禁用swap分区也会带来一些影响:
- 降低操作系统的性能
- 容易造成内存溢出、崩溃或者被操作系统kill掉
就上述影响而言,保留swap分区还是必要。
vm.swapppiness是告诉操作系统,除非内存完全满了,否则不使用swap。
增加系统资源限制(/etc/security/limit.conf)
打开文件数量的限制,加到/etc/security/limit.conf末尾即可:
* soft nofile 65535
* hard nofile 65535
*表示对所有用户有效soft表示当前系统生效的配置hard表示系统中能设置的最大值nofile表示所限制的资源是打开文件的最大数量65535限制的数量
磁盘调度策略(/sys/block/devname/queue/scheduler)
cat /sys/block/devname/queue/scheduler
noop anticipatory deadline [cfq] # 完全公平队列,一般用于桌面系统
noop:电梯式调度,饿死读满足写
deadline:截至时间策略,`数据库类型最好的选择`
anticipatory:和deadline一样,只是最后一次读操作后要等待6毫秒。合并多次写为一次写,适合于文件服务器,对数据库服务器表现很差。
将磁盘调度策略改为deadline
echo deadline > /sys/block/devname/queue/scheduler
文件系统对性能的影响
ext3、ext4、xfs(性能更高),上诉都具备日志功能,对数据安全性较好。
ext3、ext4系统挂载参数(/etcc/fstab)
- data=writeback(Innodb最好的选择)|ordered|journal
- noatime,访问时间
- nodiratime,目录访问时间
/dev/sda1/ext4 noatime,nodiratime,data=writeback 1 1
mysql性能优化学习笔记的更多相关文章
- mysql性能优化学习笔记-参数介绍及优化建议
MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...
- mysql性能优化学习笔记(1)优化目的、方向及数据库准备
前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...
- mysql性能优化学习笔记(2)如何发现有问题的sql
一.使用mysql慢查询日志对有效率问题的sql进行监控 1)开启慢查询 show variables like ‘slow_query_log’;//查看是否开启慢查询日志 ...
- mysql性能优化学习笔记-存储引擎
mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言 ...
- mysql性能优化学习笔记(6)数据库配置优化&硬件优化
一.操作系统配置优化: 1. 网络方面,修改/etc/sysctl.conf文件,增加tcp支持的队列数,减少断开连接时,资源的回收. 2. 打开文件数的限制.修改 ...
- mysql性能优化学习笔记(4)索引的优化
一.选择合适的索引列 1.在where,group by,order by,on从句中出现的列 2.索引字段越小越好(因为数据库的存储单位是页,一页中能存下的数据越多越好 ) ...
- mysql性能优化学习笔记(3)常见sql语句优化
一.max()优化mysql> explain select max(payment_date) from payment;+----+-------------+---------+----- ...
- mysql性能优化学习笔记(5)数据库结构优化
一.选择合适的数据类型 1.使用可存下数据的最小的数据类型 2.使用简单地数据类型,Int<varchar 3.尽可能使用not null定义字段 4.尽量少用text, ...
- Pandas 性能优化 学习笔记
摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...
随机推荐
- 程序日志输出实现-Log4j
学习开发的过程中,我们都应该用过System.out.println():来做一些调试工作,有时候确实很有用有没有.但是这种简单粗暴的方式让程序中到处存在着sysout.这种方式难免会有性能的影响,维 ...
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...
- VisualStudio基本使用(1)-显示行号
"工具"-"选项"-"文本编辑器"-"C/C++"-"常规",勾选"行号"复选框 ...
- [CentOS]安装命令行终端Terminator工具
摘要 Terminator是一款跨平台的终端工具,使用的是 GPL 许可证,提供了很多高级的功能.它没有 Guake 和 Yakuake 那样光鲜,但绝对是一款重型武器.它提供的功能包括界面分块,将自 ...
- oracle中一些用法总结
1. case用法: --简单case函数 case sex when '1' then 'boy' when '2' then 'girl' else '其他' end; --case搜索函数 ca ...
- Mastering Web Application Development with AngularJS 读书笔记-前记
学习AngularJS的笔记,这个是英文版的,有些地方翻译的很随意,做的笔记不是很详细,用来自勉.觉得写下来要比看能理解的更深入点.有理解不对的地方还请前辈们纠正! 一.关于<Mastering ...
- Docker容器基础知识学习
Docker作为操作系统层面的轻量级的虚拟化技术,凭借简易的使用.快速的部署以及灵活敏捷的集成等优势,迅速发展目前最为火热的技术. 1.云计算服务是一种资源管理的资源服务,该模式可以实现随时随地.便捷 ...
- hessian接口参数,子类与父类不能有同名字段解决方法
hessian默认是使用 com.caucho.hessian.io.JavaSerializer 序列化,同名字段子类字段值被赋值两次,最终用父类null值赋给了子类同名字段,解决方法就是 指定序列 ...
- vue.js 简单入门
转载自:http://blog.csdn.net/violetjack0808/article/details/51451672 <!DOCTYPE html> <html lang ...
- css 设计总结
一.背景图片的拉伸: backgroud-size 说明: http://www.w3school.com.cn/cssref/pr_background-size.asp 效果: http:// ...