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性能优化学习笔记的更多相关文章

  1. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  2. mysql性能优化学习笔记(1)优化目的、方向及数据库准备

    前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...

  3. mysql性能优化学习笔记(2)如何发现有问题的sql

    一.使用mysql慢查询日志对有效率问题的sql进行监控      1)开启慢查询       show variables like ‘slow_query_log’;//查看是否开启慢查询日志   ...

  4. mysql性能优化学习笔记-存储引擎

    mysql体系架构 客户端(java.php.python等) mysql服务层(连接管理器.查询解析器.查询优化器.查询缓存) mysql存储引擎(innodb.myisam等) 存储引擎针对表而言 ...

  5. mysql性能优化学习笔记(6)数据库配置优化&硬件优化

    一.操作系统配置优化:          1. 网络方面,修改/etc/sysctl.conf文件,增加tcp支持的队列数,减少断开连接时,资源的回收.          2. 打开文件数的限制.修改 ...

  6. mysql性能优化学习笔记(4)索引的优化

    一.选择合适的索引列     1.在where,group by,order by,on从句中出现的列     2.索引字段越小越好(因为数据库的存储单位是页,一页中能存下的数据越多越好 )      ...

  7. mysql性能优化学习笔记(3)常见sql语句优化

    一.max()优化mysql> explain select max(payment_date) from payment;+----+-------------+---------+----- ...

  8. mysql性能优化学习笔记(5)数据库结构优化

    一.选择合适的数据类型    1.使用可存下数据的最小的数据类型    2.使用简单地数据类型,Int<varchar    3.尽可能使用not null定义字段    4.尽量少用text, ...

  9. Pandas 性能优化 学习笔记

    摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...

随机推荐

  1. Nginx负载均衡配置实例详解(转)

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可 ...

  2. PHP本地通过映射,实现多域名访问

    PHP本地通过映射,实现多域名访问 第一步:先在C盘下的windows/system32/drivers/etc/hosts文件加上 127.0.0.1       localhost    127. ...

  3. Xcode常用技巧(2)-使Xcode在创建类时自动添加前缀

    在Xcode5之前的版本中,Xcode在新建项目时,会要求为一个类指定一个前缀,这样方便我们区分相同名字的类.而从Xcode6开始,由于Swift增加了命名空间的关系,Xcode在新建项目时,不会再要 ...

  4. thinkphp笔记16-20集

    16.ThinkPHP3.1.3使用视频教程--独立分组配置项与目录部署详解_高清 17.ThinkPHP3.1.3使用视频教程--RBAC详解(一)思路分析_高清 18.ThinkPHP3.1.3使 ...

  5. embed 层级太高

    它怎么就好了,凭什么就好了.为什么就好了.我到底当时是哪里写错了.怎么个情况 兼容Firefox ,IE的flash透明和flash置底代码 <object classid="clsi ...

  6. 新年新技术:HTTP/2

    新的一年,项目也要带着发展的眼光往前走,得跟上潮流,当然前提是自己真的用的上. 用的上用不上都得先简单了解下. 2月下旬Google发布了首个基于HTTP/2的RPC框架GRPC,它是基于HTTP/2 ...

  7. VC++6.0MFC运行的简单流程

    背景: 由于下位机做的一些东西,总是需要通过上位机来验证,以及为了直观给客户展示下位机的功能,所以时常需要编写一些简单的APP.今天就以VC++6.0为例,简单的记录下该如何快速的创建一个APP. 正 ...

  8. Swift语法入门

    正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...

  9. LR测试登陆后进行的操作时 绕过登录

    oadrunner web_add_cookie web_add_cookie 这个的函数原来真的能过逃过登录,哈哈,这个苦苦纠结我的问题呀. 函数原型:int web_add_cookie( con ...

  10. webApp前端开发技巧总结

    自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程序,运行在高端的移动终端设备.我相信各位童鞋应该和我一个样子, ...