返回顶部
首页 > 资讯 > 数据库 >如何理解MySQL Profile在MySQL5.7的简单测试
  • 337
分享到

如何理解MySQL Profile在MySQL5.7的简单测试

2024-04-02 19:04:59 337人浏览 安东尼
摘要

本篇文章给大家分享的是有关如何理解Mysql Profile在mysql5.7的简单测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

本篇文章给大家分享的是有关如何理解Mysql Profile在mysql5.7的简单测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Mysql Profile对于分析执行计划的开销来说,还是有一定的帮助,至少在分析一些性能问题的时候有很多的参考依据。
我在5.6, 5.7版本中进行了测试,没发现差别,还是以5.7为例进行演示吧。
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.10    |
+-----------+
1 row in set (0.00 sec)

传统的使用Profile都是使用show profile这样的命令方式,这个功能默认是关闭的。
mysql> show profiles;
Empty set, 1 warning (0.00 sec)
这个地方可以看到有一个警告,我们看看是什么警告。
mysql> show warnings;
+---------+------+--------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                      |
+---------+------+--------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | 'SHOW PROFILES' is deprecated and will be removed in a future release. Please use PerfORMance Schema instead |
+---------+------+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
原来这种方式已经过期了,新的功能是在performance_schema中开放。当然在5.6, 5.7版本中测试还是可用,我们先简单了解一下,再来看performance_schema怎么用。
Profile相关的几个参数如下:
mysql> show variables like '%profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| have_profiling         | YES   |
| profiling              | OFF   |
| profiling_history_size | 15    |
+------------------------+-------+
3 rows in set (0.00 sec)
可以看到Profileing为OFF,当前默认值为0,代表的是一个意思。
mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
|           0 |
+-------------+
1 row in set, 1 warning (0.00 sec)
have_profiling 用于控制是否开启或者禁用Profiling
profiling_history_size是保留Profiling的数目

当然本质上,Profile的内容还是来自于information_schema.profiling
mysql> select * from information_schema.profiling\G
Empty set, 1 warning (0.00 sec)
这个地方还是有一个警告,还是过期的提示。
mysql> show warnings;
+---------+------+-----------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                     |
+---------+------+-----------------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | 'INFORMATION_SCHEMA.PROFILING' is deprecated and will be removed in a future release. Please use Performance Schema instead |
+---------+------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
我们开启profiling
mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看所有的profiles
mysql> show profiles;
+----------+------------+---------------+
| Query_ID | Duration   | Query         |
+----------+------------+---------------+
|        1 | 0.00018200 | show warnings |
+----------+------------+---------------+
1 row in set, 1 warning (0.00 sec)
我们顺便运行一条SQL
mysql> select count(*)from information_schema.columns;
+----------+
| count(*) |
+----------+
|     3077 |
+----------+
1 row in set (0.07 sec)
然后再次查看,就会看到query_ID会得到刚刚运行的语句。
mysql> show profiles;
+----------+------------+------------------------------------------------+
| Query_ID | Duration   | Query                                          |
+----------+------------+------------------------------------------------+
|        1 | 0.00018200 | show warnings                                  |
|        2 | 0.06627200 | select count(*)from information_schema.columns |
+----------+------------+------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)
可以使用如下的方式来查看profile的信息,比如涉及CPU的明细信息。
mysql> show profile cpu for query 2;
+----------------------+----------+----------+------------+
| Status               | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| checking permissions | 0.000004 | 0.000000 |   0.000000 |
| checking permissions | 0.000053 | 0.000999 |   0.000000 |
| checking permissions | 0.000014 | 0.000000 |   0.000000 |
| checking permissions | 0.000006 | 0.000000 |   0.000000 |
。。。。。
| closing tables       | 0.000005 | 0.000000 |   0.000000 |
| freeing items        | 0.000052 | 0.000000 |   0.000000 |
| cleaning up          | 0.000023 | 0.000000 |   0.000000 |
+----------------------+----------+----------+------------+
100 rows in set, 1 warning (0.00 sec)
除此之外,还有哪些选项呢,可以自由选用。
如何理解MySQL Profile在MySQL5.7的简单测试

上面的内容其实介于使用和过期之间,那么我们来看看新版本中推荐的perforMace_schema是怎么回事。
先切换到performance_schema下,这是MySQL新增的性能优化引擎,在5.6以前是关闭的,5。6,5.7中是默认开启的,5.7切换的时候还会有一句提示。
mysql> use performance_schema
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
使用profile涉及几个表,setup_actors,setup_instruments,setup_consumers
说白了都是配置,都是套路。
默认表setup_actors的内容如下:
mysql> SELECT * FROM setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| %    | %    | %    | YES     | YES     |
+------+------+------+---------+---------+
1 row in set (0.00 sec)
按照官方的建议,默认是启用,可以根据需求禁用。
UPDATE performance_schema.setup_actors SET ENABLED = 'NO', HISTORY = 'NO'
       WHERE HOST = '%' AND USER = '%';
