SQLServer教程FG051-SQLServer压测评估实战
目录大纲
内容简介
本文档基于SQLServer官方文档的性能测试相关内容,结合生产环境实际情况,详细讲解SQLServer压测评估的方法、工具和实践等内容。风哥教程参考SQLServer官方文档Performance Testing、Benchmarking等相关章节。
Part01-基础概念与理论知识
1.1 压测评估概念
压测评估概念:
- 压测评估是指通过模拟实际业务负载,测试系统性能和稳定性的过程
- 压测评估的目标是评估系统在不同负载下的性能表现,发现性能瓶颈
- 压测评估包括基准测试、负载测试、压力测试等类型
- 压测评估应遵循一定的标准和规范
更多视频教程www.fgedu.net.cn
1.2 压测评估指标
压测评估指标:
- 响应时间:从请求发出到收到响应的时间
- 吞吐量:单位时间内处理的请求数
- 并发用户数:同时访问系统的用户数
- CPU使用率:CPU的使用情况
- 内存使用率:内存的使用情况
- 磁盘I/O:磁盘的读写情况
- 网络带宽:网络的使用情况
- 错误率:请求失败的比例
学习交流加群风哥微信: itpux-com
1.3 压测评估工具
压测评估工具:
- SQL Server Profiler:SQLServer内置的性能分析工具
- Database Engine Tuning Advisor:SQLServer内置的性能调优工具
- JMeter:开源的负载测试工具
- LoadRunner:商业负载测试工具
- HammerDB:开源的数据库基准测试工具
- SQLQueryStress:SQLServer查询压力测试工具
- ostress:SQLServer压力测试工具
- Performance Monitor:Windows系统的性能监控工具
学习交流加群风哥QQ113257174
Part02-生产环境规划与建议
2.1 压测评估规划
压测评估规划:
- 目标定义:明确压测评估的目标和范围
- 场景设计:设计压测场景,模拟实际业务负载
- 工具选择:选择适合的压测工具
- 环境准备:准备压测环境,确保环境与生产环境相似
- 数据准备:准备测试数据,确保数据量与生产环境相似
- 指标设定:设定性能指标和阈值
- 测试执行:执行压测评估
- 结果分析:分析压测结果,发现性能瓶颈
风哥提示:压测评估规划应根据业务需求和系统特点制定,确保测试结果的准确性和可靠性
2.2 压测评估环境
压测评估环境:
- 硬件环境:CPU、内存、磁盘、网络等硬件配置应与生产环境相似
- 软件环境:操作系统、SQLServer版本、补丁等应与生产环境一致
- 网络环境:网络带宽、延迟等应与生产环境相似
- 数据环境:测试数据量和分布应与生产环境相似
- 隔离性:压测环境应与其他环境隔离,避免干扰
更多学习教程公众号风哥教程itpux_com
2.3 压测评估策略
压测评估策略:
- 基准测试:在标准配置下测试系统性能
- 负载测试:测试系统在不同负载下的性能
- 压力测试:测试系统在极限负载下的性能
- 稳定性测试:测试系统在长时间运行下的稳定性
- 并发测试:测试系统在高并发下的性能
- 混合测试:测试系统在混合负载下的性能
from SQLServer视频:www.itpux.com
Part03-生产环境项目实施方案
3.1 压测评估实施步骤
压测评估实施步骤:
— 准备压测环境
— 安装和配置SQLServer
— 准备测试数据
— 步骤2:工具准备
— 安装和配置压测工具
— 配置测试参数
— 步骤3:场景设计
— 设计压测场景
— 编写测试脚本
— 步骤4:基准测试
— 执行基准测试
— 记录基准性能数据
— 步骤5:负载测试
— 执行负载测试
— 记录不同负载下的性能数据
— 步骤6:压力测试
— 执行压力测试
— 记录极限负载下的性能数据
— 步骤7:稳定性测试
— 执行稳定性测试
— 记录长时间运行下的性能数据
— 步骤8:结果分析
— 分析压测结果
— 发现性能瓶颈
— 提出优化建议
— 步骤9:报告生成
— 生成压测评估报告
— 总结测试结果和建议
执行结果:
– 压测环境:Windows Server 2022 + SQLServer 2022 Enterprise Edition
– 硬件配置:8核CPU、32GB内存、1TB SSD
– 测试数据:1000万条销售数据
工具准备完成:
– 压测工具:HammerDB、JMeter
– 监控工具:Performance Monitor、SQL Server Profiler
场景设计完成:
– 场景1:简单查询(SELECT * FROM fgedu.sales WHERE sale_date > ‘2025-01-01’)
– 场景2:复杂查询(JOIN、GROUP BY等)
– 场景3:插入操作(INSERT INTO fgedu.sales)
– 场景4:更新操作(UPDATE fgedu.sales)
– 场景5:删除操作(DELETE FROM fgedu.sales)
基准测试完成:
– 响应时间:100ms
– 吞吐量:1000 QPS
– CPU使用率:20%
– 内存使用率:40%
负载测试完成:
– 500并发用户:响应时间 200ms,吞吐量 2000 QPS,CPU使用率 50%
– 1000并发用户:响应时间 500ms,吞吐量 3000 QPS,CPU使用率 70%
– 2000并发用户:响应时间 1000ms,吞吐量 4000 QPS,CPU使用率 90%
压力测试完成:
– 3000并发用户:响应时间 2000ms,吞吐量 4500 QPS,CPU使用率 95%
– 4000并发用户:响应时间 5000ms,吞吐量 4800 QPS,CPU使用率 98%
– 5000并发用户:系统崩溃,无法响应
稳定性测试完成:
– 1000并发用户,运行24小时:系统稳定,无异常
结果分析完成:
– 性能瓶颈:CPU使用率过高,内存不足
– 优化建议:增加CPU核心数,增加内存,优化查询语句
报告生成完成:
– 压测评估报告:/sqlserver/reports/performance_test_report.pdf
3.2 压测评估脚本
压测评估脚本:
— 创建HammerDB测试脚本
cat > /sqlserver/scripts/hammerdb.tcl << 'EOF' # hammerdb.tcl # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn dbms sqlserver new dbset db sqlserver dbset bm TPC-C diset connection mssql_server fgedu-prod-01 diset connection mssql_port 1433 diset connection mssql_uid sa diset connection mssql_pwd Password123! diset connection mssql_db fgedudb diset tpcc mssql_count_ware 10 diset tpcc mssql_num_vu 100 diset tpcc mssql_rampup 2 diset tpcc mssql_duration 10 build wait vuset logtotemp 1 vuset vu 100 rampup 2 wait duration 10 wait stats EOF -- 2. SQLQueryStress测试脚本 -- 创建SQLQueryStress测试脚本 cat > /sqlserver/scripts/sqlquerystress.sql << 'EOF' -- sqlquerystress.sql -- from:www.itpux.com.qq113257174.wx:itpux-com -- web: http://www.fgedu.net.cn SELECT * FROM fgedu.sales WHERE sale_date > ‘2025-01-01’;
INSERT INTO fgedu.sales (product_id, customer_id, sale_date, amount, status)
VALUES (1, 1001, GETDATE(), 1000.00, ‘COMPLETED’);
UPDATE fgedu.sales SET amount = amount * 1.1 WHERE sale_id = 1;
DELETE FROM fgedu.sales WHERE sale_id = 1;
EOF
— 3. PowerShell监控脚本
— 创建PowerShell监控脚本
cat > /sqlserver/scripts/monitor_perf.ps1 << 'EOF'
#!/usr/bin/env pwsh
# monitor_perf.ps1
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
param(
[string]$OutputFile = "/sqlserver/monitor/perf_metrics.csv",
[int]$Duration = 3600
)
# 初始化CSV文件
"timestamp,cpu_usage,memory_usage,disk_io_read,disk_io_write,network_bytes_sent,network_bytes_received" | Out-File -FilePath $OutputFile -Force
$endTime = (Get-Date).AddSeconds($Duration)
while ((Get-Date) -lt $endTime) {
# 收集CPU使用率
$cpuUsage = (Get-WmiObject -Class win32_processor | Measure-Object -Property LoadPercentage -Average).Average
# 收集内存使用率
$memory = Get-WmiObject -Class win32_operatingsystem
$memoryUsage = ((($memory.TotalVisibleMemorySize - $memory.FreePhysicalMemory) / $memory.TotalVisibleMemorySize) * 100).ToString("0.00")
# 收集磁盘I/O
$disk = Get-WmiObject -Class win32_perfformatteddata_perfdisk_physicaldisk | Where-Object {$_.Name -eq "_Total"}
$diskIoRead = $disk.DiskReadBytesPersec
$diskIoWrite = $disk.DiskWriteBytesPersec
# 收集网络流量
$network = Get-WmiObject -Class win32_perfformatteddata_tcpip_networkinterface | Where-Object {$_.Name -ne "Loopback Pseudo-Interface 1"}
$networkBytesSent = $network.BytesSentPersec | Measure-Object -Sum | Select-Object -ExpandProperty Sum
$networkBytesReceived = $network.BytesReceivedPersec | Measure-Object -Sum | Select-Object -ExpandProperty Sum
# 输出到CSV文件
"$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'),$cpuUsage,$memoryUsage,$diskIoRead,$diskIoWrite,$networkBytesSent,$networkBytesReceived" | Out-File -FilePath $OutputFile -Append
# 等待1秒
Start-Sleep -Seconds 1
}
EOF
-- 4. SQLServer性能计数器脚本
-- 创建SQLServer性能计数器脚本
cat > /sqlserver/scripts/collect_perf_counters.sql << 'EOF'
-- collect_perf_counters.sql
-- from:www.itpux.com.qq113257174.wx:itpux-com
-- web: http://www.fgedu.net.cn
-- 收集SQLServer性能计数器
SELECT
counter_name,
cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN (
'Batch Requests/sec',
'SQL Compilations/sec',
'SQL Re-Compilations/sec',
'Lock Waits/sec',
'Page Reads/sec',
'Page Writes/sec',
'Buffer Cache Hit Ratio',
'Procedure Cache Hit Ratio'
);
-- 收集等待统计信息
SELECT
wait_type,
wait_time_ms,
signal_wait_time_ms
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC
TOP 10;
-- 收集活动会话
SELECT
session_id,
status,
command,
cpu_time,
logical_reads,
physical_reads,
memory_usage,
total_elapsed_time
FROM sys.dm_exec_sessions
WHERE status = 'running'
ORDER BY cpu_time DESC;
EOF
执行结果:
– /sqlserver/scripts/hammerdb.tcl
– /sqlserver/scripts/sqlquerystress.sql
– /sqlserver/scripts/monitor_perf.ps1
– /sqlserver/scripts/collect_perf_counters.sql
执行HammerDB测试:
HammerDB v4.6
Database Server: Microsoft SQL Server
Virtual Users Created: 100
Ramp Up Time: 2 minutes
Test Duration: 10 minutes
TPM: 120000
NOPM: 1500000
执行SQLQueryStress测试:
Number of threads: 100
Number of iterations: 1000
Total queries executed: 400000
Average execution time: 50ms
Maximum execution time: 500ms
Minimum execution time: 1ms
执行监控脚本:
监控开始时间:2025-04-08 10:00:00
监控结束时间:2025-04-08 11:00:00
监控数据已保存到:/sqlserver/monitor/perf_metrics.csv
执行性能计数器脚本:
counter_name cntr_value
————————— ———–
Batch Requests/sec 1000
SQL Compilations/sec 100
SQL Re-Compilations/sec 10
Lock Waits/sec 5
Page Reads/sec 500
Page Writes/sec 200
Buffer Cache Hit Ratio 95
Procedure Cache Hit Ratio 90
wait_type wait_time_ms signal_wait_time_ms
——————– ———— ——————
PAGEIOLATCH_SH 123456 1234
CXPACKET 98765 987
LCK_M_X 45678 456
session_id status command cpu_time logical_reads physical_reads memory_usage total_elapsed_time
———- ——— ————— ——– ————- ————– ———— ——————–
51 running SELECT 1000 500 100 10 5000
52 running INSERT 800 300 50 5 4000
53 running UPDATE 600 200 30 3 3000
3.3 压测评估报告
压测评估报告:
— 创建压测评估报告模板
cat > /sqlserver/reports/performance_test_report.md << 'EOF' # SQLServer压测评估报告 ## 1. 测试概述 - 测试目标:评估SQLServer在不同负载下的性能表现 - 测试环境:Windows Server 2022 + SQLServer 2022 Enterprise Edition - 测试工具:HammerDB、JMeter、SQLQueryStress - 测试时间:2025-04-08 ## 2. 测试环境 ### 2.1 硬件环境 - CPU:8核Intel Xeon E5-2670 v3 - 内存:32GB DDR4 - 存储:1TB SSD - 网络:10Gbps ### 2.2 软件环境 - 操作系统:Windows Server 2022 Standard - SQLServer:SQLServer 2022 Enterprise Edition - 补丁:最新补丁 ### 2.3 数据环境 - 数据库:fgedudb - 表:fgedu.sales(1000万条记录) - 索引:聚集索引、非聚集索引 ## 3. 测试场景 ### 3.1 场景1:简单查询 - SQL:SELECT * FROM fgedu.sales WHERE sale_date > ‘2025-01-01’
– 并发用户:100, 500, 1000, 2000
### 3.2 场景2:复杂查询
– SQL:SELECT product_id, SUM(amount) FROM fgedu.sales GROUP BY product_id
– 并发用户:100, 500, 1000, 2000
### 3.3 场景3:插入操作
– SQL:INSERT INTO fgedu.sales (product_id, customer_id, sale_date, amount, status) VALUES (?, ?, GETDATE(), ?, ?)
– 并发用户:100, 500, 1000, 2000
### 3.4 场景4:更新操作
– SQL:UPDATE fgedu.sales SET amount = amount * 1.1 WHERE sale_id = ?
– 并发用户:100, 500, 1000, 2000
### 3.5 场景5:删除操作
– SQL:DELETE FROM fgedu.sales WHERE sale_id = ?
– 并发用户:100, 500, 1000, 2000
## 4. 测试结果
### 4.1 场景1:简单查询
| 并发用户 | 响应时间(ms) | 吞吐量(QPS) | CPU使用率(%) | 内存使用率(%) |
|———-|————–|————-|————–|—————-|
| 100 | 100 | 1000 | 20 | 40 |
| 500 | 200 | 2000 | 50 | 60 |
| 1000 | 500 | 3000 | 70 | 70 |
| 2000 | 1000 | 4000 | 90 | 80 |
### 4.2 场景2:复杂查询
| 并发用户 | 响应时间(ms) | 吞吐量(QPS) | CPU使用率(%) | 内存使用率(%) |
|———-|————–|————-|————–|—————-|
| 100 | 200 | 500 | 30 | 50 |
| 500 | 500 | 1000 | 60 | 70 |
| 1000 | 1000 | 1500 | 80 | 80 |
| 2000 | 2000 | 2000 | 95 | 90 |
### 4.3 场景3:插入操作
| 并发用户 | 响应时间(ms) | 吞吐量(QPS) | CPU使用率(%) | 内存使用率(%) |
|———-|————–|————-|————–|—————-|
| 100 | 150 | 800 | 25 | 45 |
| 500 | 300 | 1500 | 55 | 65 |
| 1000 | 600 | 2500 | 75 | 75 |
| 2000 | 1200 | 3500 | 92 | 85 |
### 4.4 场景4:更新操作
| 并发用户 | 响应时间(ms) | 吞吐量(QPS) | CPU使用率(%) | 内存使用率(%) |
|———-|————–|————-|————–|—————-|
| 100 | 120 | 900 | 22 | 42 |
| 500 | 250 | 1800 | 52 | 62 |
| 1000 | 550 | 2800 | 72 | 72 |
| 2000 | 1100 | 3800 | 91 | 82 |
### 4.5 场景5:删除操作
| 并发用户 | 响应时间(ms) | 吞吐量(QPS) | CPU使用率(%) | 内存使用率(%) |
|———-|————–|————-|————–|—————-|
| 100 | 100 | 1000 | 20 | 40 |
| 500 | 200 | 2000 | 50 | 60 |
| 1000 | 500 | 3000 | 70 | 70 |
| 2000 | 1000 | 4000 | 90 | 80 |
## 5. 性能瓶颈分析
### 5.1 CPU瓶颈
– 当并发用户达到2000时,CPU使用率达到90%以上
– 复杂查询场景下,CPU使用率更高
### 5.2 内存瓶颈
– 当并发用户达到2000时,内存使用率达到80%以上
– 复杂查询场景下,内存使用率更高
### 5.3 I/O瓶颈
– 插入和更新操作时,磁盘I/O较高
– 当并发用户达到2000时,磁盘I/O成为瓶颈
### 5.4 网络瓶颈
– 网络带宽在高并发下可能成为瓶颈
## 6. 优化建议
### 6.1 硬件优化
– 增加CPU核心数,建议16核以上
– 增加内存,建议64GB以上
– 使用更快的存储设备,如NVMe SSD
– 增加网络带宽,建议25Gbps以上
### 6.2 数据库优化
– 优化查询语句,减少复杂查询
– 创建合适的索引,提高查询性能
– 更新统计信息,确保查询优化器生成最佳执行计划
– 分区表,提高大表查询性能
– 配置合适的内存参数,如最大服务器内存
### 6.3 应用优化
– 减少数据库连接数,使用连接池
– 优化应用程序代码,减少数据库操作
– 使用缓存,减少数据库查询
– 异步处理,减少同步操作
## 7. 总结
– SQLServer在低并发下性能良好
– 当并发用户达到2000时,系统性能下降明显
– CPU和内存是主要瓶颈
– 通过硬件升级和数据库优化,可以提高系统性能
## 8. 测试结论
– 系统在1000并发用户下可以正常运行
– 系统在2000并发用户下性能下降明显
– 建议优化系统配置,提高系统性能
EOF
— 2. 生成压测评估报告
— 执行HammerDB测试
hammerdb-cli -c /sqlserver/scripts/hammerdb.tcl
— 执行SQLQueryStress测试
SQLQueryStress.exe -s fgedu-prod-01 -d fgedudb -U sa -P Password123! -f /sqlserver/scripts/sqlquerystress.sql -t 100 -i 1000
— 执行监控脚本
powershell.exe -File “D:\SQLServer\Scripts\monitor_perf.ps1” -OutputFile “D:\SQLServer\Monitor\perf_metrics.csv” -Duration 3600
— 执行性能计数器脚本
sqlcmd -S fgedu-prod-01 -U sa -P Password123! -i “D:\SQLServer\Scripts\collect_perf_counters.sql” -o “D:\SQLServer\Monitor\perf_counters.txt”
— 生成报告
pandoc /sqlserver/reports/performance_test_report.md -o /sqlserver/reports/performance_test_report.pdf
执行结果:
– /sqlserver/reports/performance_test_report.md
– /sqlserver/reports/performance_test_report.pdf
报告内容摘要:
– 测试目标:评估SQLServer在不同负载下的性能表现
– 测试环境:Windows Server 2022 + SQLServer 2022 Enterprise Edition
– 测试工具:HammerDB、JMeter、SQLQueryStress
– 测试时间:2025-04-08
测试结果:
– 100并发用户:响应时间 100ms,吞吐量 1000 QPS,CPU使用率 20%
– 500并发用户:响应时间 200ms,吞吐量 2000 QPS,CPU使用率 50%
– 1000并发用户:响应时间 500ms,吞吐量 3000 QPS,CPU使用率 70%
– 2000并发用户:响应时间 1000ms,吞吐量 4000 QPS,CPU使用率 90%
性能瓶颈:
– CPU使用率过高
– 内存不足
– 磁盘I/O较高
优化建议:
– 增加CPU核心数,建议16核以上
– 增加内存,建议64GB以上
– 使用更快的存储设备,如NVMe SSD
– 优化查询语句,减少复杂查询
– 创建合适的索引,提高查询性能
测试结论:
– 系统在1000并发用户下可以正常运行
– 系统在2000并发用户下性能下降明显
– 建议优化系统配置,提高系统性能
Part04-生产案例与实战讲解
4.1 基准测试案例
基准测试实战:
— 步骤1:准备测试环境
— 安装SQLServer 2022 Enterprise Edition
— 创建测试数据库fgedudb
— 创建测试表fgedu.sales
CREATE TABLE fgedu.sales (
sale_id INT IDENTITY(1,1) PRIMARY KEY,
product_id INT,
customer_id INT,
sale_date DATETIME,
amount DECIMAL(18,2),
status VARCHAR(50)
);
— 插入测试数据
DECLARE @i INT = 1;
WHILE @i <= 10000000
BEGIN
INSERT INTO fgedu.sales (product_id, customer_id, sale_date, amount, status)
VALUES (
@i % 1000 + 1,
@i % 10000 + 1,
DATEADD(day, @i % 365, '2025-01-01'),
1000.00 + (@i % 1000),
CASE WHEN @i % 2 = 0 THEN 'COMPLETED' ELSE 'PENDING' END
);
SET @i = @i + 1;
END;
-- 创建索引
CREATE INDEX IX_sales_sale_date ON fgedu.sales(sale_date);
CREATE INDEX IX_sales_product_id ON fgedu.sales(product_id);
-- 步骤2:执行基准测试
-- 使用SQLQueryStress执行基准测试
-- 测试脚本:
-- SELECT * FROM fgedu.sales WHERE sale_date > ‘2025-01-01’;
— 并发用户:100
— 迭代次数:1000
— 步骤3:分析基准测试结果
— 响应时间:100ms
— 吞吐量:1000 QPS
— CPU使用率:20%
— 内存使用率:40%
— 步骤4:优化数据库
— 更新统计信息
UPDATE STATISTICS fgedu.sales WITH FULLSCAN;
— 重建索引
ALTER INDEX ALL ON fgedu.sales REBUILD WITH (ONLINE = ON, FILLFACTOR = 80);
— 步骤5:再次执行基准测试
— 响应时间:80ms
— 吞吐量:1200 QPS
— CPU使用率:15%
— 内存使用率:35%
执行结果:
– 数据库:fgedudb
– 表:fgedu.sales(1000万条记录)
– 索引:IX_sales_sale_date, IX_sales_product_id
第一次基准测试结果:
– 响应时间:100ms
– 吞吐量:1000 QPS
– CPU使用率:20%
– 内存使用率:40%
数据库优化完成:
– 更新统计信息:完成
– 重建索引:完成
第二次基准测试结果:
– 响应时间:80ms
– 吞吐量:1200 QPS
– CPU使用率:15%
– 内存使用率:35%
性能提升:
– 响应时间:减少20%
– 吞吐量:增加20%
– CPU使用率:减少25%
– 内存使用率:减少12.5%
4.2 负载测试案例
负载测试实战:
— 步骤1:准备测试环境
— 使用与基准测试相同的环境
— 步骤2:执行负载测试
— 使用JMeter执行负载测试
— 测试场景:
— 场景1:简单查询(SELECT * FROM fgedu.sales WHERE sale_date > ‘2025-01-01’)
— 场景2:复杂查询(SELECT product_id, SUM(amount) FROM fgedu.sales GROUP BY product_id)
— 场景3:插入操作(INSERT INTO fgedu.sales (product_id, customer_id, sale_date, amount, status) VALUES (?, ?, GETDATE(), ?, ?))
— 场景4:更新操作(UPDATE fgedu.sales SET amount = amount * 1.1 WHERE sale_id = ?)
— 场景5:删除操作(DELETE FROM fgedu.sales WHERE sale_id = ?)
— 步骤3:分析负载测试结果
— 500并发用户:
— 场景1:响应时间 200ms,吞吐量 2000 QPS,CPU使用率 50%
— 场景2:响应时间 500ms,吞吐量 1000 QPS,CPU使用率 60%
— 场景3:响应时间 300ms,吞吐量 1500 QPS,CPU使用率 55%
— 场景4:响应时间 250ms,吞吐量 1800 QPS,CPU使用率 52%
— 场景5:响应时间 200ms,吞吐量 2000 QPS,CPU使用率 50%
— 1000并发用户:
— 场景1:响应时间 500ms,吞吐量 3000 QPS,CPU使用率 70%
— 场景2:响应时间 1000ms,吞吐量 1500 QPS,CPU使用率 80%
— 场景3:响应时间 600ms,吞吐量 2500 QPS,CPU使用率 75%
— 场景4:响应时间 550ms,吞吐量 2800 QPS,CPU使用率 72%
— 场景5:响应时间 500ms,吞吐量 3000 QPS,CPU使用率 70%
— 2000并发用户:
— 场景1:响应时间 1000ms,吞吐量 4000 QPS,CPU使用率 90%
— 场景2:响应时间 2000ms,吞吐量 2000 QPS,CPU使用率 95%
— 场景3:响应时间 1200ms,吞吐量 3500 QPS,CPU使用率 92%
— 场景4:响应时间 1100ms,吞吐量 3800 QPS,CPU使用率 91%
— 场景5:响应时间 1000ms,吞吐量 4000 QPS,CPU使用率 90%
— 步骤4:优化系统
— 增加CPU核心数:从8核增加到16核
— 增加内存:从32GB增加到64GB
— 使用NVMe SSD:替换传统SSD
— 步骤5:再次执行负载测试
— 2000并发用户:
— 场景1:响应时间 500ms,吞吐量 6000 QPS,CPU使用率 60%
— 场景2:响应时间 1000ms,吞吐量 3000 QPS,CPU使用率 70%
— 场景3:响应时间 600ms,吞吐量 5000 QPS,CPU使用率 65%
— 场景4:响应时间 550ms,吞吐量 5500 QPS,CPU使用率 62%
— 场景5:响应时间 500ms,吞吐量 6000 QPS,CPU使用率 60%
执行结果:
– 数据库:fgedudb
– 表:fgedu.sales(1000万条记录)
– 索引:IX_sales_sale_date, IX_sales_product_id
优化前负载测试结果:
500并发用户:
– 场景1:响应时间 200ms,吞吐量 2000 QPS,CPU使用率 50%
– 场景2:响应时间 500ms,吞吐量 1000 QPS,CPU使用率 60%
– 场景3:响应时间 300ms,吞吐量 1500 QPS,CPU使用率 55%
– 场景4:响应时间 250ms,吞吐量 1800 QPS,CPU使用率 52%
– 场景5:响应时间 200ms,吞吐量 2000 QPS,CPU使用率 50%
1000并发用户:
– 场景1:响应时间 500ms,吞吐量 3000 QPS,CPU使用率 70%
– 场景2:响应时间 1000ms,吞吐量 1500 QPS,CPU使用率 80%
– 场景3:响应时间 600ms,吞吐量 2500 QPS,CPU使用率 75%
– 场景4:响应时间 550ms,吞吐量 2800 QPS,CPU使用率 72%
– 场景5:响应时间 500ms,吞吐量 3000 QPS,CPU使用率 70%
2000并发用户:
– 场景1:响应时间 1000ms,吞吐量 4000 QPS,CPU使用率 90%
– 场景2:响应时间 2000ms,吞吐量 2000 QPS,CPU使用率 95%
– 场景3:响应时间 1200ms,吞吐量 3500 QPS,CPU使用率 92%
– 场景4:响应时间 1100ms,吞吐量 3800 QPS,CPU使用率 91%
– 场景5:响应时间 1000ms,吞吐量 4000 QPS,CPU使用率 90%
系统优化完成:
– CPU核心数:从8核增加到16核
– 内存:从32GB增加到64GB
– 存储:从传统SSD替换为NVMe SSD
优化后负载测试结果:
2000并发用户:
– 场景1:响应时间 500ms,吞吐量 6000 QPS,CPU使用率 60%
– 场景2:响应时间 1000ms,吞吐量 3000 QPS,CPU使用率 70%
– 场景3:响应时间 600ms,吞吐量 5000 QPS,CPU使用率 65%
– 场景4:响应时间
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
