领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

数据库运维与开发必查 SQL 速查手册

nixiaole 2025-09-19 00:17:56 知识剖析 1 ℃

数据库运维与开发必查 SQL 速查手册 (MySQL/PG 通用)

在日常工作中,无论是排查问题、分析性能还是验证数据,数据库查询都是最直接、最高效的手段。以下清单共 25 条必查 SQL,涵盖 性能监控、问题排查、数据管理、Schema 管理 等场景。


一、性能与监控类

用于监控数据库当前状态,快速发现性能瓶颈。

  1. 查询当前所有连接数及状态
SHOW PROCESSLIST;
SELECT * FROM information_schema.PROCESSLIST WHERE DB IS NOT NULL;
  1. 查看正在运行的长事务
-- 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';
  1. 查看锁等待情况
-- MySQL
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
SELECT * FROM information_schema.INNODB_LOCKS;

-- PostgreSQL
SELECT * FROM pg_locks WHERE granted = false;
  1. 表级锁等待
SHOW OPEN TABLES WHERE In_use > 0;
  1. 查询缓存命中率 (MySQL 5.7及以前)
SHOW STATUS LIKE 'Qcache%';
  1. 查看InnoDB缓冲池状态
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
-- 命中率 = (1 - Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) * 100%
  1. 查看最大连接数使用情况
SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';

二、问题排查与优化类

分析慢 SQL、定位性能差的语句。

  1. 当前最耗时的 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;
  1. 慢查询日志 TOP N (MySQL)
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;
  1. 查看执行计划
EXPLAIN SELECT * FROM your_table WHERE your_condition;
EXPLAIN ANALYZE SELECT * FROM your_table WHERE your_condition;
  1. 全表扫描次数多的表
SELECT * FROM sys.schema_tables_with_full_table_scans;
  1. 索引使用情况
SELECT * FROM sys.schema_unused_indexes;
SHOW INDEX FROM your_table_name;

三、数据管理与验证类

常见的数据检查、清理和验证。

  1. 数据库大小
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;
  1. 单表大小与行数
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';
  1. 最近 N 小时内的数据变更
SELECT * FROM your_table
WHERE update_time >= NOW() - INTERVAL 2 HOUR
ORDER BY update_time DESC;
  1. 数据抽样检查
SELECT * FROM your_table ORDER BY RAND() LIMIT 100;
  1. 查找重复数据
SELECT your_column, COUNT(*)
FROM your_table
GROUP BY your_column
HAVING COUNT(*) > 1;
  1. 批量生成清理 SQL
SELECT CONCAT('DELETE FROM your_table WHERE create_time < \'', DATE_SUB(NOW(), INTERVAL 3 MONTH), '\';')
FROM DUAL;

四、元数据与 Schema 管理类

快速了解表结构和约束。

  1. 查看表的列信息
DESCRIBE your_table_name;
SHOW FULL COLUMNS FROM your_table_name;
  1. 查看外键约束
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(进阶)

  1. 查看某个用户的连接情况
SELECT user, host, COUNT(*) AS connections
FROM information_schema.PROCESSLIST
GROUP BY user, host;
  1. 查看死锁信息(MySQL 5.7+)
SHOW ENGINE INNODB STATUS\G
  1. 查看事务隔离级别
SHOW VARIABLES LIKE 'transaction_isolation';
  1. 找出自增主键即将溢出的表
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';
  1. 统计行数最多的前 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 完整版速查手册,可直接用于日常运维和开发排查。

最近发表
标签列表