禁用后的内容如下:      
mysql> select * from setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| %    | %    | %    | NO      | NO      |
+------+------+------+---------+---------+
1 row in set (0.00 sec)
然后加入指定的用户
INSERT INTO performance_schema.setup_actors (HOST,USER,ROLE,ENABLED,HISTORY)
       VALUES('localhost','root','%','YES','YES');     
加入成功后的数据内容如下:
mysql> select * from setup_actors;
+-----------+------+------+---------+---------+
| HOST      | USER | ROLE | ENABLED | HISTORY |
+-----------+------+------+---------+---------+
| %         | %    | %    | NO      | NO      |
| localhost | root | %    | YES     | YES     |
+-----------+------+------+---------+---------+
2 rows in set (0.00 sec)
好了,setup_actors的配置就这样,另外两个表的内容修改也是大同小异。
表 setup_consumers 描述各种事件,setup_instruments 描述这个数据库下的表名以及是否开启监控
我统计了一下,两个表的默认数据还不少。
setup_instruments 1006 rows
setup_consumers   15   rows
我们按照官方的建议来修改,可以看到修改的不是一行,而是相关的很多行。
mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    ->        WHERE NAME LIKE '%statement/%';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 192  Changed: 0  Warnings: 0

mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    ->        WHERE NAME LIKE '%stage/%';
Query OK, 119 rows affected (0.00 sec)
Rows matched: 128  Changed: 119  Warnings: 0

mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
    ->        WHERE NAME LIKE '%events_statements_%';
Query OK, 1 row affected (0.01 sec)
Rows matched: 3  Changed: 1  Warnings: 0

mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
    ->        WHERE NAME LIKE '%events_stages_%';  
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
好了配置完成,我们来简单测试一下怎么用。
创建一个test数据库
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
切换到test数据库
mysql> use test
Database changed
创建一个测试表test_profile,插入几行数据。
mysql> create table test_profile as select * from information_schema.columns limit 1,5;
Query OK, 5 rows affected (0.10 sec)
Records: 5  Duplicates: 0  Warnings: 0
运行一下,我们根据这个语句来得到一些详细的统计信息。
mysql> select * from test.test_profile limit 1,2;
根据下面的语句查询一个历史表,从表名可以看出是和事件相关的,感觉越来越像oracle了。
mysql> SELECT EVENT_ID, TRUNCATE(TIMER_WaiT/1000000000000,6) as Duration, SQL_TEXT
    ->        FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%limit 1,2%';
+----------+----------+-------------------------------------------+
| EVENT_ID | Duration | SQL_TEXT                                  |
+----------+----------+-------------------------------------------+
|     4187 | 0.000424 | select * from test.test_profile limit 1,2 |
+----------+----------+-------------------------------------------+
1 row in set (0.00 sec)      
我们通过上面的语句可以得到一个概览,对应的事件和执行时间。
然后到stage相关的历史表中查看事件的详细信息,这就是我们期望的性能数据了。如此一来应该就明白上面的配置表中所要做的工作是什么意思了。
mysql> SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
    ->        FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=4187;
+--------------------------------+----------+
| Stage                          | Duration |
+--------------------------------+----------+
| stage/sql/starting             | 0.000113 |
| stage/sql/checking permissions | 0.000008 |
| stage/sql/Opening tables       | 0.000025 |
| stage/sql/init                 | 0.000062 |
| stage/sql/System lock          | 0.000013 |
。。。
| stage/sql/freeing items        | 0.000031 |
| stage/sql/cleaning up          | 0.000002 |
+--------------------------------+----------+
15 rows in set (0.01 sec)

整体来看,看到这个特性的输出,让我忍不住想起了Oracle中的Datapump,因为输出实在是太像了,很有条理嘛。

以上就是如何理解MySQL Profile在MySQL5.7的简单测试,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解MySQL Profile在MySQL5.7的简单测试

