高性能的MySQL(2)慢查询

简介:
+关注继续查看

一、剖析MySQL查询

1、首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具。

a、开始mysql的慢查询,修改my.conf

1
2
3
4
5
6
7
8
9
10
11
[mysqld]
#开启慢查询
log_slow_queries = ON
#指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
log-slow-queries = /usr/local/mysq/var/slowquery.log
#记录超过的时间,默认为10s
long_query_time = 1
#log下来没有使用索引的query,可以根据情况决定是否开启
log-queries-not-using-indexes
#执行速度较慢的管理命令(比如OPTIMEZE TABLE)也会被记录
log-slow-admin-statements

b、查看当前信息

155531979.png

c、写存储过程,生成一个500W记录的表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#生成随机字符串函数,在存储过程中调用
delimiter $$
create function rand_string(n intreturns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
declare return_str varchar(255) default '';
declare int default 0;
while i<n do
set return_str = concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i = i + 1;
end while;
return return_str;
end
$$
delimiter ;
#生成随机数字,在存储过程中调用
delimiter $$
create function rand_num() returns int(5)
begin
declare int default 0;
set i = floor(10+rand()*500);
return i;
end
$$
delimiter ;
#定义存储过程
delimiter $$
create procedure insert_emp(start int(10),max_num int(10))
begin
declare int default 0;
set autocommit = 0;
repeat
set i = i+1;
insert into emp values((start+i),rand_string(6),'SALESMAN',0001,2000,400,rand_num(),curdate());
until i = max_num
end repeat;
end
$$

d、查看表数据

162428446.png

e、生成一条慢查询

163504167.png

f、查看日志,会有一条这样的记录

1
2
3
4
5
# Time: 131010 16:31:11
# User@Host: root[root] @ localhost []
# Query_time: 1.045439  Lock_time: 0.000057 Rows_sent: 1  Rows_examined: 5000000
SET timestamp=1381393871;
select * from emp where id=1000000;






















本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1306928,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
存储 负载均衡 关系型数据库
一文读懂MySQL高性能优化方案全家桶
一文读懂MySQL高性能优化方案全家桶
|
9天前
|
存储 缓存 关系型数据库
《高性能Mysql》读书笔记之Schema与数据类型优化
《高性能Mysql》读书笔记之Schema与数据类型优化
19 0
|
17天前
|
关系型数据库 分布式数据库 数据库
VLDB顶会论文解读|PolarDB MySQL高性能强一致集群核心技术详解
论文中,PolarDB-SCC提出了一个全局强一致的主从架构的云原生数据库。目前该架构已在PolarDB架构中上线一年有余,是业内首个在业务无感知情况下实现全局一致性读的主从架构云原生数据库,解决了一直以来海量客户的一致性痛点。
|
2月前
|
SQL 关系型数据库 MySQL
|
4月前
|
存储 关系型数据库 MySQL
高性能 MySQL(十二):分区表
分区表是一个独立的逻辑表,其底层由多个物理子表组成。对分区表的请求,在 MySQL 底层都会被转换为对范围内的物理子表的请求,并将结果合并到一起返回。
68 0
|
4月前
|
缓存 关系型数据库 MySQL
高性能 MySQL(十一):优化特定类型的查询
本篇文章主要讲述,对特点类型的查询进行优化。
3896 0
|
4月前
|
SQL 存储 缓存
高性能 MySQL(十):执行一个查询的过程
当希望 MySQL 能够以更高的性能运行查询时,最好的办法就是搞清楚 MySQL 是如何优化和执行查询的。一旦理解这一点,很多查询优化工作实际上就是遵循一些原则,让优化器按照预想的方式运行。
46 0
高性能 MySQL(十):执行一个查询的过程
|
4月前
|
缓存 关系型数据库 MySQL
高性能 MySQL(九):通过重构查询语句,来解决慢查询
上一篇我们讲到通到优化数据访问,来解决慢查询问题,这是解决慢查询的基础。但有时我们的查询过于复杂,导致查询速度慢,我们不得不重构查询。今天就来讲下重构查询的几种方式。
43 0
|
4月前
|
存储 缓存 关系型数据库
高性能 MySQL(八):通过优化数据访问,来解决慢查询
前面几篇文章中介绍了如何设计最优的库表结构,以及如何建立最好的索引,这些对于高性能来说是必不可少的。但这还不够——还需要合理的设计查询。如果查询写得很糟糕,即使库表结构再合理、索引再合适,也无法实现高性能。
68 0
|
4月前
|
存储 关系型数据库 MySQL
高性能 MySQL(七):11个高性能的索引策略
正确地创建和使用索引,是实现高性能查询的基础。高效地选择和使用索引有很多种方式,其中有些是针对特殊案例的优化方法,有些则是针对特定行为的优化。
49 0
推荐文章
更多