网站首页 > 知识剖析 正文
数据库运维与开发必查 SQL 速查手册 (MySQL/PG 通用)
在日常工作中,无论是排查问题、分析性能还是验证数据,数据库查询都是最直接、最高效的手段。以下清单共 25 条必查 SQL,涵盖 性能监控、问题排查、数据管理、Schema 管理 等场景。
一、性能与监控类
用于监控数据库当前状态,快速发现性能瓶颈。
- 查询当前所有连接数及状态
SHOW PROCESSLIST;
SELECT * FROM information_schema.PROCESSLIST WHERE DB IS NOT NULL;
- 查看正在运行的长事务
-- MySQL
SELECT * FROM information_schema.INNODB_TRX ORDER BY trx_started DESC LIMIT 10;
-- PostgreSQL
SELECT * FROM pg_stat_activity WHERE state = 'active' AND now() - xact_start > interval '10 seconds';
- 查看锁等待情况
-- MySQL
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
SELECT * FROM information_schema.INNODB_LOCKS;
-- PostgreSQL
SELECT * FROM pg_locks WHERE granted = false;
- 表级锁等待
SHOW OPEN TABLES WHERE In_use > 0;
- 查询缓存命中率 (MySQL 5.7及以前)
SHOW STATUS LIKE 'Qcache%';
- 查看InnoDB缓冲池状态
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
-- 命中率 = (1 - Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) * 100%
- 查看最大连接数使用情况
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
二、问题排查与优化类
分析慢 SQL、定位性能差的语句。
- 当前最耗时的 SQL (PostgreSQL)
SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE state = 'active' AND query != ''
ORDER BY duration DESC;
- 慢查询日志 TOP N (MySQL)
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;
- 查看执行计划
EXPLAIN SELECT * FROM your_table WHERE your_condition;
EXPLAIN ANALYZE SELECT * FROM your_table WHERE your_condition;
- 全表扫描次数多的表
SELECT * FROM sys.schema_tables_with_full_table_scans;
- 索引使用情况
SELECT * FROM sys.schema_unused_indexes;
SHOW INDEX FROM your_table_name;
三、数据管理与验证类
常见的数据检查、清理和验证。
- 数据库大小
SELECT table_schema AS `Database`,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `Size (MB)`
FROM information_schema.TABLES
GROUP BY table_schema;
- 单表大小与行数
SELECT table_name AS `Table`,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS `Size (MB)`,
table_rows AS `Rows`
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name'
AND table_name = 'your_table_name';
- 最近 N 小时内的数据变更
SELECT * FROM your_table
WHERE update_time >= NOW() - INTERVAL 2 HOUR
ORDER BY update_time DESC;
- 数据抽样检查
SELECT * FROM your_table ORDER BY RAND() LIMIT 100;
- 查找重复数据
SELECT your_column, COUNT(*)
FROM your_table
GROUP BY your_column
HAVING COUNT(*) > 1;
- 批量生成清理 SQL
SELECT CONCAT('DELETE FROM your_table WHERE create_time < \'', DATE_SUB(NOW(), INTERVAL 3 MONTH), '\';')
FROM DUAL;
四、元数据与 Schema 管理类
快速了解表结构和约束。
- 查看表的列信息
DESCRIBE your_table_name;
SHOW FULL COLUMNS FROM your_table_name;
- 查看外键约束
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL
AND TABLE_SCHEMA = 'your_database_name';
五、实战补充 SQL(进阶)
- 查看某个用户的连接情况
SELECT user, host, COUNT(*) AS connections
FROM information_schema.PROCESSLIST
GROUP BY user, host;
- 查看死锁信息(MySQL 5.7+)
SHOW ENGINE INNODB STATUS\G
- 查看事务隔离级别
SHOW VARIABLES LIKE 'transaction_isolation';
- 找出自增主键即将溢出的表
SELECT table_name, auto_increment, pow(2,32) AS max_32bit, pow(2,64) AS max_64bit
FROM information_schema.tables
WHERE table_schema = 'your_database';
- 统计行数最多的前 10 张表
SELECT table_name, table_rows
FROM information_schema.tables
WHERE table_schema = 'your_database'
ORDER BY table_rows DESC
LIMIT 10;
总结与最佳实践
类别 | 核心用途 | 关键命令示例 |
性能监控 | 连接数、事务、锁、缓存 | SHOW PROCESSLIST, INNODB_TRX, INNODB_LOCK_WAITS |
问题排查 | 慢 SQL、执行计划、索引 | EXPLAIN, sys.schema_*, 慢日志表 |
数据管理 | 大小、变更、去重、抽样 | information_schema.TABLES, HAVING COUNT(*) > 1 |
Schema管理 | 结构、约束 | DESCRIBE, INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
进阶实战 | 死锁、隔离级别、自增溢出 | SHOW ENGINE INNODB STATUS, transaction_isolation |
运维最佳实践:
- 自动化:高频监控 SQL 接入监控平台(Prometheus Exporter / Zabbix)。
- 定期审计:慢日志、索引使用情况,每周分析。
- 脚本化:用 bash + mysql 或 Python 封装常用 SQL,一键执行。
- 权限隔离:只读账号跑监控,DBA 账号做变更。
- 先演练再上线:涉及数据修改的 SQL 先在测试环境验证。
这样,你就有了一份 25 条数据库必查 SQL 完整版速查手册,可直接用于日常运维和开发排查。
猜你喜欢
- 2025-09-19 Excel VBA 这样酷炫的日期控件,你不想要吗?
- 2025-09-19 总结面试:SQL常见面试题-1_sql面试必会6题经典
- 2025-09-19 一行 VBA 代码完成一项任务10个示例
- 2025-09-19 Excel:拆分工作表_Excel拆分工作表为单独文件
- 2025-09-19 告别慢查询:让SQL JOIN多表查询飞起来
- 2025-09-19 索引失效了?看看这几个常见的情况!
- 2025-09-19 什么是数据库分区?为什么要使用它?
- 2025-09-19 Excel技巧!!!1行代码永久修改默认保存路径,办公效率翻倍
- 2025-09-19 1个Excel文件拆分为100个,我需要2小时,同事2分钟就搞定
- 2025-09-19 45个SQL查询案例_sql查询方法有哪些
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)