影响数据库性能的因素:

  1. SQL 脚本
  2. 数据库服务器配置
  3. 网卡流量
  4. 磁盘 IO
  5. 大表操作
  6. 大事务操作
  7. 存储引擎
  8. 数据库参数配置

1. SQL 脚本

超高的 QPS 和 TPS

  • TPS:英文全称是 Transactions Per Second,即服务器每秒处理的事务数。TPS 包括一条消息入和一条消息出,加上一次用户数据库访问。这里涉及到一个概念,就是事务。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
  • QPS:英文全称是 Queries Per Second,即每秒查询率。QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。举个例子:假设数据库处理一条 SQL 需要 10ms,那么 1s 就可以处理 100 条 SQL,那么我们说它 QPS<=100;假设数据库处理一条 SQL 需要 100ms,那么 1s 就可以处理 10 条 SQL,那么我们说它 QPS<=10

数据库连接被占满

数据库的连接数必然是有限的,在 MySQL 中,我们可以通过 max_connections 来设置数据库的连接数(这个值默认是 100,生产环境下这个值可以适当调大)。慢 SQL 由于处理时间较长,因此占用数据库连接的时间也较长,在高并发环境下这样就容易导致数据库连接被占满。

超高的 CPU 使用率

慢 SQL 还会导致超高的 CPU 使用率,超高的 CPU 使用率会导致 CPU 资源耗尽进而出现宕机。

2.数据库服务器配置

这个应该好理解,不需要我多说吧。

服务器的硬件如 CPU、内存、磁盘 IO 等都会影响到 MySQL 性能,操作系统也会影响到 MySQL 性能

3.网卡流量

网卡 IO 被占满了一样也是没法操作数据库。

  • 减少从服务器的数量,因为从服务器需要从主服务器同步数据,会占用网卡 IO(当然是在合理的范围内减少从服务器的数量)。
  • 数据分级缓存,避免突然的缓存失效对数据库形成冲击。
  • 避免 select *,不仅浪费时间,还浪费网络流量。
  • 分离业务网络和服务器网络。

4.磁盘 IO

磁盘 IO 对数据库性能的影响也是显而易见的,因为数据库无论怎么管理数据,最终都是要存入到硬盘中的,所以磁盘 IO 对数据库的影响也就非常重要了。但是这个问题的解决,就只能使用更好更快的磁盘设备,例如 SSD。

5.大表操作

  1. 慢查询:毕竟数据量大了,想要过滤出自己想要的数据,肯定费时间。从上千万上亿条数据中找出自己想要的数据,也会产生大量的磁盘 IO。
  2. DDL 操作恐怖:在大表上进行表定义操作也是一件非常恐怖的事情,例如建立索引、添加/删除 。

6.大事务操作

一些运行时间比较长,涉及到数据比较多的事务,我们可以称之为大事务。大事务会锁定很多条数据进行处理,这样就容易造成大量的阻塞和锁超时,并且一旦出错发生回滚,回滚所需要的时间也会比较长,而且在回滚期间数据依然处于被锁的状态。

由于大事务耗时较长,需要等到主库事务执行完毕后,将操作日志写入 binlog,然后从库读取 binlog 进行同步,这样势必会导致主从延迟。

解决大事务,两个思路:

  1. 避免一次性处理太多数据。
  2. 移除事务中不必要的 SELECT 操作。

7.存储引擎

使用 MySQL 我们可以选择不同的存储引擎,不同的存储引擎特点不同,最终对数据库的影响也不同。

MyISAM 不支持事务,而且是表级锁;InnoDB 是事务级存储引擎,支持行级锁,也支持事务的 ACID 特性。

8.数据库参数配置

MySQL 的性能的更多相关文章

  1. 1229【MySQL】性能优化之 Index Condition Pushdown

    转自http://blog.itpub.net/22664653/viewspace-1210844/  [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...

  2. 优化MySQL数据库性能的八大方法

    本文探讨了提高MySQL 数据库性能的思路,并从8个方面给出了具体的解决方法. 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就 ...

  3. mysql服务性能优化—my.cnf配置说明详解

    MYSQL服务器my.cnf配置文档详解硬件:内存16G [client]port = 3306socket = /data/3306/mysql.sock [mysql]no-auto-rehash ...

  4. 15 个有用的 MySQL/MariaDB 性能调整和优化技巧(转载的一篇好文)

    MySQL 是一个强大的开源关系数据库管理系统(简称 RDBMS).它发布于 1995 年(20年前).它采用结构化查询语言(SQL),这可能是数据库内容管理中最流行的选择.最新的 MySQL 版本是 ...

  5. 深入理解MySQL开发性能优化.pptx

    深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.

  6. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  7. MySQL数据库性能优化的关键参数(转)

    我们在进行数据库管理和开发中经常会遇到性能问题,这就涉及到MySQL的性能优化.通过在网络上查找资料和笔者自己的尝试,我认为以下系统参数是比较关键的: 关键参数一:back_log 要求 MySQL ...

  8. MySQL 数据库性能优化之索引优化

    接着上一篇 MySQL 数据库性能优化之表结构,这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引 ...

  9. 浅谈MySQL 数据库性能优化

    MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...

  10. 第6章 影响 MySQL Server 性能的相关因素

    前言: 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的大部分数据操作都是通过数据库管理软件所提供的相关接口 ...

随机推荐

  1. 云原生PaaS平台通过插件整合SkyWalking,实现APM即插即用

    一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 APM,专为云原 ...

  2. C语言中的指针的小标可以是负数

    首先,创建一个正常的数组 int A[20];.然后用指针指向其中间的元素 int *A2 = &(A[10]); 这样,A2[-10 ... 9] 就是一个可用的有效范围了. 1 2 3 4 ...

  3. 自然语言式parsing

    got NUM(1) Is NUM(1) an expr? Is NUM(1) a term? Is NUM(1) a number? is_term got -(-) -(-) was back i ...

  4. Scala(七)【异常处理】

    目录 一.try-catch-finally 二.Try(表达式).getOrElse(异常出现返回的默认值) 三. 直接抛出异常 一.try-catch-finally 使用场景:在获取外部链接的时 ...

  5. C++自定义字符串类

    //header.h #ifndef _HEADER_H #define _HEADER_H #define defaultSize 128 #include<iostream> #inc ...

  6. Java打jar包详解

    Java打jar包详解 一.Java打jar包的几种方式https://www.cnblogs.com/mq0036/p/8566427.html 二.MANIFEST.MF文件详解https://w ...

  7. Linux下强制踢掉登陆用户

    1.pkill -kill -t   tty 例:pkill -kill -t tty1

  8. Oracle中的instr函数

    最近修改某个条件,由原来输入一个数据修改为可以输入多个,如图所示: 在实现时用到了regexp_substr函数进行分割连接起来的数据,查询时还用到了instr函数进行判断,但出现了问题,当子库存输入 ...

  9. 技术预演blog

    canal整合springboot实现mysql数据实时同步到redis spring+mysql集成canal springboot整合canal监控mysql数据库 SpringBoot cana ...

  10. Linux学习 - 系统命令sudo权限

    1 功能 root把超级用执行的命令赋予普通用户执行 2 使用 visudo 或 vim /etc/sudoers 说明: root 用户名 ALL=(ALL) 被管理主机的地址=(可使用的身份) A ...