76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
/**
|
|
* 数据库连接测试脚本
|
|
* @file test-connection.js
|
|
* @description 测试数据库连接、连接池状态和查询性能
|
|
*/
|
|
const { sequelize } = require('../models');
|
|
const { User } = require('../models');
|
|
const dbPool = require('../config/database-pool');
|
|
const queryOptimizer = require('../config/query-optimizer');
|
|
const dbMonitor = require('../config/db-monitor');
|
|
|
|
async function testConnection() {
|
|
try {
|
|
console.log('开始测试数据库连接...');
|
|
|
|
// 测试数据库连接
|
|
await sequelize.authenticate();
|
|
console.log('数据库连接成功');
|
|
|
|
// 获取连接池状态
|
|
const poolStatus = await dbPool.getPoolStatus();
|
|
console.log('连接池状态:', JSON.stringify(poolStatus, null, 2));
|
|
|
|
// 获取数据库状态
|
|
const dbStatus = await queryOptimizer.getDatabaseStatus();
|
|
console.log('数据库状态:', JSON.stringify(dbStatus, null, 2));
|
|
|
|
// 查询用户数量
|
|
console.time('用户查询');
|
|
const userCount = await User.count();
|
|
console.timeEnd('用户查询');
|
|
console.log(`当前用户数量: ${userCount}`);
|
|
|
|
// 执行查询分析
|
|
const userQuery = User.findAll();
|
|
const explainResult = await queryOptimizer.explainQuery(userQuery);
|
|
console.log('查询分析结果:', JSON.stringify(explainResult, null, 2));
|
|
|
|
// 获取表信息
|
|
const tableInfo = await queryOptimizer.getTableInfo('users');
|
|
console.log('用户表信息:', JSON.stringify(tableInfo, null, 2));
|
|
|
|
// 获取索引信息
|
|
const indexInfo = await queryOptimizer.getIndexInfo('users');
|
|
console.log('用户表索引:', JSON.stringify(indexInfo, null, 2));
|
|
|
|
// 监控连接状态
|
|
const connectionStatus = await dbMonitor.checkConnectionStatus();
|
|
console.log('连接监控状态:', JSON.stringify(connectionStatus, null, 2));
|
|
|
|
// 关闭数据库连接
|
|
await sequelize.close();
|
|
console.log('数据库连接已关闭');
|
|
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('数据库连接测试失败:', error);
|
|
|
|
// 尝试关闭数据库连接
|
|
try {
|
|
await sequelize.close();
|
|
console.log('数据库连接已关闭');
|
|
} catch (closeError) {
|
|
console.error('关闭数据库连接失败:', closeError);
|
|
}
|
|
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// 如果直接运行此脚本,则执行测试
|
|
if (require.main === module) {
|
|
testConnection();
|
|
}
|
|
|
|
module.exports = testConnection; |