104 lines
3.2 KiB
MySQL
104 lines
3.2 KiB
MySQL
|
|
-- ================================================
|
|||
|
|
-- 系统性能诊断脚本
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
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;
|