> 支持的MySQL数据库版本:5.5 5.6 5.7 8.0

- [常用健康检查](#常用健康检查)

- [全表扫描的SQL](#全表扫描的sql)

- [创建大量临时表的SQL](#创建大量临时表的sql)

- [大表(单表行数大于500w,且平均行长大于10KB)](#大表单表行数大于500w且平均行长大于10kb)

- [表碎片](#表碎片)

- [热点表](#热点表)

- [全表扫描的表](#全表扫描的表)

- [未使用的索引](#未使用的索引)

- [冗余索引](#冗余索引)

- [库空间统计](#库空间统计)

- [表空间统计](#表空间统计)

- [常用故障排查](#常用故障排查)

- [查看有metalock锁的线程](#查看有metalock锁的线程)

- [创建MySQL事件-自动清理长时间执行的查询](#创建mysql事件-自动清理长时间执行的查询)

- [查看InnoDB未提交的事务信息](#查看innodb未提交的事务信息)

- [查看InnoDB事务锁冲突](#查看innodb事务锁冲突)

- [获取到InnoDB事务锁冲突的原始id](#获取到innodb事务锁冲突的原始id)

- [MySQL Binglog](#mysql-binglog)

- [查看有metalock锁的线程](#查看有metalock锁的线程)

- [查看当前二进制日志](#查看当前二进制日志)

- [查看所有的binlog文件名和文件大小](#查看所有的binlog文件名和文件大小)

- [查看binlog日志中具体的事件](#查看binlog日志中具体的事件)

- [字符集相关](#字符集相关)

- [查看支持的字符编码和校验集信息](#查看支持的字符编码和校验集信息)

- [检查库的字符集和字符校验规则](#检查库的字符集和字符校验规则)

- [检查表的字符集和字符校验规则](#检查表的字符集和字符校验规则)

- [检查列的字符集和字符校验规则](#检查列的字符集和字符校验规则)

- [修改列的字符校验规则](#修改列的字符校验规则)

- [会话查询](#会话查询)

- [属于某个库的会话](#属于某个库的会话)

- [执行命令为sleep的会话](#执行命令为sleep的会话)

- [执行命令为query的会话](#执行命令为query的会话)

- [会话时间超过多少秒的的](#会话时间超过多少秒的的)

- [找到某个库中事务状态为lock的会话id](#找到某个库中事务状态为lock的会话id)

- [所有的会话id](#所有的会话id)

- [属于某个用户的会话](#属于某个用户的会话)

# 常用健康检查

## 全表扫描的SQL

```

SELECT

*

FROM

(SELECT

(DIGEST_TEXT) AS query, # SQL语句

SCHEMA_NAME AS db, # 数据库

IF(SUM_NO_GOOD_INDEX_USED > 0

OR SUM_NO_INDEX_USED > 0, '*', '') AS full_scan, # 全表扫描总数

COUNT_STAR AS exec_count, # 事件总计

SUM_ERRORS AS err_count, # 错误总计

SUM_WARNINGS AS warn_count, # 警告总计

(SUM_TIMER_WAIT) AS total_latency, # 总的等待时间

(MAX_TIMER_WAIT) AS max_latency, # 最大等待时间

(AVG_TIMER_WAIT) AS avg_latency, # 平均等待时间

(SUM_LOCK_TIME) AS lock_latency, # 锁时间总时长

FORMAT(SUM_ROWS_SENT, 0) AS rows_sent, # 总返回行数

ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg, # 平均返回行数

SUM_ROWS_EXAMINED AS rows_examined, # 总扫描行数

ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg, # 平均扫描行数

SUM_CREATED_TMP_TABLES AS tmp_tables, # 创建临时表的总数

SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables, # 创建磁盘临时表的总数

SUM_SORT_ROWS AS rows_sorted, # 排序总行数

SUM_SORT_MERGE_PASSES AS sort_merge_passes, # 归并排序总行数

DIGEST AS digest, # 对SQL_TEXT做MD5产生的32位字符串

FIRST_SEEN AS first_seen, # 第一次执行时间

LAST_SEEN AS last_seen # 最后一次执行时间

FROM

performance_schema.events_statements_summary_by_digest d) t1

WHERE

t1.full_scan = '*'

ORDER BY t1.total_latency DESC

LIMIT 5;

```

## 创建大量临时表的SQL

```

SELECT

*

FROM

(SELECT

(DIGEST_TEXT) AS query, # SQL语句

SCHEMA_NAME AS db, # 数据库

IF(SUM_NO_GOOD_INDEX_USED > 0

OR SUM_NO_INDEX_USED > 0, '*', '') AS full_scan, # 全表扫描总数

COUNT_STAR AS exec_count, # 事件总计

SUM_ERRORS AS err_count, # 错误总计

SUM_WARNINGS AS warn_count, # 警告总计

(SUM_TIMER_WAIT) AS total_latency, # 总的等待时间

(MAX_TIMER_WAIT) AS max_latency, # 最大等待时间

(AVG_TIMER_WAIT) AS avg_latency, # 平均等待时间

(SUM_LOCK_TIME) AS lock_latency, # 锁时间总时长

FORMAT(SUM_ROWS_SENT, 0) AS rows_sent, # 总返回行数

ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg, # 平均返回行数

SUM_ROWS_EXAMINED AS rows_examined, # 总扫描行数

ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg, # 平均扫描行数

SUM_CREATED_TMP_TABLES AS tmp_tables, # 创建临时表的总数

SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables, # 创建磁盘临时表的总数

SUM_SORT_ROWS AS rows_sorted, # 排序总行数

SUM_SORT_MERGE_PASSES AS sort_merge_passes, # 归并排序总行数

DIGEST AS digest, # 对SQL_TEXT做MD5产生的32位字符串

FIRST_SEEN AS first_seen, # 第一次执行时间

LAST_SEEN AS last_seen # 最后一次执行时间

FROM

performance_schema.events_statements_summary_by_digest d) t1

ORDER BY t1.tmp_disk_tables DESC

LIMIT 5;

```

## 大表(单表行数大于500w,且平均行长大于10KB)

```

SELECT

t.table_name 表,

t.table_schema 库,

t.engine 引擎,

t.table_length_B 表空间, #单位 Bytes

t.table_length_B/t1.all_length_B 表空间占比,

t.data_length_B 数据空间, #单位 Bytes

t.index_length_B 索引空间, #单位 Bytes

t.table_rows 行数,

t.avg_row_length_B 平均行长KB

FROM

(

SELECT

table_name,

table_schema,

ENGINE,

table_rows,

data_length + index_length AS table_length_B,

data_length AS data_length_B,

index_length AS index_length_B,

AVG_ROW_LENGTH AS avg_row_length_B

FROM

information_schema.tables

WHERE

table_schema NOT IN ('mysql' , 'performance_schema', 'information_schema', 'sys')

) t

join (

select sum((data_length + index_length)) as all_length_B from information_schema.tables

) t1

WHERE

t.table_rows > 5000000

AND t.avg_row_length_B > 10240;

```

## 表碎片

```

SELECT

table_schema, # 库

table_name, # 表

(index_length + data_length) total_length, # 表空间

table_rows, # 行数

data_length, # 数据空间 单位 Bytes

index_length, # 索引空间 单位 Bytes

data_free, # 空闲空间 单位 Bytes

ROUND(data_free / (index_length + data_length),

2) rate_data_free # 表碎片

FROM

information_schema.tables

WHERE

table_schema NOT IN ('information_schema' , 'mysql', 'performance_schema', 'sys')

ORDER BY rate_data_free DESC

LIMIT 5;

```

## 热点表

```

SELECT

object_schema AS table_schema, # 库

object_name AS table_name, # 表

count_star AS rows_io_total, # 事件总数

count_read AS rows_read, # read次数

count_write AS rows_write, # write次数

count_fetch AS rows_fetchs, # fetch次数

count_insert AS rows_inserts, # insert次数

count_update AS rows_updates, # update次数

count_delete AS rows_deletes, # delete次数

CONCAT(ROUND(sum_timer_fetch / 3600000000000000, 2),

'h') AS fetch_latency, # fench总时间 单位 小时

CONCAT(ROUND(sum_timer_insert / 3600000000000000, 2),

'h') AS insert_latency, # insert总时间 单位 小时

CONCAT(ROUND(sum_timer_update / 3600000000000000, 2),

'h') AS update_latency, # update总时间 单位 小时

CONCAT(ROUND(sum_timer_delete / 3600000000000000, 2),

'h') AS delete_latency # delete总时间 单位 小时

FROM

performance_schema.table_io_waits_summary_by_table

ORDER BY sum_timer_wait DESC

LIMIT 5;

```

## 全表扫描的表

```

SELECT

object_schema, # 库

object_name, # 表

count_read AS rows_full_scanned #全表扫描的行数

FROM

performance_schema.table_io_waits_summary_by_index_usage

WHERE

index_name IS NULL AND count_read > 0

ORDER BY count_read DESC

LIMIT 5;

```

## 未使用的索引

```

SELECT

object_schema, # 库

object_name, # 表

index_name # 索引名

FROM

performance_schema.table_io_waits_summary_by_index_usage

WHERE

index_name IS NOT NULL

AND count_star = 0

AND object_schema NOT IN ('mysql' ,'performance_schema')

AND index_name <> 'PRIMARY'

ORDER BY object_schema , object_name;

```

## 冗余索引

```

SELECT

a.TABLE_SCHEMA AS '数据名',

a.TABLE_NAME AS '表名',

group_concat(a.INDEX_NAME,b.INDEX_NAME) AS '重复索引',

a.COLUMN_NAME AS '重复列名'

FROM

information_schema.STATISTICS a

JOIN

information_schema.STATISTICS b ON a.TABLE_SCHEMA = b.TABLE_SCHEMA

AND a.TABLE_NAME = b.TABLE_NAME

AND a.SEQ_IN_INDEX = b.SEQ_IN_INDEX

AND a.COLUMN_NAME = b.COLUMN_NAME

WHERE

a.SEQ_IN_INDEX = 1

AND a.INDEX_NAME <> b.INDEX_NAME group by a.TABLE_SCHEMA,a.TABLE_NAME,a.COLUMN_NAME;

```

## 库空间统计

```

SELECT

table_schema, # 库

ROUND(SUM(data_length / 1024 / 1024), 2) AS data_length_MB, # 数据空间 单位MB

ROUND(SUM(index_length / 1024 / 1024), 2) AS index_length_MB # 索引空间 单位MB

FROM

information_schema.tables

GROUP BY table_schema

ORDER BY data_length_MB DESC , index_length_MB DESC;

```

## 表空间统计

```

SELECT

t.table_name 表,

t.table_schema 库,

t.engine 引擎,

t.table_length_B 表空间,

t.table_length_B/t1.all_length_B 表空间占比,

t.data_length_B 数据空间,

t.index_length_B 索引空间,

t.table_rows 行数,

t.avg_row_length_B 平均行长KB

FROM

(

SELECT

table_name,

table_schema,

ENGINE,

table_rows,

data_length + index_length AS table_length_B,

data_length AS data_length_B,

index_length AS index_length_B,

AVG_ROW_LENGTH AS avg_row_length_B

FROM

information_schema.tables

WHERE

table_schema NOT IN ('mysql' , 'performance_schema', 'information_schema', 'sys')

) t

join (

select sum((data_length + index_length)) as all_length_B from information_schema.tables

) t1;

```

# 常用故障排查

## 查看有metalock锁的线程

```

SELECT

id, State, command

FROM

information_schema.processlist

WHERE

State = 'Waiting for table metadata lock';

```

## 创建MySQL事件-自动清理长时间执行的查询

比如下面的代码会每 5 分钟清理一次当前用户运行时间超过 1 个小时且非锁等待会话。

```

delimiter //

create event my_long_running_query_monitor

on schedule every 5 minute

starts '2015-09-15 11:00:00'

on completion preserve enable do

begin

declare v_sql varchar(500);

declare no_more_long_running_query integer default 0;

declare c_tid cursor for

select concat ('kill ',id,';') from

information_schema.processlist

where time >= 3600

and user = substring(current_user(),1,instr(current_user(),'@')-1)

and command not in ('sleep')

and state not like ('waiting for table%lock');

declare continue handler for not found

set no_more_long_running_query=1;

open c_tid;

repeat

fetch c_tid into v_sql;

set @v_sql=v_sql;

prepare stmt from @v_sql;

execute stmt;

deallocate prepare stmt;

until no_more_long_running_query end repeat;

close c_tid;

end;//

delimiter ;

```

## 查看InnoDB未提交的事务信息

```

SELECT

TIMEDIFF(SYSDATE(), trx_started) timediff,

SYSDATE(),

trx_started,

id,

USER,

DB,

COMMAND,

STATE,

trx_state,

trx_query

FROM

information_schema.processlist,

information_schema.innodb_trx

WHERE

trx_mysql_thread_id = id;

```

## 查看InnoDB事务锁冲突

```

SELECT

blocking_trx_id, COUNT(blocking_trx_id) AS countnum

FROM

(SELECT

a.trx_id,

a.trx_state,

b.requesting_trx_id,

b.blocking_trx_id

FROM

information_schema.innodb_lock_waits AS b

LEFT JOIN information_schema.innodb_trx AS a ON a.trx_id = b.requesting_trx_id) AS t1

GROUP BY blocking_trx_id

ORDER BY countnum DESC;

```

## 获取到InnoDB事务锁冲突的原始id

```

SELECT

id

FROM

information_schema.processlist,

information_schema.innodb_trx

WHERE

trx_mysql_thread_id = id

AND trx_id IN (SELECT

blocking_trx_id

FROM

(SELECT

blocking_trx_id, COUNT(blocking_trx_id) AS countnum

FROM

(SELECT

a.trx_id,

a.trx_state,

b.requesting_trx_id,

b.blocking_trx_id

FROM

information_schema.innodb_lock_waits AS b

LEFT JOIN information_schema.innodb_trx AS a ON a.trx_id = b.requesting_trx_id) AS t1

GROUP BY blocking_trx_id

ORDER BY countnum DESC

LIMIT 1) c);

```

# MySQL Binglog

## 查看有metalock锁的线程

```

show master status;

```

## 查看当前二进制日志

```

show master status\G;

```

## 查看所有的binlog文件名和文件大小

```

show binary logs;

show master logs;

```

## 查看binlog日志中具体的事件

```

show binlog events in 'mastera.000005' from 219 limit 3;

```

# 字符集相关

## 查看支持的字符编码和校验集信息

```

show character set;

show character set like 'utf%';

show collation;

show collation like 'utf8%'

```

## 检查库的字符集和字符校验规则

```

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA S

WHERE schema_name = 'confluence_vpc'

AND

(

DEFAULT_CHARACTER_SET_NAME != 'utf8'

OR

DEFAULT_COLLATION_NAME != 'utf8_bin'

);

```

## 检查表的字符集和字符校验规则

```

SELECT T.TABLE_NAME, C.CHARACTER_SET_NAME, C.COLLATION_NAME

FROM information_schema.TABLES AS T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS C

WHERE C.collation_name = T.table_collation

AND T.table_schema = 'confluence_vpc'

AND

(

C.CHARACTER_SET_NAME != 'utf8'

OR

C.COLLATION_NAME != 'utf8_bin'

);

```

## 检查列的字符集和字符校验规则

```

SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME

FROM information_schema.COLUMNS

WHERE TABLE_SCHEMA = 'confluence_vpc'

AND

(

CHARACTER_SET_NAME != 'utf8'

OR

COLLATION_NAME != 'utf8_bin'

);

```

## 修改列的字符校验规则

```

SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET UTF8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')

FROM information_schema.COLUMNS

WHERE TABLE_SCHEMA = 'confluence_vpc'

AND

(

CHARACTER_SET_NAME != 'utf8'

OR

COLLATION_NAME != 'utf8_bin'

);

```

# 会话查询

## 属于某个库的会话

```

select id from information_schema.processlist where db='ecshoptest';

```

## 执行命令为sleep的会话

```

select id from information_schema.processlist where command='sleep';

```

## 执行命令为query的会话

```

select id from information_schema.processlist where command='query';

```

## 会话时间超过多少秒的的

```

select id from information_schema.processlist where time>5000;

```

## 找到某个库中事务状态为lock的会话id

```

select id from information_schema.processlist,information_schema.innodb_trx where trx_mysql_thread_id=id and trx_state like 'LOCK%' and db='ecshoptest';

```

## 所有的会话id

```

select id from information_schema.processlist;

```

## 属于某个用户的会话

```

select id from information_schema.processlist where user='yaoli';

```

一键复制

编辑

Web IDE

原始数据

按行查看

历史

mysql count star_精品_MySQL常用SQL.md相关推荐

  1. mysql通常使用语句_Mysql 常用SQL语句集锦

    基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day from table_name" ...

  2. mysql去重汇总_Mysql常用SQL汇总

    今天的博客主题 数据库篇 -->Mysql -->Mysql常用SQL汇总 目录 字段合并去重 查询结果追加自定义字符串 查询当天的数据 字段合并去重 今天工作当中被同事问道数据库需要两个 ...

  3. mysql 常用sql调优_MySQL 常用SQL优化

    MySQL 常用SQL优化: 一.大批量插入数据: 1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度: 例:mysql > alter t ...

  4. mysql mysqldump触发器备份_MySQL常用的备份工具之mysqldump

    mysqldump是MySQL中最常用的备份工具,在一些情况下,也是我们唯一可以选择的备份工具.mysqldump是在MySQL发行版中所提供的一种逻辑备份工具,支持对数据库进行全量备份和有条件的备份 ...

  5. 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

    mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...

  6. MySQL(用户管理,常用sql语句,数据库备份恢复,MySQL调优,恢复误操作数据)...

    一.MySQL用户管理. 一个MySQL数据库里可以跑多个库,总不能给所有人的程序员root用户,则可以给他们单独的用户访问数据库. 创建用户:(grant all on *.* to 'user1' ...

  7. mysql cascade的用法_MySQL常用操作笔记

    1.创建root用户的密码 mysqladmin -u root password "new_password"; 2.连接到Mysql服务器 mysql -u root -p 1 ...

  8. mysql @pdept_MySQL 基本管理与常用sql 归结

    备份恢复的策略 1.确定要备份表的存储引擎是事务还是非事务的,不同的引擎备份方式在处理数据一致性方面 是不大一样的. 2.确定使用全备份还是增量备份.全备份的优点是备份保持最新备份,恢复的时候可以花费 ...

  9. mysql中常用动词_mysql常用sql语句总结

    sql语言简洁只有7个动词:SELECT , DROP, ALTER, CREATE,INSERT, UPDATE,DELETE: 获取表结构:Desc 表名:(show databases;tabl ...

最新文章

  1. C 语言编程 — 使用 assert 断言进行程序设计
  2. 菜鸟教程-Javascript学习笔记-JS函数之前
  3. 那些ubuntu创建用户踩过的坑
  4. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
  5. 8年web前端开程序媛,告诉你如何零基础学习web前端
  6. 虚拟机卡在登录界面卡住了_手机都10核了 为何还是照样卡?
  7. 如何下载百度文库文章
  8. 数据库SQL Server 基础知识思维导图
  9. [两道递推题] 美团 CodeM 初赛 Round A 二分图染色 OEIS A001499
  10. 第十五周项目2 - 大数据集上排序算法性能的体验
  11. 公网与私网地址转换——NAT技术的使用小技巧,超简单!!!
  12. 阿里云ECS云服务器CPU处理器型号主频睿频实例规格表
  13. 阿里巴巴提示:手动创建线程效果更好
  14. Java中的数字工具类-----持续总结中
  15. centos 安装并使用rar解压压缩文件
  16. pod重启策略和状态解释
  17. 【实用教程】Xshell6远程连接阿里云轻量应用服务器
  18. 微信扫描二维码自动跳转到app下载页面(安卓跳转默认浏览器 苹果跳转苹果商店App Store)
  19. MATLAB数字图像处理(一)
  20. 重回童年4399| 【黄金矿工】游戏制作+解析

热门文章

  1. 指标体系:指标的设计方法
  2. 2023开年第一涨!有省市IDC电费拟环比上浮23.41 %
  3. springboot集成Lean Cloud 及时通讯
  4. 怎样让windows xp自动登录
  5. Unity3d简单的发牌效果
  6. 【酷哥说库】一张图看懂openGauss(第5期)— openGauss高安全特性
  7. stream流去除对象的值_I/O流(过滤流、对象序列化、字符流)
  8. 软件工程师的薪资为何如此之高
  9. 黑色素瘤的最新研究进展(2021年5月)
  10. 我是主考官7:他为什么没有被录取