最近做的数据量上升了,部分表到了上千条的数据,那个速度真是惨不忍睹啊,一个字“慢”!
分析下SQL的问题吧!手动分析,只能看到网上说的那些优化方法。但是瓶颈在那里呢?可以使用explain 的方式解决,但是还是感觉explain 不够详细。
MySQL5.0.37版本以上支持了,profiling ,据说是Jeremy Cole捐献给MySQL社区版本,呵呵。就说说他的使用吧!
profiling 功能可以了解到sql语句消耗资源的更详细的信息。
show profile 的格式如下:
SHOW PROFILE [type [, type] … ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type:
ALL
| BLOCK IO
| CONTEXT SWITCHES
| CPU
| IPC
| MEMORY
| PAGE FAULTS
| SOURCE
| SWAPS
该方式默认是关闭的。
可以通过以下语句查看
mysql>select @@profiling;
+————-+
| @@profiling |
+————-+
| 0 |
+————-+
1 row in set (0.00 sec)
打开功能
mysql>set profiling=1;
执行需要测试的sql 语句:
select inet_ntoa(visit_net) visit_net,sum(totalbytes) as totalbytes,sum(inbytes) as inbytes,sum(totalbytes)-sum(inbytes) as outbytes from
( select * from businessflow where userid=9 ) aa
group by visit_net order by totalbytes DESC limit 0,3
mysql> show profiles\G;
通过指定的Query_ID 来查询指定的sql语句的执行信息:
mysql> show profile for query 1;
+——————————–+———-+
| Status | Duration |
+——————————–+———-+
| starting | 0.000021 |
| checking query cache for query | 0.000085 |
| Opening tables | 0.000036 |
| System lock | 0.000007 |
| Table lock | 0.000071 |
| optimizing | 0.000012 |
| statistics | 0.000013 |
| preparing | 0.000013 |
| executing | 0.000005 |
| Sending data | 0.592819 |
| converting HEAP to MyISAM | 0.026474 |
| Sending data | 0.215715 |
| init | 0.000029 |
| storing result in query cache | 0.000012 |
| optimizing | 0.000005 |
| statistics | 0.000011 |
| preparing | 0.000008 |
| Creating tmp table | 0.000038 |
| executing | 0.000004 |
| Copying to tmp table | 0.235759 |
| converting HEAP to MyISAM | 1.020230 |
| Copying to tmp table on disk | 0.166174 |
| Sorting result | 0.056304 |
| Sending data | 0.000053 |
| end | 0.000004 |
| removing tmp table | 0.003539 |
| end | 0.000008 |
| query end | 0.000004 |
| freeing items | 0.000036 |
| removing tmp table | 0.004107 |
| closing tables | 0.000009 |
| logging slow query | 0.000004 |
| cleaning up | 0.000004 |
+——————————–+———-+
33 rows in set (0.00 sec)
mysql> show profile cpu for query 1;
+——————————–+———-+———-+————+
| Status | Duration | CPU_user | CPU_system |
+——————————–+———-+———-+————+
| starting | 0.000021 | 0.000000 | 0.000000 |
| checking query cache for query | 0.000085 | 0.000000 | 0.000000 |
| Opening tables | 0.000036 | 0.000000 | 0.000000 |
| System lock | 0.000007 | 0.000000 | 0.000000 |
| Table lock | 0.000071 | 0.000000 | 0.000000 |
| optimizing | 0.000012 | 0.000000 | 0.000000 |
| statistics | 0.000013 | 0.000000 | 0.000000 |
| preparing | 0.000013 | 0.000000 | 0.000000 |
| executing | 0.000005 | 0.000000 | 0.000000 |
| Sending data | 0.592819 | 0.592037 | 0.000000 |
| converting HEAP to MyISAM | 0.026474 | 0.000000 | 0.020002 |
| Sending data | 0.215715 | 0.212014 | 0.008000 |
| init | 0.000029 | 0.000000 | 0.000000 |
| storing result in query cache | 0.000012 | 0.000000 | 0.000000 |
| optimizing | 0.000005 | 0.000000 | 0.000000 |
| statistics | 0.000011 | 0.000000 | 0.000000 |
| preparing | 0.000008 | 0.000000 | 0.000000 |
| Creating tmp table | 0.000038 | 0.000000 | 0.000000 |
| executing | 0.000004 | 0.000000 | 0.000000 |
| Copying to tmp table | 0.235759 | 0.240015 | 0.000000 |
| converting HEAP to MyISAM | 1.020230 | 0.988061 | 0.032002 |
| Copying to tmp table on disk | 0.166174 | 0.160010 | 0.000000 |
| Sorting result | 0.056304 | 0.052004 | 0.008001 |
| Sending data | 0.000053 | 0.000000 | 0.000000 |
| end | 0.000004 | 0.000000 | 0.000000 |
| removing tmp table | 0.003539 | 0.000000 | 0.000000 |
| end | 0.000008 | 0.000000 | 0.000000 |
| query end | 0.000004 | 0.000000 | 0.000000 |
| freeing items | 0.000036 | 0.000000 | 0.000000 |
| removing tmp table | 0.004107 | 0.000000 | 0.008000 |
| closing tables | 0.000009 | 0.000000 | 0.000000 |
| logging slow query | 0.000004 | 0.000000 | 0.000000 |
| cleaning up | 0.000004 | 0.000000 | 0.000000 |
+——————————–+———-+———-+————+
33 rows in set (0.00 sec)
从上上面可以看到,
| Sending data | 0.592819 |
| converting HEAP to MyISAM | 0.026474 |
| Sending data | 0.215715 |
| Copying to tmp table | 0.235759 |
| converting HEAP to MyISAM | 1.020230 |
| Copying to tmp table on disk | 0.166174 |
以上几项 耗时较长,所以考虑把该表转换为MyISAM 以供查询提高速度。并且提高的值
测试完毕以后 ,关闭参数:
mysql> set profiling=0
再次打开程序,发现等待速度降低。问题有所好转。OK!
分享到:
相关推荐
在本篇中,我们将聚焦于三个MySQL优化工具:`SHOW`命令、慢查询日志和`EXPLAIN`与`PROFILING`。 一、SHOW命令 `SHOW`命令是MySQL中的一个非常实用的工具,用于获取数据库系统的信息。它可以帮助我们查看数据库的...
总之,MySQL的Query Profiling是数据库管理员和开发者的有力工具,通过监控和分析查询的资源使用情况,可以有效地定位性能瓶颈,进行有针对性的优化,提升整体系统性能。在实践中,应定期检查和分析Profile结果,...
MySQL的内置性能分析工具——Profiling,是数据库管理员和开发者用于优化SQL查询性能的重要利器。本文将详细介绍如何使用MySQL的Profiling功能,以及它在性能分析中的应用。 首先,我们可以通过`show variables ...
`SHOW PROFILES`是MySQL提供的一种工具,用于分析SQL语句在执行过程中的资源消耗情况,帮助我们定位性能瓶颈。本篇将深入讲解`SHOW PROFILES`的使用方法和解析结果。 首先,`SHOW PROFILES`默认是关闭的,我们需要...
### MySQL SQL性能分析知识点详解 #### 一、SQL执行频率分析 - **概念与作用**: - SQL执行频率分析是通过查看特定SQL语句(如INSERT、UPDATE、DELETE、SELECT)的执行次数来评估数据库的工作负载特征的一种方法。...
MySQL提供了多种工具来帮助用户分析和优化其性能,主要包括慢查询日志、`mysqldumpslow`工具、`SHOW PROCESSLIST`命令、以及`PROFILING`功能等。通过这些工具,我们可以对数据库的操作进行详细的监控与分析,进而找...
MySQL的Profiler功能是一种用于分析SQL语句执行性能的工具,它可以帮助数据库管理员和开发者了解查询在执行过程中的各个阶段所消耗的时间,从而优化查询效率。Profiler功能自MySQL 5.0.37版本开始引入,提供了对SQL...
11. **开启SQL执行阶段的Profiling**:`set global profiling=on`允许记录每个查询的不同阶段所花费的时间,有助于分析性能瓶颈。 12. **查看用户信息**:在MySQL 8.0中,用户密码存储在`authentication_string`...
第2章:寻找瓶颈:基准测试(Benchmarking)与性能分析(Profiling) 32 第3章:架构优化和索引 80 第4章:查询性能优化 152 第5章:MySQL高级特性 204 第6章:优化服务器设置 265 第7章:操作系统和硬件优化 305 第...
7. **性能监控与调优**:书中会介绍如何使用性能监视工具,如SHOW STATUS、SHOW VARIABLES和性能_schema,以及如何分析和调整MySQL的配置参数以达到最佳性能。 8. **内存管理与缓存**:MySQL的缓冲池管理内存,有效...
感谢 有爱玫瑰的博文:mysql 的 sql 性能分析器主要用途是显示 sql 执行的整个过程中各项资源的使用情况。分析器可以更好的展示出不良 SQL 的性能问题所在。下面我们举例介绍一下MySQL SQL Profiler的使用方法:首先...
MySQL中的`PROFILE`功能是一种用于分析SQL语句执行性能的工具,它可以帮助开发者了解SQL语句在执行过程中各个阶段的时间消耗,从而优化数据库操作。在MySQL 5.0.3版本之后,`PROFILE`功能被引入,但它在较新的版本...