《高性能Mysql》学习笔记(二)(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 《高性能Mysql》学习笔记(二)(上)

前言


接续上文继续介绍:《高性能Mysql》学习笔记(一)


mysql 时间线



基准测试



为什么需要基准测试


基准测试策略


  • 基于mysql 单独测试 - 单组件式
  • 对整个系统整体测试 - 集成式
    使用整个系统测试原因主要如下


如果不需要关注整体应用,只关注msyql 性能


测试指标


  • 吞吐量
  • 响应时间或者延迟
  • 并发性
  • 可扩展性

应当避免以下情况再进行基准测试


获取系统性能和状态


获取基准测试结果


运行基准测试并分析结果


使用 shell , php, perl 都可以实现


结果分析图表

gnuplot > plot "qps-per-5-seconds" using 5 w lines title "qps"


基准测试工具


  • apach AB
  • http_load
  • jmeter


单组件式测试工具


  • mysqlslap
  • 包含在mysql5.1 的发行包当中,会自动生成查询schema的select 语句
  • mysql benchmark suite (sql-bench)
  • 优点:单线程,测试服务器执行查询的速度。
  • 有大量预定义的测试
  • 缺点:单用户模式,测试数据集很小而且无法指定数据
  • 无法测试多cpu能力
  • super mack
  • 用于 mysql 和 postgresql 基准测试工具
  • database test suite
  • 类似工业标准的测试工具
  • dbt2 免费的toc-c oltp 测试工具
  • percona's tpcc-mysql tool
  • mysql 高性能并发作者自己制作
  • sysbench
  • 多线程系统压测工具
  • 支持lua 语言


msyql 的 benchmark() 函数


Mysql 内置,可以测试某些特定操作的执行速度

方便的测试某些特定操作性能,比如md5() 比 sha1() 函数快


基准测试案例:

重点熟悉 sysbench 测试 ,因为和mysql 自身的设计最为贴合


服务器性能剖析


性能优化简介


一句话概括:性能即响应时间


原则


  1. 一定的工作负载之下尽可能的降低响应时间
  2. 无法测量就无法有效优化


忌讳


  1. 错误的时间启动和停止测量
  2. 测量的是聚合后的信息,而不是目标活动本身

完成一项任务可以分成两部分

  1. 执行时间:优化通过测量定位不同的子任务花费的时间,优化一些子任务,降低子任务的执行效率或者提升
  2. 等待时间

如何判断测量是正确的?

测量到底有多么不准确,记住一点,使用的测量数据而不是实际数据,测量数据也有多种表现。很容易推导出错误的结论


性能剖析进行优化



任务结束时间减去启动时间得到响应时间


性能剖析两种类型


  1. 基于时间分析
  1. 某时候执行时间就是在等待
  2. 比如i/o或者查询等待时间过久
  1. 基于等待分析


理解性能剖析


将最重要的任务展示在前面,但是没有显示的信息也很重要

值得优化的查询:

  1. 一些只占总响应时间比重很小的查询不值得优化
  2. 如果优化成本大于收益,要停止优化!

异常情况:

某些任务没有性能剖析输出也要优化,比如某些任务执行次数很少,但每次都很慢

未知的未知

好的剖析工具尽可能显示“丢失的时间”

丢失的时间: 任务的总时间和实际测量时间时间的差

被掩藏的细节:

平均值不能完全相信和作为根据

应用程序的性能剖析:

对于任何需要消耗时间的任务都可以进行性能分析

实用软件: New Relic


捕获查询到日志文件当中


  • mysql 5.0 之前, 慢查询日志的响应时间是秒
  • mysql 5.1 之后,慢查询被加强,可以做到微秒级别的查询

慢查询日志是进度最高测量查询的日志,开销几乎可以忽略不计,但是会消耗大量磁盘空间,


percona server 慢查询日志


  • 通过--processlist 选项不断查看 show full processlist 的输出
  • 通过抓取 tcp 网络包,根据mysql 客户端 /服务端 通信协议进行剖析

建议: 在服务器上使用慢查询日志捕获所有的查询

应该首先生成一个剖析报告,在进行慢查询


剖析报告


剖析单条查询


1. 使用 show profile

mysql 5.1 之后版本引入,默认是禁用的,但是可以通过服务器变量在连接中动态更改mysql> set profiling = 1

开启后会测量查询执行相关操作的状态

可能被 performance scheema 取代

该工具会讲剖析信息做成一张临时表

示例

  1. 执行下列语句


  1. 返回997行数据


  1. 继续看待下面输出
  2. 如果不使用上面方法,则使用下列方法


2. 使用 show status


该命令返回了一些计数器,既有 服务器界别全局计数器,也有基于某个连接的会话级别计数器,show global status 可以查询服务器启动时候开计算查询次数的统计

全局计数器也会出现在show status

猜测操作代价或者消耗时间较多的,可以使用句柄计数器, 临时文件和表计算器

示例


3. 使用慢查询日志(重点)


通过 pt_query_digest 发现“坏查询”

# query 1 :0 ops, 0x concurrency, ID oxeexxxs at byte 3214 ___

使用下面方法查看详情

tail -c +3214 /path/to/query.log | head -n100


4. 使用performance Schema

mysql 5.5 之后新增还不支持查询级别的剖析信息

下面是显示系统等待主要原因的查询:


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
132 6
|
1月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
59 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
71 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
67 1
|
5月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
39 0
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
58 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
139 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
39 6
|
3月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
50 4

热门文章

最新文章

下一篇
无影云桌面