惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
小众软件
小众软件
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
J
Java Code Geeks
WordPress大学
WordPress大学
The Cloudflare Blog

Jiajun的技术笔记

你好,2026! TiDB 源码阅读(六):TiDB Coprocessor 源码解析 性能优化的核心思想 TiDB 源码阅读(五):索引 TiDB 源码阅读(四):AST、逻辑计划、物理计划 CockroachDB Serverless Architecture podman 无故退出 Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal Replace docker with podman Using xmonad with xfce4 A RC script for freebsd frpc 自己动手写一个k8s controller AI 会取代你的(编程)岗位吗? 自建DERP服务器提升Tailscale连接速度(使用Nginx转发) 自动升级Docker容器 再读《程序员修炼之道-从小工到专家》 让浏览器下载文件 再读《软件随想录》/《黑客与画家》/《软技能》 HTTP 压力测试中的 Coordinated Omission 2的补码 编程语言中的 context 是什么? flutter macOS 构建出错 Flatpak 使用小记 Golang CAS 操作是怎么实现的 PostgreSQL 当MQ来使用 Clash 结合 工作VPN 的网络设计 使用 PostgreSQL 搭建 JuiceFS PostgreSQL 配置优化和日志分析 有GitHub Copilot?那就可以搭建你的ChatGPT4服务 窗口函数的使用(以PG为例)
程序员的MySQL手册(二): 监控与benchmark
Jiajun Huang · 2020-07-23 · via Jiajun的技术笔记

这一节我们主要讲解如何监控MySQL的性能数据,以及如何对MySQL进行压测。

使用Prometheus进行监控

MySQL的监控方案有很多,我们使用Prometheus来进行监测,首先要安装prometheus mysql exporter:

$ sudo apt install prometheus-mysqld-exporter

在MySQL中创建如下用户:

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

修改 /etc/default/prometheus-mysqld-exporter 中的 DATA_SOURCE_NAME 连接串。

之后要在Prometheus中加上对该节点的配置,至于Prometheus本身的安装配置,可以参考其它教程,我们这一节只专注于Prometheus的 安装与配置。

  - job_name: 'mysql'
    static_configs:
    - targets: ['192.168.122.220:9104']
      labels:
        instance: 'debian.mysql'

再往Grafana上添加一个面板,之后就可以看到MySQL的性能数据了,如图:

Grafana MySQL面板

sysbench对MySQL进行压测

这一节基本上可以算是一个简单的sysbench教程

sysbench 的基本用法是 sysbench <测试名称> <各类选项> 命令,其中命令包括 prepare run cleanup help version 这几个。而 测试名称,则包括 fileio, cpu, memory, threads, mutex,以及对数据库的一些测试脚本,他们在 /usr/share/sysbench/ 下, 例如如果要测试 oltp_insert.lua 就写为 oltp_insert 。

测试MySQL时,需要先准备一些数据,因此三个命令依次是 prepare, run, cleanup,依次是准备数据,执行测试,清除测试数据。 我们来看看实例。

$ sysbench oltp_insert --db-driver=mysql --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-user=root --mysql-password=new_password prepare
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Creating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
$ sysbench oltp_insert --db-driver=mysql --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-user=root --mysql-password=new_password run
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           1909
        other:                           0
        total:                           1909
    transactions:                        1909   (190.76 per sec.)
    queries:                             1909   (190.76 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0039s
    total number of events:              1909

Latency (ms):
         min:                                    0.99
         avg:                                    5.23
         max:                                   21.17
         95th percentile:                        9.06
         sum:                                 9989.73

Threads fairness:
    events (avg/stddev):           1909.0000/0.00
    execution time (avg/stddev):   9.9897/0.00

$ sysbench oltp_insert --db-driver=mysql --mysql-host=127.0.0.1 --mysql-db=sbtest --mysql-user=root --mysql-password=new_password cleanup
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Dropping table 'sbtest1'...

通过对对应部分的压测,我们可以得到一个大致的数据,即当前配置情况下,数据库实例大概能跑到一个什么样的情况。从而为之后的 变更(如数据库升级,数据库是否到了瓶颈)等提供一个参考数据。

总结

这篇文章中我们主要是搭建了Prometheus MySQL的监控,和学习使用了sysbench这个工具,从而可以得到一些数据库的基准数据,这个 数据可以为之后对数据库实例的使用作为参考。

系列目录: