104 lines
3.2 KiB
SQL
104 lines
3.2 KiB
SQL
-- ================================================
|
||
-- 系统性能诊断脚本
|
||
-- ================================================
|
||
|
||
USE study;
|
||
|
||
-- ================================================
|
||
-- 1. 检查当前正在运行的查询
|
||
-- ================================================
|
||
SELECT '检查当前运行的查询...' AS info;
|
||
|
||
SELECT
|
||
id,
|
||
user,
|
||
host,
|
||
db,
|
||
command,
|
||
time AS '执行时间(秒)',
|
||
state AS '状态',
|
||
LEFT(info, 100) AS 'SQL语句'
|
||
FROM information_schema.processlist
|
||
WHERE db = 'study'
|
||
ORDER BY time DESC;
|
||
|
||
-- ================================================
|
||
-- 2. 检查表的索引数量(索引过多会导致INSERT/UPDATE变慢)
|
||
-- ================================================
|
||
SELECT '检查索引数量...' AS info;
|
||
|
||
SELECT
|
||
TABLE_NAME AS '表名',
|
||
COUNT(DISTINCT INDEX_NAME) AS '索引数量',
|
||
GROUP_CONCAT(DISTINCT INDEX_NAME) AS '索引列表'
|
||
FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = 'study'
|
||
AND TABLE_NAME IN ('sys_user', 'student_class', 'sys_user_role')
|
||
GROUP BY TABLE_NAME
|
||
ORDER BY COUNT(DISTINCT INDEX_NAME) DESC;
|
||
|
||
-- ================================================
|
||
-- 3. 检查表大小和行数
|
||
-- ================================================
|
||
SELECT '检查表大小...' AS info;
|
||
|
||
SELECT
|
||
TABLE_NAME AS '表名',
|
||
TABLE_ROWS AS '行数',
|
||
ROUND(DATA_LENGTH/1024/1024, 2) AS '数据大小(MB)',
|
||
ROUND(INDEX_LENGTH/1024/1024, 2) AS '索引大小(MB)',
|
||
ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024, 2) AS '总大小(MB)'
|
||
FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = 'study'
|
||
AND TABLE_NAME IN ('sys_user', 'student_class', 'sys_user_role', 'study_class')
|
||
ORDER BY (DATA_LENGTH+INDEX_LENGTH) DESC;
|
||
|
||
-- ================================================
|
||
-- 4. 检查是否有锁表
|
||
-- ================================================
|
||
SELECT '检查表锁...' AS info;
|
||
|
||
SHOW OPEN TABLES WHERE In_use > 0;
|
||
|
||
-- ================================================
|
||
-- 5. 测试简单查询的性能
|
||
-- ================================================
|
||
SELECT '测试查询性能...' AS info;
|
||
|
||
-- 测试1:简单SELECT
|
||
SET @start_time = NOW(6);
|
||
SELECT COUNT(*) FROM sys_user;
|
||
SET @end_time = NOW(6);
|
||
SELECT TIMESTAMPDIFF(MICROSECOND, @start_time, @end_time)/1000 AS '查询耗时(ms)';
|
||
|
||
-- ================================================
|
||
-- 6. 查看慢查询日志状态
|
||
-- ================================================
|
||
SELECT '慢查询配置...' AS info;
|
||
|
||
SHOW VARIABLES LIKE 'slow_query%';
|
||
SHOW VARIABLES LIKE 'long_query_time';
|
||
|
||
-- ================================================
|
||
-- 7. 检查数据库连接数
|
||
-- ================================================
|
||
SELECT '检查连接数...' AS info;
|
||
|
||
SHOW STATUS LIKE 'Threads_connected';
|
||
SHOW STATUS LIKE 'Max_used_connections';
|
||
SHOW VARIABLES LIKE 'max_connections';
|
||
|
||
-- ================================================
|
||
-- 8. 详细查看 sys_user 表的所有索引
|
||
-- ================================================
|
||
SELECT '详细索引信息 - sys_user' AS info;
|
||
|
||
SHOW INDEX FROM sys_user;
|
||
|
||
-- ================================================
|
||
-- 9. 详细查看 student_class 表的所有索引
|
||
-- ================================================
|
||
SELECT '详细索引信息 - student_class' AS info;
|
||
|
||
SHOW INDEX FROM student_class;
|