mysql count star_精品_MySQL常用SQL.md
> 支持的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相关推荐
- mysql通常使用语句_Mysql 常用SQL语句集锦
基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day from table_name" ...
- mysql去重汇总_Mysql常用SQL汇总
今天的博客主题 数据库篇 -->Mysql -->Mysql常用SQL汇总 目录 字段合并去重 查询结果追加自定义字符串 查询当天的数据 字段合并去重 今天工作当中被同事问道数据库需要两个 ...
- mysql 常用sql调优_MySQL 常用SQL优化
MySQL 常用SQL优化: 一.大批量插入数据: 1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度: 例:mysql > alter t ...
- mysql mysqldump触发器备份_MySQL常用的备份工具之mysqldump
mysqldump是MySQL中最常用的备份工具,在一些情况下,也是我们唯一可以选择的备份工具.mysqldump是在MySQL发行版中所提供的一种逻辑备份工具,支持对数据库进行全量备份和有条件的备份 ...
- 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复
mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...
- MySQL(用户管理,常用sql语句,数据库备份恢复,MySQL调优,恢复误操作数据)...
一.MySQL用户管理. 一个MySQL数据库里可以跑多个库,总不能给所有人的程序员root用户,则可以给他们单独的用户访问数据库. 创建用户:(grant all on *.* to 'user1' ...
- mysql cascade的用法_MySQL常用操作笔记
1.创建root用户的密码 mysqladmin -u root password "new_password"; 2.连接到Mysql服务器 mysql -u root -p 1 ...
- mysql @pdept_MySQL 基本管理与常用sql 归结
备份恢复的策略 1.确定要备份表的存储引擎是事务还是非事务的,不同的引擎备份方式在处理数据一致性方面 是不大一样的. 2.确定使用全备份还是增量备份.全备份的优点是备份保持最新备份,恢复的时候可以花费 ...
- mysql中常用动词_mysql常用sql语句总结
sql语言简洁只有7个动词:SELECT , DROP, ALTER, CREATE,INSERT, UPDATE,DELETE: 获取表结构:Desc 表名:(show databases;tabl ...
最新文章
- C 语言编程 — 使用 assert 断言进行程序设计
- 菜鸟教程-Javascript学习笔记-JS函数之前
- 那些ubuntu创建用户踩过的坑
- java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
- 8年web前端开程序媛,告诉你如何零基础学习web前端
- 虚拟机卡在登录界面卡住了_手机都10核了 为何还是照样卡?
- 如何下载百度文库文章
- 数据库SQL Server 基础知识思维导图
- [两道递推题] 美团 CodeM 初赛 Round A 二分图染色 OEIS A001499
- 第十五周项目2 - 大数据集上排序算法性能的体验
- 公网与私网地址转换——NAT技术的使用小技巧,超简单!!!
- 阿里云ECS云服务器CPU处理器型号主频睿频实例规格表
- 阿里巴巴提示:手动创建线程效果更好
- Java中的数字工具类-----持续总结中
- centos 安装并使用rar解压压缩文件
- pod重启策略和状态解释
- 【实用教程】Xshell6远程连接阿里云轻量应用服务器
- 微信扫描二维码自动跳转到app下载页面(安卓跳转默认浏览器 苹果跳转苹果商店App Store)
- MATLAB数字图像处理(一)
- 重回童年4399| 【黄金矿工】游戏制作+解析