IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL优化学习日记10——慢查询 -> 正文阅读

[大数据]MySQL优化学习日记10——慢查询

目录

一、SQL排序——慢查询日志

二、开启慢查询日志

三、慢查询阈值

四、分析海量数据

4.1?模拟海量数据


一、SQL排序——慢查询日志

mysql 提供的一种日志记录,用于记录 mysql 中响应实践超过阈值的 SQL 语句(long_query_time,默认 10 秒)

慢查询日志默认是关闭的,建议开发调优的时候打开,最终部署的时候关闭

二、开启慢查询日志

1、检查是否开启了慢查询日志

show variables like '%slow_query_log%';

2、临时开启

set global slow_query_log =1; ——在内存中开启

mysql 服务重启(service mysql restart)后就没有了

3、永久开启

退出?mysql? ?exit

进入 root? ?su root

用 vi 编辑? ?vi /etc/my.cnf

编辑文件? ?i

在 my.cnf 的 [mysqld] 中添加
slow_query_log=1
slow_query_log_file=/var/lib/mysql/localhost-slow.log

保存退出? ?esc   :wq

三、慢查询阈值

1、查询

?show variables like '%long_query_time%';

?默认是 10 秒

2、设置临时阈值

set global long_query_time = 5;

3、永久设置阈值

vi /etc/my.cnf

[mysqld]

long_query_time=3

4、测试阈值

select sleep(4);

show global status like '%slow_queries%'; ——查询超过阈值的sql

cat /var/lib/mysql/localhost-slow.log? ——查询日志文件

其中查询时间为 4.000697,查询语句为 select sleep(4);

?这个样子显示的不太好看的,所以可以对上面的显示效果进行优化

5、查询日志文件

(1) cat /var/lib/mysql/localhost-slow.log

(2) mysqldumpslow

mysqldumpslow --hlep

s:排序方式
r:逆序
l:锁定时间
g:正则匹配模式?

获取返回记录最多的 3 个 SQL

mysqldumpslow -s r -t 3 /var/lib/mysql/localhost-slow.log

获取访问次数最多的 3 个 SQL?
mysqldumpslow -s c -t 3 /var/lib/mysql/bigdata01-slow.log

按照时间排序,前 10 条包含 left join 查询语句的 SQL?
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/bigdata01-slow.log

四、分析海量数据

4.1?模拟海量数据

使用存储过程(无return) / 存储函数(有return)

1、新建表

create database testdata;
use testdata;

create table dept 
(
dno int(5) primary key default 0,
dname varchar(20) not null default '',
loc varchar(30) default ''
) engine=innodb default charset=utf8;

create table emp
(
eid int(5) primary key,
ename varchar(20) not null default '',
job varchar(20) not null default '',
deptno int(5) not null default 0
)engine=innodb default charset=utf8;

2、通过存储函数插入海量数据:

创建存储函数:

randstring(6) -> 用于模拟员工名称

use testdata;
delimiter $
create function randstring(n int) returns varchar(255)
begin 

    declare all_str varchar(100) default 'abcdefghijklmnopqrestuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    declare return_str varchar(255) default '';
    declare i int default 0;
    while i<n
    do
        set return_str=concat(return_str, substring(all_str, FLOOR(1+rand()*52), 1));
        set i=i+1;
    end while;
    return return_str;
end $

?

这里报错了,是因为存储过程/存储函数在创建时与之前的开启慢查询日志冲突了

临时解决:

show variables like '%log_bin_trust_function_creators%';

set global log_bin_trust_function_creators=1;

永久解决:

/etc/my.cnf

[mysqld]

log_bin_trust_function_creators=1

重新执行

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:36:32  更:2022-02-28 15:37:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:03:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码