本文链接: https://lsjlt.com/news/66430.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解MySQL Profile在MySQL5.7的简单测试
    本篇文章给大家分享的是有关如何理解MySQL Profile在MySQL5.7的简单测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • 如何进行orion的简单测试
    如何进行orion的简单测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。orion是一个做IO测试的小巧工具,可以测试随机读写,模拟混合负载等。在oracle 11g已经...
    99+
    2023-06-06
  • 如何理解J2ME单元测试理念
    这期内容当中小编将会给大家带来有关如何理解J2ME单元测试理念,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。J2ME Unit是由KentBeck和ErichGamma设...
    99+
    2024-04-02
  • 如何在 Golang 单元测试中调试失败的测试?
    如何调试 golang 单元测试失败?查看错误消息,以了解失败原因。使用 delve 调试器逐步执行测试,检查变量值和代码流程。添加日志语句,以跟踪测试执行并获取更多信息。 如何在 G...
    99+
    2024-05-16
    golang 单元测试调试
  • 如何进行MySQL索引条件下推的简单测试
    本篇文章给大家分享的是有关如何进行MySQL索引条件下推的简单测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 自MySQL 5.6开始,...
    99+
    2024-04-02
  • 如何实现AJAX简单测试代码
    本篇内容主要讲解“如何实现AJAX简单测试代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现AJAX简单测试代码”吧!具体如下:客户端:代码如下:(AJ...
    99+
    2024-04-02
  • MYSQL读写性能测试的简单记录
    进行测试之前首先保证你已经可以对数据库进行读写:参见 要求:对mysql数据库的读写读写性能进行测试。支持多并发、支持调整事物提交记录数。 注意事项: 要运行测试需要 1. 需要修改数据库的配置信息DB_DRIVER、D...
    99+
    2022-08-16
    MYSQL读写性能测试 MYSQL读写性能
  • 如何处理PHP开发中的单元测试和自动化测试
    随着软件开发行业的日益发展,单元测试和自动化测试成为了开发者们重视的环节。PHP作为一种广泛应用于Web开发的脚本语言,单元测试和自动化测试同样也在PHP开发中扮演着重要的角色。本文将介绍如何处理PHP开发中的单元测试和自动化测试,并提供一...
    99+
    2023-10-21
    自动化测试 单元测试 PHP开发
  • 怎样进行MySQL中的事务和锁简单测试
    本篇文章为大家展示了怎样进行MySQL中的事务和锁简单测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一直以来,对于MySQL中的...
    99+
    2024-04-02
  • 如何在单元测试期间注入PersistenceContext
    在单元测试期间注入PersistenceContext有多种方式,下面是其中两种常见的方式:1. 使用模拟的PersistenceC...
    99+
    2023-09-27
    单元测试
  • 如何理解MySQL基准测试和sysbench工具
    如何理解MySQL基准测试和sysbench工具,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言作为一名后台开发,对数据库进行基准测试,...
    99+
    2024-04-02
  • 如何解析mysql pump的性能测试
    如何解析mysql pump的性能测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。   在MySQL 5.7中做逻辑备份恢...
    99+
    2024-04-02
  • 如何在JavaWeb中编写一个单元测试类测试数据库
    本篇文章给大家分享的是有关如何在JavaWeb中编写一个单元测试类测试数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、...
    99+
    2023-06-14
  • 如何理解Angular单元测试中事件触发的实现
    如何理解Angular单元测试中事件触发的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导读这篇文章主要介绍了Angular单元测试之事件触发的实现,文中通...
    99+
    2023-06-04
  • 如何为maven单元测试设置代理
    这篇文章将为大家详细讲解有关如何为maven单元测试设置代理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。背景环境需要设置代理才能够访问外部网络,如果只是运行java程序来访问网络,我们可以...
    99+
    2023-05-31
    maven mave
  • 如何进行MySQL句柄恢复的简单尝试
    如何进行MySQL句柄恢复的简单尝试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 今天突然想起一个问题,那就是对于ibda...
    99+
    2024-04-02
  • 如何进行PHP的单元测试?
    随着软件开发的不断发展,测试已经成为开发过程中不可或缺的一部分。在进行测试时,单元测试是非常重要的一种测试方式。在 PHP 中,使用单元测试可以有效地减少代码中存在的错误,提高代码质量。本文将向你介绍如何进行 PHP 的单元测试。一、什么是...
    99+
    2023-05-14
    PHP 单元测试 测试覆盖率
  • 利用Python中unittest实现简单的单元测试实例详解
    前言 单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nos...
    99+
    2022-06-04
    详解 实例 单元测试
  • 探讨如何在Vue3中编写单元测试
    当今前端开发中,Vue.js 已经成为了一个非常流行的框架。随着 Vue.js 的不断发展,单元测试变得越来越重要。今天,我们将探讨如何在 Vue.js 3 中编写单元测试,并提供一些最佳实践和常见的问题及解决方案。一、为什么要进行单元测试...
    99+
    2023-05-14
    前端 JavaScript Vue.js
  • 如何测试phpmyadmin创建在mysql上的用户
    这篇文章将为大家详细讲解有关如何测试phpmyadmin创建在mysql上的用户,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 INSERT...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作