MySQL-性能分析概述

一、数据库服务器的优化步骤

        整个流程划分成了 观察(Show status) 行动(Action) 两个部分。字母 S 的部分代表观察(会使 用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。

 二、查看系统参数

        在MySQL中,可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数执行频率

SHOW [GLOBAL|SESSION] STATUS LIKE '参数';

• Connections:连接MySQL服务器的次数。

• Uptime:MySQL服务器的上 线时间。

• Slow_queries:慢查询的次数。

• Innodb_rows_read:Select查询返回的行数

• Innodb_rows_inserted:执行INSERT操作插入的行数

• Innodb_rows_updated:执行UPDATE操作更新的行数

• Innodb_rows_deleted:执行DELETE操作删除的行数

• Com_select:查询操作的次数。

• Com_insert:插入操作的次数。对于批量插入的 INSERT 操作,只累加一次。

• Com_update:更新操作的次数。

• Com_delete:删除操作的次数。

三、统计SQL的查询成本

SHOW STATUS LIKE 'last_query_cost'; #显示最后一次查询用了多少个页

四. 定位执行慢的 SQL:慢查询日志

#1. 开启slow_query_log
    set global slow_query_log='ON';

#2. 修改long_query_time阈值
    show global variables like '%long_query_time%';
    set global long_query_time = 1;

#3. 查看慢查询数目
    SHOW GLOBAL STATUS LIKE '%Slow_queries%';

#4. 使用慢查询日志分析工具:mysqldumpslow

mysqldumpslow 命令的具体参数如下:
    -a: 不将数字抽象成N,字符串抽象成S
    -s: 是表示按照何种方式排序:
        c: 访问次数
        l: 锁定时间
        r: 返回记录
        t: 查询时间
        al:平均锁定时间
        ar:平均返回记录数
        at:平均查询时间 (默认方式)
        ac:平均查询次数
    -t: 即为返回前面多少条的数据;
    -g: 后边搭配一个正则匹配模式,大小写不敏感的;

#举例
#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log

#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/slow.log

#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow.log

#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more

#5.关闭慢查询日志
     set global slow_query_log='OFF';

#6.删除慢查询日志
        show variables like 'slow_query_log%'; #手动进入目录删除
        

五、查看SQL执行成本-SHOW PROFILE

#开启
    show variables like 'profiling';
    set profiling = 'ON';

#然后执行相关的查询语句。接着看下当前会话都有哪些 profiles,使用下面这条命令:

    show profiles;

#如果我们想要查看最近一次查询的开销,可以使用:
    show profile;

#可以查看指定 query id 的开销,以及不同类型的开销,例如 query id 为 2的
show profile cpu,block io for query 2;

show profile的常用查询参数:

① ALL:显示所有的开销信息。

② BLOCK IO:显示块IO开销。

③ CONTEXT SWITCHES:上下文切换开 销。

④ CPU:显示CPU开销信息。

⑤ IPC:显示发送和接收开销信息。

⑥ MEMORY:显示内存开销信 息。

⑦ PAGE FAULTS:显示页面错误开销信息。

⑧ SOURCE:显示和Source_function,Source_file, Source_line相关的开销信息。

⑨ SWAPS:显示交换次数开销信息。

六、分析查询语句-EXPLAIN

EXPLAIN SELECT select_options

或者

DESCRIBE SELECT select_options

# MYSQL 5.6.3 以后就可以使用 EXPLAIN SELECT/UPDATE/DELETE xxx

 6.1 输出结构(略)  

  输出各列的结构:

 select_type:

        一个大的查询语句可能包含若干SELECT关键字,这个属性就表明每个SELECT子句在整个大查询中的角色。

 *type(访问方法):

        system , const , eq_ref , ref , fulltext , ref_or_null , index_merge , unique_subquery , index_subquery , range , index , ALL

        结果值从最好到最坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 其中比较重要的几个提取出来(见蓝 色)。SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,最好是 consts级别。(阿里巴巴 开发手册要求)

6.2 四种输出格式

6.2.1 传统格式

EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE
s2.common_field IS NOT NULL;

 6.2.2 JSON格式

EXPLAIN FORMAT=JSON SELECT ....

6.2.3 TREE格式

EXPLAIN FORMAT=tree SELECT ....

6.2.4 可视化输出

        可以通过MySQL Workbench可视化查看MySQL的执行计划。通过点击Workbench的放大镜图 标,即可生成可视化的查询计划。

七、分析优化器执行计划-trace

SET optimizer_trace="enabled=on",end_markers_in_json=on; #开启
set optimizer_trace_max_mem_size=1000000; #内存限制

开启后,可分析如下语句:

        SELECT

        INSERT

        REPLACE

        UPDATE

        DELETE

        EXPLAIN

        SET

        DECLARE

        CASE

        IF

        RETURN

        CALL

#执行语句后 ,查询 information_schema.optimizer_trace 就可以知道MySQL是如何执行SQL的 :

select * from information_schema.optimizer_trace;

八、MySQL监控分析视图-sys schema

1. 主机相关:以host_summary开头,主要汇总了IO延迟的信息。

2. Innodb相关:以innodb开头,汇总了innodb buffer信息和事务等待innodb锁的信息。

3. I/o相关:以io开头,汇总了等待I/O、I/O使用量情况。

4. 内存使用情况:以memory开头,从主机、线程、事件等角度展示内存的使用情况

5. 连接与会话信息:processlist和session相关视图,总结了会话相关信息。

6. 表相关:以schema_table开头的视图,展示了表的统计信息。

7. 索引信息:统计了索引的使用情况,包含冗余索引和未使用的索引情况。

8. 语句相关:以statement开头,包含执行全表扫描、使用临时表、排序等的语句信息。

9. 用户相关:以user开头的视图,统计了用户使用的文件I/O、执行语句统计信息。

10. 等待事件相关信息:以wait开头,展示等待事件的延迟情况。

#索引情况
    #1. 查询冗余索引
    select * from sys.schema_redundant_indexes;
    #2. 查询未使用过的索引
    select * from sys.schema_unused_indexes;
    #3. 查询索引的使用情况
    select index_name,rows_selected,rows_inserted,rows_updated,rows_deleted
    from sys.schema_index_statistics where table_schema='dbname' ;

#表相关
    # 1. 查询表的访问量
    select table_schema,table_name,sum(io_read_requests+io_write_requests) as io from
    sys.schema_table_statistics group by table_schema,table_name order by io desc;
    # 2. 查询占用bufferpool较多的表
    select object_schema,object_name,allocated,data
    from sys.innodb_buffer_stats_by_table order by allocated limit 10;
    # 3. 查看表的全表扫描情况
    select * from sys.statements_with_full_table_scans where db='dbname';

#语句相关
    #1. 监控SQL执行的频率
    select db,exec_count,query from sys.statement_analysis
    order by exec_count desc;
    #2. 监控使用了排序的SQL
    select db,exec_count,first_seen,last_seen,query
    from sys.statements_with_sorting limit 1;
    #3. 监控使用了临时表或者磁盘临时表的SQL
    select db,exec_count,tmp_tables,tmp_disk_tables,query
    from sys.statement_analysis where tmp_tables>0 or tmp_disk_tables >0
    order by (tmp_tables+tmp_disk_tables) desc;

#IO相关
    #1. 查看消耗磁盘IO的文件
    select file,avg_read,avg_write,avg_read+avg_write as avg_io
    from sys.io_global_by_file_by_bytes order by avg_read limit 10;

#Innodb 相关
    #1. 行锁阻塞情况
    select * from sys.innodb_lock_waits;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库系统概述 —— SQL Server 2016 SQLserver2016-数据库系统概述全文共16页,当前为第1页。 数据库系统(DataBase System,DBS)由计算机软件、硬件、数据库、 数据库管理系统、数据库应用程序、数据库管理员与用户组成。 用户 用户 用户 数据库应用程序 应用开发工具 数据库管理系统 操作系统 数据库 数据库管理员 数据库系统 SQLserver2016-数据库系统概述全文共16页,当前为第2页。 数据库是指储存在计算机内有组织可共享的数据集合。 数据库 SQLserver2016-数据库系统概述全文共16页,当前为第3页。 数据定义功能 数据库管理系统提供数据定义语言DDL,用DDL可定义数据库中数 据对象。还可定义数据的完整性与安全性等约束条件。 数据操纵功能 数据库管理系统提供数据操纵语言DML,用DML可操纵数据库中数 据。 数据库管理系统 SQLserver2016-数据库系统概述全文共16页,当前为第4页。 数据库管理系统 数据库管理功能 数据库管理功能由控制程序实现,其主要功能有:对数据库的完整 性约束条件的检查和执行、安全性检查和并发性控制。 数据库维护功能 数据库维护功能主要包括数据库中数据的输入、转换、转储、恢复、 性能监视、分析等。 SQLserver2016-数据库系统概述全文共16页,当前为第5页。 关系型 非关系型 Access SQL Server Oracle Sybase mySQL Mongo DB Redis SQLite 常见的数据库管理系统 SQLserver2016-数据库系统概述全文共16页,当前为第6页。 数据模型是数据库中的数据按一定的方式存储在一起的组织结构,数据 模型是数据库系统的核心和基础,数据库管理系统都是基于某种数据模型。 数据模型的分类 概念层数据模型 组织层数据模型 数据模型 SQLserver2016-数据库系统概述全文共16页,当前为第7页。 概念层数据模型也称信息模型,它是按用户的观点来对数据和信息建模, 主要用在数据库的设计阶段。 实体:通常指客观存在并相互区别的事物,可以是实际存在,也可 以是概念性的。 属性:是指实体所具有的特征。 域:实体中相应属性的取值范围。 概念层数据模型 SQLserver2016-数据库系统概述全文共16页,当前为第8页。 联系:是实体间的相互关系。 基本联系有三种 一对一(1:1):对于实体集A的中的每一个实体,实体集B中至多 有一 个实体与之联系。 一对多(1:n):对于实体集A的中的每一个实体,实体集B中有n个 实体与之联系(n>=0)。 概念层数据模型 SQLserver2016-数据库系统概述全文共16页,当前为第9页。 (3) 多对多(m:n):对于实体集A的中的m个实体,实体集B中有n个 实体与之联系(n>=0 m>=0)。 观众 1 1 座位 班级 1 多 学生 学生 多 多 课程 概念层数据模型 SQLserver2016-数据库系统概述全文共16页,当前为第10页。 "实体—联系"方法,使用的工具称为E-R图。 实体: 属性: 联系: 教师 讲授 n 课程 1 姓名 职称 课程名 称 学分 概念层数据模型最常用的方法 SQLserver2016-数据库系统概述全文共16页,当前为第11页。 层次 模型 网状 模型 关系 模型 面向对象 模型 组织层数据模型的分类 SQLserver2016-数据库系统概述全文共16页,当前为第12页。 层次模型是用树形结构来表示各类实体以及实体间的联系。 层次模型 SQLserver2016-数据库系统概述全文共16页,当前为第13页。 网状模型是使用网状结构来表示各类实体以及实体间的联系,它是 对层次模型的拓展。 网状模型 SQLserver2016-数据库系统概述全文共16页,当前为第14页。 关系模型 关系模型是一种简单的二维表结构,每个二维表称作一个关系,关系 中每一行数据称作一条记录,每一列数据称作属性,列标题称作属性名。 课程表 课程号 课程名称 类别 学时 学分 001 计算机基础 基础课 48 3 023 数据库应用 专业基础课 56 3.5 035 网页制作 专业核心课 64 4 SQLserver2016-数据库系统概述全文共16页,当前为第15页。 小 结 SQLserver2016-数据库系统概述全文共16页,当前为第16页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值