确保SQL Server已正确安装在CentOS系统上(推荐使用CentOS 7.x-9.x,与SQL Server 2017及以上版本兼容),并通过systemctl status mssql-server
命令确认服务处于运行状态。同时,准备好测试数据(可通过bcp
工具批量导入或使用SQL Server Data Tools生成测试数据集)。
sqlcmd
命令行工具。top
(查看CPU/内存使用率)、iostat
(监控磁盘I/O)、vmstat
(查看系统整体性能)。在无负载或低负载环境下,采集数据库的基础性能指标,作为后续优化的参照。
SET STATISTICS TIME ON
和SET STATISTICS IO ON
命令,查看查询的CPU时间、逻辑读取次数等指标。例如:SET STATISTICS TIME ON;
SET STATISTICS IO ON;
SELECT * FROM dbo.LargeTable WHERE ColumnName = 'Value';
SET STATISTICS TIME OFF;
SET STATISTICS IO OFF;
SELECT
qs.sql_handle,
qs.execution_count,
qs.total_worker_time AS CPU_Time,
qs.total_elapsed_time AS Elapsed_Time,
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY qs.total_worker_time DESC;
模拟高并发的事务处理场景(如订单录入、库存扣减),关注TPS(每秒事务数)、响应时间、并发处理能力。
oltp_read_write
测试。模拟复杂数据分析场景(如报表生成、多表关联聚合),关注查询执行时间、CPU/内存利用率、磁盘I/O吞吐量。
SELECT d.Name AS Department, e.Name AS Employee, e.Salary
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
WHERE e.Salary > (SELECT AVG(Salary) FROM Employees)
ORDER BY d.Name, e.Salary DESC;
iostat -x 1
查看磁盘I/O的await
(平均等待时间)、%util
(利用率),通过top
查看CPU的%user
(用户态占用)。模拟大量用户同时访问数据库的场景,识别锁竞争、连接池瓶颈、内存溢出等问题。
sys.dm_tran_locks
查看)。CXPACKET
表示并行查询等待)、锁等待情况。CREATE EVENT SESSION LongRunningQueries ON SERVER
ADD EVENT sqlserver.rpc_completed(
WHERE (duration > 1000000) -- 1秒(单位:微秒)
),
ADD EVENT sqlserver.deadlock
ADD TARGET package0.event_file(SET filename = '/var/opt/mssql/long_running_queries.xel');
ALTER EVENT SESSION LongRunningQueries ON SERVER STATE = START;
/var/log/mssql/errorlog
文件查看最近的错误信息(如死锁、连接超时、磁盘空间不足),使用tail -f /var/log/mssql/errorlog
实时监控。iostat -x 1
查看磁盘的await
(平均等待时间,正常<10ms)、%util
(利用率,正常<70%)、r/s
(读请求数)、w/s
(写请求数)。free -h
查看内存的used
(已用)、free
(空闲)、buff/cache
(缓存),确保SQL Server有足够的内存分配(通过max server memory
参数限制)。top
查看CPU的%user
(用户态进程占用)、%system
(内核态占用)、%idle
(空闲率),若%user
持续>85%,可能存在CPU瓶颈。根据测试结果,针对性调整以下方面:
sys.dm_db_missing_index_details
查看)、重写复杂查询(避免SELECT *
、减少子查询嵌套)、使用查询提示(如OPTION (RECOMPILE)
强制重新编译)。max server memory
设置为物理内存的70%-80%)、启用列存储索引(适用于大数据量分析场景)、配置内存中OLTP(提升高频事务处理速度)。vm.swappiness
设置为10,减少交换分区使用)、增加内存或CPU资源。通过以上方法,可全面评估SQL Server在CentOS上的性能表现,识别瓶颈并进行针对性优化,确保数据库满足业务需求。