使用MYSQL Report分析数据库性能(下)

简介: 使用MYSQL Report分析数据库性能

关于my.ini设置

在my.ini设置过程中有几点需要注意

由于没有注明是MySQL还是MariaDB,所以Deep Seek在上面给出的命令由于MySQL还是MariaDB不同而不同,即使是MySQL还是MariaDB,命令也不同。我是按照最后的实践做的设置,最后如下:

[mysqld]
…
#
我的设置
thread_handling = pool-of-threads
thread_pool_size = 32
thread_pool_max_threads = 1000
read_only = ON
wait_timeout = 300
table_open_cache = 2048
tmp_table_size = 64M
performance_schema = ON
slow_query_log = ON
slow_query_log_file = C:\xampp\mysql\slow.log
long_query_time = 2
join_buffer_size = 1M
innodb_flush_neighbors = 0
innodb_adaptive_hash_index = OFFI
sort_buffer_size = 4M
max_sort_length = 1024
optimizer_trace = enabled=ON
query_cache_type =0
query_cache_size = 0
table_definition_cache = 400
table_open_cache_instances = 16
performance-schema-instrument = 'wait/lock/table/%=ON'
interactive_timeout = 60
skip_name_resolve = ON
max_heap_table_size = 64M
max_connections=600
thread_cache_size=256
connect_timeout = 15
default_authentication_plugin = mysql_native_password
skip_name_resolve = ON
max_connect_errors = 1000000
innodb_buffer_pool_chunk_size = 1M
innodb_lru_scan_depth = 256
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_instances=8
transaction_isolation = READ-COMMITTED
innodb_lock_wait_timeout = 30
innodb_deadlock_detect = ON
innodb_print_all_deadlocks = ON
innodb_lock_wait_timeout = 10
innodb_status_output = ON
innodb_status_output_locks = ON
innodb_read_ahead_threshold = 64
innodb_random_read_ahead = ON
read_buffer_size = 4M
innodb_buffer_pool_size = 150M
innodb_buffer_pool_dump_now = ON
innodb_buffer_pool_load_now = ON
innodb_monitor_enable = all
back_log = 200

关于Deep Seek需要注意

由于LLM仍旧处于初级看阶段,Deep Seek给出的配置信息不一定正确(有时间真的是一本正经的胡说八道),所以我都经过实际验证后做出的配置,必要的时候需要多次向Deep Seek发问。一般来说,有些类似:

Set GLOBAL var=value

出现var是个只读变量的时候,可以在my.ini中设置

var=value

第二次运行

运行同样的压测程序,重新运行MYSQL Report,获得下面数据

MySQL 10.4.32-MariaDB-l  uptime 0 0:56:33       Tue Aug  5 17:32:00 2025
__ Key _________________________________________________________________
Buffer used         0 of   4.00M  %Used:   0.00
Current     755.00k            %Usage:  18.43
Write hit       0.00%
Read hit        0.00%
__ Questions ___________________________________________________________
Total           2.04M   601.7/s
  Com_          1.17M   343.8/s  %Total:  57.14
  DMS         874.99k   257.9/s           42.86
  COM_QUIT    291.67k    86.0/s           14.29
  -Unknown    291.67k    86.0/s           14.29
Slow 2 s            0       0/s            0.00  %DMS:   0.00  Log:
DMS           874.99k   257.9/s           42.86
  SELECT      874.99k   257.9/s           42.86        100.00
  UPDATE            0       0/s            0.00          0.00
  DELETE            0       0/s            0.00          0.00
  REPLACE           0       0/s            0.00          0.00
  INSERT            0       0/s            0.00          0.00
Com_            1.17M   343.8/s           57.14
  set_option  874.99k   257.9/s           42.86
  admin_comma 291.66k    86.0/s           14.29
  show_variab       1     0.0/s            0.00
__ SELECT and Sort _____________________________________________________
Scan          291.66k    86.0/s %SELECT:  33.33
Range               0       0/s            0.00
Full join           0       0/s            0.00
Range check         0       0/s            0.00
Full rng join       0       0/s            0.00
Sort scan           0       0/s
Sort range          0       0/s
Sort mrg pass       0       0/s
__ Table Locks _________________________________________________________
Waited              0       0/s  %Total:   0.00
Immediate          20     0.0/s
__ Tables ______________________________________________________________
Open               21 of 2048    %Cache:   1.03
Opened             28     0.0/s
__ Connections _________________________________________________________
Max used           11 of   50      %Max:  22.00
Total         291.67k    86.0/s
__ Created Temp ________________________________________________________
Disk table          0       0/s
Table               2     0.0/s    Size:  64.0M
File                4     0.0/s
__ Threads _____________________________________________________________
Running             6 of    1
Cached              0 of   50      %Hit:  99.99
Created            23     0.0/s
Slow                0       0/s
__ Aborted _____________________________________________________________
Clients             0       0/s
Connects            0       0/s
__ Bytes _______________________________________________________________
Sent          408.62M  120.4k/s
Received      449.74M  132.6k/s
__ InnoDB Buffer Pool __________________________________________________
Usage           8.83M of   3.88G  %Used:   0.22
Read hit      100.00%
Pages
  Free        253.39k            %Total:  99.78
  Data            565                      0.22 %Drty:   0.00
  Misc              0                      0.00
  Latched                                  0.00
Reads          36.71M   10.8k/s
  From file       435     0.1/s            0.00
  Ahead Rnd        28     0.0/s
  Ahead Sql                 0/s
Writes            715     0.2/s
Flushes           131     0.0/s
Wait Free           0       0/s
__ InnoDB Lock _________________________________________________________
Waits               0       0/s
Current             0
Time acquiring
  Total             0 ms
  Average           0 ms
  Max               0 ms
__ InnoDB Data, Pages, Rows ____________________________________________
Data
  Reads           455     0.1/s
  Writes          135     0.0/s
  fsync             4     0.0/s
  Pending
    Reads           0
    Writes          0
    fsync           0
Pages
  Created         131     0.0/s
  Read            434     0.1/s
  Written         131     0.0/s
Rows
  Deleted           0       0/s
  Inserted          0       0/s
  Read        291.95M   86.0k/s
  Updated           0       0/s

两次运行结果进行比对

1.索引报表
第一组

_ Key _________________________________________________
Buffer used        0 of    16.00M    %Used:    0.00
Current2.92M        %Usage:18.28
Write hit                0.00%
Read hit                0.00%

第二组

__ Key _________________________________________________________________
Buffer used        0 of    4.00M    %Used:    0.00
Current        755.00k        %Usage:18.43
Write hit            0.00%
Read hit            0.00%

比较两组性能哪组更好

比较结果
基于提供的索引报表数据,我将从缓存性能的角度分析两组数据,并给出结论。缓存性能主要取决于以下指标:

缓存命中率(Read hit 和 Write hit)
:更高的命中率表示更多数据请求可以直接从缓存中获取,减少磁盘I/O,从而提高性能。
缓存使用率(%Usage)
:表示当前缓存的使用程度,但高使用率不一定直接等同于高性能,需结合命中率分析。
缓存大小(Total buffer)
:更大的缓存可以容纳更多数据,潜在提高命中率,但实际性能取决于当前使用和命中率。
当前使用量(Current)
:绝对缓存数据量,影响潜在性能。
数据摘要:

第一组:

  • 总缓存大小:16.00 MB
  • 当前使用量:2.92 MB
  • 使用率:18.28%
  • 写命中率:0.00%
  • 读命中率:0.00%
    第二组:
  • 总缓存大小:4.00 MB
  • 当前使用量:755.00 KB(约0.755 MB)
  • 使用率:18.43%
  • 写命中率:0.00%
  • 读命中率:0.00%
    关键分析:

缓存命中率(最关键指标):

  • 两组都显示写命中率和读命中率均为0.00%,这意味着所有读写请求都未命中缓存,必须访问磁盘。这会显著增加I/O延迟,降低性能。
  • 由于两组命中率完全相同,从该指标看,性能没有差异。
    缓存使用率(%Usage):
  • 第一组使用率为18.28%,第二组为18.43%。第二组使用率略高(差值为0.15%),但这并不表示性能更好,因为:
    使用率高仅表示缓存被占用更多,但命中率为0%,表明这些占用无效(数据未被有效利用)。
  • 第二组的绝对使用量更小(0.755 MB vs 2.92 MB),意味着它缓存的数据量更少,可能对性能提升潜力有限。
    缓存大小和当前使用量:
  • 第一组总缓存更大(16.00 MB vs 4.00 MB),当前缓存数据量更多(2.92 MB vs 0.755 MB)。在相同访问模式下,更大的缓存有更高潜力减少未来磁盘I/O,但当前命中率为0%,该潜力未实现。
  • 第二组缓存较小,尽管使用率略高,但绝对数据量少,在相同命中率下,性能提升空间更小。
    其他指标(Buffer used 和 %Used):
  • 两组都显示"Buffer used 0"和"%Used: 0.00",但"Current"和"%Usage"显示非零值,这可能存在报表歧义(可能"Buffer used"指特定类型缓冲区如脏页面,而"Current"指总使用)。然而,这些指标不影响核心性能比较,因为:
    1)如果"Buffer used"表示脏缓冲区(需写入磁盘),值为0表示无额外磁盘写入负担,但两组相同。
    2)性能主要由命中率主导。
    结论:

两组性能相似,但第一组略优

  • 理由如下:
    1)核心指标(读写命中率)完全相同(0.00%),表明当前性能均较差,且无显著差异。
    2)次要指标中,第一组缓存更大(16.00 MB vs 4.00 MB)且当前缓存数据量更多(2.92 MB vs 0.755 MB),这为未来性能提升提供了更好基础
    (例如,当系统运行更久、命中率改善时,更大缓存能减少更多磁盘I/O)。
    第二组使用率略高(18.43% vs 18.28%),但差异极小(0.15%),且绝对缓存量小,不足以抵消缓存大小的劣势。
    建议:命中率为0%通常表示系统刚启动或缓存未有效预热,建议监控更多周期数据(如随时间变化的命中率)以获取更准确性能评估。如果工作负载增加,第一组可能更快显示出性能优势。

2.操作报表
第一组

__ Questions ___________________________________________________________
Total        3.89M        640.2/s
Com_        2.25M        370.0/s    %Total:  57.80
DMS        1.64M        270.3/s    42.22
-Unknown    548.48k    90.2/s        14.09
COM_QUIT    547.78k    90.1/s        14.07
Slow 10 s    0        0/s        0.00%    DMS:    0.00    Log:
DMS        1.64M        270.3/s    42.22
  SELECT    1.64M        270.1/s    42.19        99.93
  INSERT    1.00k        0.2/s        0.03        0.06
  DELETE    66        0.0/s        0.00        0.00
  UPDATE    0        0/s        0.00        0.00
  REPLACE    0        0/s        0.00        0.00
Com_        2.25M        370.0/s    57.80
  set_option    1.67M        274.6/s    42.89
  admin_comma    547.03k    90.0/s        14.05
  show_tables    13.57k        2.2/s        0.35

第二组

__ Questions ___________________________________________________________
Total        2.04M        601.7/s
  Com_        1.17M        343.8/s    %Total:  57.14
  DMS        874.99k    257.9/s    42.86
  COM_QUIT    291.67k    86.0/s        14.29
  -Unknown    291.67k         86.0/s         14.29
Slow 2 s    0        0/s        0.00  %DMS: 0.00  Log:
DMS        874.99k    257.9/s    42.86
  SELECT    874.99k    257.9/s    42.86        100.00
  UPDATE    0        0/s        0.00        0.00
  DELETE    0        0/s        0.00        0.00
  REPLACE    0        0/s        0.00        0.00
  INSERT    0        0/s        0.00        0.00
Com_        1.17M        343.8/s    57.14
  set_option  874.99k        257.9/s    42.86
  admin_comma 291.66k        86.0/s        14.29
  show_variab    1        0.0/s        0.00

比较两组性能哪组更好

比较结果
基于提供的操作报表数据,我将从吞吐量、慢查询、查询类型分布和响应时间等角度综合分析两组性能,并给出结论。

关键指标对比:

image.png
深度分析:

吞吐量(核心指标):

  • 第一组显著更高:
    1)总QPS:640.2/s vs 601.7/s(高出6.4%)
    SELECT QPS
    :270.1/s vs 257.9/s(高出4.7%)
    说明第一组处理能力更强,单位时间内可完成更多查询。

响应时间与慢查询:

  • 两组均无慢查询记录(慢查询=0),但阈值不同:
    第二组定义更严格(>2秒即记录 vs 第一组>10秒)
  • 隐含结论:
    第二组所有查询响应时间<2秒;第一组只能确认<10秒,无法排除2-10秒的查询。
    若优先考虑低延迟,第二组响应时间表现更优。

查询类型分布:

  • 两组负载高度相似:
    1)SELECT
    占比均>99.9%(只读型负载)
    2)主要命令均为set_option(配置操作)和admin_comma(管理命令)
    3)写操作(INSERT/UPDATE)极少或为0
  • 第二组写操作频率更低
    (0 vs 0.2/s),但差异微小不影响整体性能。
    连接效率:
  • COM_QUIT(连接断开)频率第二组略低
    (86.0/s vs 90.1/s),说明连接管理开销稍小。
    结论:第二组性能更好

核心依据:
在吞吐量差距较小(第一组QPS高6.4%)的前提下,第二组提供了更严格的响应时间保证(所有查询<2秒),而第一组只能保证<10秒。对于在线业务系统,低延迟通常比高吞吐更重要。

补充说明:

若业务需要最大化吞吐量(如离线分析场景),第一组更优。
但根据典型数据库应用场景(尤其是交互式系统),响应时间是更关键的指标,因此第二组综合表现更好。
💡建议:监控平均响应时间数据以进一步验证。若第一组平均响应时间<2秒,则两组性能相当;若存在2-10秒的查询,则第二组优势更明显。

3.查询和排序报表
第一组

__ SELECT and Sort _______________________________________
Scan                577.62k    95.0/s %SELECT:35.16
Range                  0              0/s    0.00
Full join            0              0/s    0.00
Range check            0              0/s    0.00
Full rng join            0              0/s    0.00
Sort scan             0              0/s
Sort range            298            0.0/s
Sort mrg pass             0              0/s

第二组

__ SELECT and Sort _____________________________________________________
Scan291.66k    86.0/s %SELECT:33.33
Range00/s        0.00
Full join        00/s        0.00
Range check        00/s        0.00
Full rng join        00/s        0.00
Sort scan        00/s
Sort range        00/s
Sort mrg pass            0            0/s

两组性能哪组更好

比较结果
基于提供的查询和排序报表数据,我将从扫描效率、排序负载和查询模式三个维度分析两组性能,并给出结论:

关键指标对比:
image.png
深度分析:

全表扫描效率(核心瓶颈):

  • 第二组全表扫描频率更低(86.0/s vs 95.0/s),说明:
    1)更有效的索引利用:减少不必要的全表遍历
    2)I/O负载更低:每秒减少9次全表扫描
  • 扫描在SELECT中占比也更低(33.33% vs 35.16%),进一步证实查询优化更好

排序负载(关键性能差异):

  • 第一组存在显著排序开销:
    1)2980次/秒的范围排序(Sort range)
    2)消耗大量CPU和内存资源
    3)增加查询延迟风险
  • 第二组完全无排序操作:
    1)所有排序指标均为0
    2)表明查询完全通过索引满足,无需额外排序步骤
    显著降低CPU压力
    查询模式健康度:
  • 两组均无负面操作(Full join/Range check等=0)
  • 但第二组的零排序+更低扫描,表明:
    1)更优的索引设计:索引完全覆盖查询需求
    2)更高效的执行计划:避免资源密集型操作
    结论:第二组性能显著更好

核心依据:

  • 全表扫描更少(-9.5%),降低I/O压力
  • 完全消除排序操作(2980次/秒→0),大幅减少CPU开销
  • 扫描占比更低,表明索引利用率更高
    💡根本原因:

第二组的查询模式表明数据库索引设计更优,使得:

  • 数据检索可通过索引直接完成(避免全表扫描)
  • 排序需求在索引遍历时天然满足(消除显式排序)
    这是数据库高性能查询的黄金标准。

附加说明:

虽然第一组的SELECT总量更高(270.1/s vs 257.9/s),但第二组通过更优的执行效率,在吞吐量相近的情况下实现了更低的资源消耗和更稳定的性能表现。

4.查询缓存报表
第一组

__ Query Cache __________________________________________
Memory usage    16.80k of    1.00M    %Used:    1.64
Block Fragmnt     100.00%
Hits00/s
Inserts10.0/s
Insrt:Prune    1:10/s
Hit:Insert    0.00:1

第二组

无,由于

SET GLOBAL query_cache_size = 0;-- 彻底关闭

彻底关闭缓存查询

5.表锁报表和表信息报表
第一组

__ Table Locks ________________________________________________
Waited            0        0/s    %Total: 0.00
Immediate        257        0.0/s
__ Tables ______________________________________________________
Open            161 of 2000    %Cache: 8.05
Opened            168        0.0/s

第二组

__ Table Locks _________________________________________________________
Waited            0        0/s  %Total:   0.00
Immediate        20        0.0/s
__Tables______________________________________________________________
Open            21 of 2048    %Cache: 1.03
Opened            28    0.0/s

比较两组性能哪组更好

比较结果
基于提供的表锁和表缓存报表数据,我将从锁竞争、缓存效率和资源利用率三个维度分析两组性能:

关键指标对比:
image.png
深度分析:

锁竞争效率(关键并发指标):

  • 两组均无锁等待(Waited=0),表明无显性锁竞争
  • 但第二组锁请求量显著更低(Immediate: 20 vs 257):
    1)减少92%的锁管理开销
    2)降低CPU上下文切换频率
    3)隐含更高并发能力(相同操作需更少锁)

表缓存效率(内存资源利用):

  • 第二组缓存利用率更优(1.03% vs 8.05%):
    1)仅需21张打开表 vs 第一组161张
    2)节省约87%的表缓存内存(可分配给其他组件)
    3)证明更优的连接复用或查询模式
  • 表打开次数(Opened)第二组减少83%:
    1)大幅降低磁盘I/O(表元数据加载)
    2)减少内核态切换开销

资源扩展潜力:

  • 第二组表缓存上限更高(2048 vs 2000)
  • 当前使用率极低(1.03%),具备更强弹性
  • 第一组使用率已达8.05%,接近MySQL默认警告阈值(10%)
    结论:第二组性能显著更好

核心依据:

  • 锁管理开销降低92%→更高并发潜力
  • 表缓存内存占用减少87%→资源利用更高效
  • 表打开IO操作减少83%→降低系统负载
    💡性能优势本质:

第二组数据表明数据库处于更健康的状态:

  • 连接或会话能高效复用已打开的表(减少重复打开)
  • 查询模式可能更集中(需要维护的打开表更少)
  • 整体系统开销显著降低,为高并发预留充足空间

补充说明:

虽然两组都未出现表锁等待(Waited=0),但第二组通过从根本上减少锁请求数量(从257次→20次),实现了更优的并发处理效率。结合前序报表中第二组更优的查询执行效率(无排序+更低扫描),其整体性能优势已形成连贯证据链。

6.链接报表与临时报表
第一组

__ Connections _______________________________________________
Max used        501 of500    %Max:100.20
Total            547.95k    90.1/s
__ Created Temp ________________________________________________
Disk table        5.99k        1.0/s
Table            30.91k        5.1/s    Size:  16.0M
File            4        0.0/s

第二组

__ Connections ________________________________________________
Max used        11 of 50    %Max:22.00
Total            291.67k    86.0/s
__ Created Temp _______________________________________________
Disk table        0        0/s
Table            2        0.0/s    Size:64.0M
File                4        0.0/s

比较两组性能哪组更好

比较结果
基于提供的连接和临时表报表数据,我将从连接压力、资源超限风险和临时表效率三个关键维度进行专业分析:

核心指标对比:
image.png
深度性能分析:

连接管理(关键稳定性指标):

  • 第一组存在严重风险:
    1)连接峰值超过最大限制(501>500),导致连接被拒绝或错误
    2)高连接频率(90.1次/秒)表明连接复用率低,频繁创建销毁连接
  • 第二组保持安全状态:
    1)峰值仅占配置的22%,预留78%连接余量
    2)虽然连接频率相近(86.0次/秒),但高效复用连接(需创建更少新连接)

临时表效率(关键性能瓶颈):

  • 磁盘临时表:
    1)第一组每秒创建1个磁盘临时表 → 强制磁盘I/O(比内存慢100-1000倍)
    2)第二组完全消除磁盘临时表 → 纯内存操作
  • 内存临时表:
    1)第一组高频创建(5.1次/秒),消耗CPU和内存资源
    2)第二组几乎为零(仅2次总量)→ 查询优化更完善
  • 资源分配:
    1)第二组临时表内存池更大(64.0MB vs 16.0MB),为复杂查询提供缓冲

系统压力综合评估:
image.png
结论:第二组性能显著更好

核心依据:

  • 100%避免连接超限风险(vs 第一组超限导致服务拒绝)
  • 完全消除磁盘临时表(vs 第一组持续产生性能瓶颈)
  • 降低98%临时表开销(内存临时表创建5.1次/秒→接近0)

⚠️第一组的严重问题:

连接超限(501/500)是生产环境严重事故,会导致客户端连接失败。结合高频磁盘临时表创建,表明存在:

  • 连接池配置不当
  • 查询未优化(需大量临时表)
  • 内存配置不足

性能优势本质:

第二组展示了优化的系统配置和查询效率:

  • 通过连接复用保持低连接数
  • 查询优化避免临时表创建
  • 充足的内存资源(64MB临时表池)
    即使总查询量相近(见前序报表),第二组实现了更稳定高效的运行状态。

7.线程报表
第一组

__ Threads _____________________________________________
Running   10of31
Cached    0 of256      %Hit: 99.97
Created   163            0.0/s
Slow      0              0/s
__ Aborted _________________________________
Clients      347          0.1/s
Connects      17.97k        3.0/s
__ Bytes _____________________________________
Sent        885.62M      145.6k/s
Received    847.43M      139.4k/s

第二组

__ Threads _____________________________________________________________
Running    6of1
Cached        0of50        %Hit: 99.99
Created    23        0.0/s
Slow        0        0/s
__ Aborted _____________________________________________________________
Clients    0        0/s
Connects    0        0/s
__ Bytes _______________________________________________________________
Sent        408.62M    120.4k/s
Received    449.74M    132.6k/s

比较两组性能哪组更好

比较结果
基于提供的线程和连接报表数据,我将从线程效率、连接稳定性和网络吞吐量三个关键维度进行专业分析:

核心指标对比:
image.png
注¹:第二组"6of1"应为数据记录错误,实际表示高利用率状态

深度性能分析:

线程管理(核心效率指标):

  • 第一组存在严重问题:
    1)线程创建频率高达1630次/秒 →巨大CPU开销(线程创建消耗微秒级CPU时间)
    2)线程缓存未利用(Cached=0),表明线程池配置不当
  • 第二组达到理想状态:
    1)零线程创建(0.0次/秒)→ 完美线程复用
    2)高运行线程比例(600%)→ 高效利用线程资源

连接稳定性(服务质量关键):

  • 第一组存在灾难性故障:
    1)每秒3470次客户端异常中断 → 请求大规模失败
    2)每秒3次连接建立失败 → 客户端无法连接
  • 第二组完美运行:
    1)零异常中断(0/s)
    2)零连接失败(0/s)

网络吞吐效率:

  • 第一组吞吐量略高(285k/s vs 253k/s),但这是以巨大代价换取:
    1)异常中断量是成功请求的12倍(3470/s vs 270.3/s SELECT)
    2)实际有效吞吐量远低于第二组

系统健康度综合评估:
image.png
结论:第二组性能绝对优势

核心依据:

  • 100%消除线程创建开销(vs 第一组每秒1630次高成本操作)
  • 完全消除连接异常(vs 第一组每秒3470次中断)
  • 零连接失败(vs 第一组持续连接问题)

⚠️第一组的系统性故障:

异常中断率(3470.1/s)是查询处理量(270.3/s SELECT)的12.8倍,表明:

  • 连接池配置错误
  • 网络层存在严重缺陷
  • 数据库服务处于不可用状态

性能优势本质:

第二组展示了专业级的数据库配置:

  • 通过线程池优化实现零线程创建
  • 稳健的连接管理确保100%可用性
  • 在保证服务质量的前提下维持合理吞吐
    即使第一组有略高的网络吞吐量,但其实际服务能力趋近于零(因大规模请求失败),因此第二组以绝对优势胜出。

8.InnoDB缓存池报表
第一组

__ InnoDB Buffer Pool _____________________________
Usage          13.39M of    15.67M    %Used:    85.44
Read hit    100.00%
Pages
  Free          146            %Total:  14.56
  Data          85084.75      %Drty:   0.00
  Misc          70.70
  Latched                     0.00
Reads            68.08M    11.2k/s
  From file      1.50k    0.2/s      0.00
  Ahead Rnd      0            0/s
  Ahead Sq            0/s
Writes            9.09k    1.5/s
Flushes           6070.1/s
Wait Free        0          0/s

第二组

__ InnoDB Buffer Pool _________________________________________
Usage8.83M of    3.88G    %Used:0.22
Read         100.00%
Pages
  Free253.39k    %Total:99.78
  Data5650.22 %    Drty:0.00
  Misc00.00
  Latched0.00
Reads36.71M        10.8k/s
  From file    4350.1/s    0.00
  Ahead Rnd    280.0/s
  Ahead Sql            0/s
Writes7150.2/s
Flushes1310.0/s
Wait Free    00/s

比较两组性能哪组更好

比较结果
基于提供的InnoDB Buffer Pool报表数据,我将从缓存效率、内存管理、I/O负载和扩展能力四个维度进行专业分析:

核心指标对比:
image.png
深度性能分析:

缓存效率(核心指标):

  • 两组均达到100%读命中率,表明:
    1)热数据完全缓存在内存
    2)物理读极少(0.2/s vs 0.1/s)
  • 但实现方式本质不同:
    1)第一组:通过高利用率(85.44%)实现高效缓存
    2)第二组:通过严重超配(3.88G缓存8.83M数据)实现

内存管理(关键资源效率):

  • 第一组高效利用内存:
    1)缓存池15.67MB中有效使用13.39MB
    2)空闲页仅14.56%,接近理想生产配置(通常建议80-90%利用率)
  • 第二组严重浪费资源:
    1)3.88GB缓存池仅存8.83MB数据 → 利用率0.22%
    2)99.78%内存闲置 → 可分配给其他组件(如OS文件缓存)

写入负载(持久化开销):

  • 第一组写操作更频繁:
    1)写入频率高7.5倍(1.5/s vs 0.2/s)
    2)刷新操作持续进行(0.1/s)
  • 第二组写入负载极低:
    1)几乎无写入压力
    2)零刷新等待(Wait Free=0)

扩展能力与风险:
image.png
结论:第一组内存效率显著更高

核心依据:

同等缓存命中率下,内存利用率高387倍(85.44% vs 0.22%)
避免3.88GB内存的严重浪费(可优化分配给其他服务)
实际物理读差异可忽略(0.2/s vs 0.1/s)
💡性能本质差异:

  • 第一组展示了专业的内存配置:用15.67MB缓存池高效服务工作集
  • 第二组暴露严重的资源配置失误:用3.88GB缓存8.83MB数据,违反基础优化原则

补充说明:

虽然第二组写入负载更低,但:

  • 结合前序报表,第二组查询量本就较低(SELECT 257.9/s vs 第一组270.1/s)
  • 写入差异(1.5/s vs 0.2/s)绝对数值极小,不影响整体性能评估

优化建议:

第二组应将innodb_buffer_pool_size从3.88G降至100-200MB,释放内存用于:

  • 操作系统文件缓存
  • 应用层进程
  • 其他数据库组件(如查询缓存)

9.InnoDB其他报表
第一组

__ InnoDB Data, Pages, Rows _____________________________
Data
  Read      1.66k        0.3/s
  Writes    1.67k        0.3/s
  Fsync     1.09k        0.2/s
  Pending
    Reads    0
    Writes   0
    Fsync    0
Pages
  Created    149              0.0/s
  Read       1.50k        0.2/s
  Written    607              0.1/s
Rows
  Deleted    4                0.0/s
  Inserted   1.00k        0.2/s
  Read       540.48M           88.9k/s
  Updated    0                0/s

第二组

__ InnoDB Data, Pages, Rows __________________________________
Data
  Reads4550.1/s
  Writes1350.0/s
  Fsync40.0/s
  Pending
Reads0
Writes0
Fsync0
Pages
  Created1310.0/s
  Read4340.1/s
  Written1310.0/s
Rows
  Deleted00/s
  Inserted00/s
  Read291.95M    86.0k/s
  Updated00/s

比较两组性能哪组更好

比较结果
核心指标对比:
image.png
深度性能分析:

锁竞争(关键并发指标):

  • 第二组完美状态:
    1)零锁等待(Waits=0)
    2)零当前锁(Current=0)
    3)获取锁耗时=0ms
  • 第一组无数据报告,但高写入负载(0.3次/秒)和高页面创建(1490页/秒)暗示:
    1)可能存在隐式行锁竞争
    2)页面分裂可能导致索引锁争用

写入压力(持久化瓶颈):

  • 第一组持续写入负载:
    1)数据写入0.3次/秒
    2)每秒240次行变更(插入+删除)
    3)页面创建1490页/秒 → 索引分裂高开销
  • 第二组接近零写入:
    1)所有写入指标趋近于0
    2)零页面创建 → 无B+树分裂开销

I/O负载优化:
image.png
资源开销本质差异:
image.png
结论:第二组性能显著更好

核心依据:

  • 100%消除锁竞争(vs 第一组未知锁状态)
  • 零页面创建开销(vs 第一组高代价索引分裂)
  • 完全消除写入负载(vs 第一组持续写入压力)

💡性能优势本质:

第二组展示了只读型负载的理想状态:

  • 纯SELECT查询(无INSERT/UPDATE/DELETE)
  • 数据完全静态(无索引分裂需求)
  • 完美锁并发(无任何竞争)
    即使第一组有3.4%的行读取吞吐优势,但这是以高昂的写入开销为代价,实际系统效率远低于第二组。

补充洞察:

结合历史报表数据,第二组的优化具有连贯性:

  • 零排序操作(查询报表)
  • 零临时表(连接报表)
  • 零线程创建(线程报表)
  • 100%缓存命中(Buffer Pool报表)
    这种全局一致性证明第二组处于高度优化的稳定状态,而第一组存在系统性写入负载问题。

10 总体比对结果
image.png
总体而言第二组数据优于第一组,在“InnoDB缓存池报表”中第一组数据优于第二组,所以DeepSeek的优化还是很靠谱的,就是要避免退一本正经的胡说八道。

再次优化
根据“InnoDB缓存池报表”提示

将innodb_buffer_pool_size从3.88G降至100-200MB

为默认16M

innodb_buffer_pool_size = 16M

再次运行压测程序和MYSQL Report

第一组

__ InnoDB Buffer Pool _____________________________
Usage          13.39M of    15.67M    %Used:    85.44
Read hit    100.00%
Pages
  Free          146            %Total:  14.56
  Data          850    84.75  %Drty:   0.00
  Misc          70.70
  Latched                     0.00
Reads            68.08M    11.2k/s
  From file      1.50k    0.2/s      0.00
  Ahead Rnd      0            0/s
  Ahead Sq            0/s
Writes            9.09k    1.5/s
Flushes           6070.1/s
Wait Free        0          0/s

第三组

__ InnoDB Buffer Pool __________________________________________________
Usage8.81M of    15.50M        %Used:    56.85
Read hit    99.99%
Pages
  Free428        %Total:  43.15
  Data56456.85   %Drty:    0.00
  Misc00.00
  Latched0.00
Reads3.28M        9.0k/s
  From file    4341.2/s        0.01
  Ahead Rnd    290.1/s
  Ahead Sql            0/s
Writes7152.0/s
Flushes1310.4/s
Wait Free    00/s

哪一组性能更优秀

比对第一组第三组
比对结果

哪一组性能更优秀

基于提供的InnoDB Buffer Pool报表,我将从多个关键性能指标出发,对两组数据进行比较分析,以确定哪一组性能更优秀。InnoDB Buffer Pool的性能评估主要关注以下几个方面:

  • 读取命中率(Read hit):越高越好,表示从内存缓存(而非磁盘)读取数据的比例高,减少I/O开销。
  • 缓存使用率(%Used):适度高使用率(如70%~90%)通常表示缓存利用高效,但过高(如>90%)可能导致页面淘汰频繁。
  • 磁盘读取(From file):越低越好,表示磁盘I/O压力小。
  • 读取/写入吞吐量(Reads/s, Writes/s):更高吞吐量表示处理能力更强,但需结合命中率评估。
  • 空闲页面(Free Pages):过低可能表示缓存紧张,过高可能表示缓存未充分利用。
  • 刷新操作(Flushes/s):越低越好,表示脏页写回磁盘的频率低,减少I/O负担。
  • 等待(Wait Free):非零值表示资源争用,但两组均为0,无问题。

关键指标对比表
image.png
分析结论

第一组性能更优秀。理由如下:

  • 更高的读取命中率和更低的磁盘I/O:第一组的读取命中率为100%(完美),而磁盘读取率仅为0.2/s,远低于第三组的1.2/s。这表明第一组几乎所有的读取操作都从内存缓存完成,磁盘I/O压力极小,显著提升查询响应速度和整体性能。
    更高的读取吞吐量:第一组的读取速率为11.2k/s,高于第三组的9.0k/s,表示第一组在高负载下处理能力更强,且未因高使用率(85.44%)而牺牲命中率。
  • 更高效的缓存利用:第一组缓存使用率85.44%处于理想范围(通常70%~90%表示高效),空闲页面14.56%虽较低,但结合100%命中率,说明缓存管理良好,无资源浪费。第三组使用率仅56.85%,空闲页面43.15%,表示缓存未充分利用,可能导致不必要的磁盘访问(如磁盘读取率更高)。
  • 更低的刷新操作:第一组的刷新率(0.1/s)低于第三组(0.4/s),减少I/O开销,对写入密集型操作更友好。

潜在注意事项:

第三组的99.99%命中率仍属优秀,但较高的磁盘读取(1.2/s)和较低的缓存使用率表明其性能略逊,尤其在负载增加时可能表现更差。
第一组的高使用率(85.44%)在长期运行中需监控,如果接近100%可能引发页面淘汰问题,但当前数据(%Drty=0.00% 和 Wait Free=0/s)显示无压力迹象。
总体而言,第一组在读取效率、I/O优化和吞吐量方面表现更佳,适用于高性能数据库场景
比对第二组第三组
基于提供的两组InnoDB Buffer Pool报表,以下是关键指标的对比分析及性能结论:

核心指标对比表
image.png
关键结论:第三组性能更优秀

原因分析:

缓存池利用率合理

  • 第三组:56.85% 使用率(564页/15.50M池),表明缓存有效承载了工作负载。
  • 第二组:0.22% 使用率(565页/3.88G池),意味着 >99%的内存被浪费,配置严重不合理(如innodb_buffer_pool_size设置过大)。

高吞吐量下的真实性能

  • 第三组在 9.0k/s读取 的负载下,仍保持 99.99%命中率,仅需少量磁盘读取(1.2/s),证明缓存高效。
  • 第二组虽然吞吐更高(10.8k/s)且命中率100%,但因数据总量极小(仅565页),所有数据可完全驻留内存,无法反映真实生产场景的性能。

资源利用效率

  • 第三组用15.50M内存 有效支持了3.28M次读取 的业务负载。
  • 第二组3.88G内存 仅服务565页数据,内存利用率极低(浪费资源且可能挤占其他进程)。

第二组的根本问题:配置失误

缓存池过大:innodb_buffer_pool_size=3.88G 远超过实际数据需求(仅需存储565页 ≈ 8.83MB)。
优化建议:
立即调低 innodb_buffer_pool_size 至合理值(如1-2GB),避免内存浪费。当前配置不仅无性能增益,反而可能因OS换页或OOM降低整体系统性能。
⚠️注意:第二组的"高命中率"和"低磁盘I/O"是假性优化,源于配置错误而非性能优异

结论
因此,保持

innodb_buffer_pool_size = 16M

最后,my.ini为

[mysqld]
…
#我的设置
thread_handling = pool-of-threads
thread_pool_size = 32
thread_pool_max_threads = 1000
read_only = ON
wait_timeout = 300
table_open_cache = 2048
tmp_table_size = 64M
performance_schema = ON
slow_query_log = ON
slow_query_log_file = C:\xampp\mysql\slow.log
long_query_time = 2
join_buffer_size = 1M
innodb_flush_neighbors = 0
innodb_adaptive_hash_index = OFFI
sort_buffer_size = 4M
max_sort_length = 1024
optimizer_trace = enabled=ON
query_cache_type =0
query_cache_size = 0
table_definition_cache = 400
table_open_cache_instances = 16
performance-schema-instrument = 'wait/lock/table/%=ON'
interactive_timeout = 60
skip_name_resolve = ON
max_heap_table_size = 64M
max_connections=600
thread_cache_size=256
connect_timeout = 15
default_authentication_plugin = mysql_native_password
skip_name_resolve = ON
max_connect_errors = 1000000
innodb_buffer_pool_chunk_size = 1M
innodb_lru_scan_depth = 256
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_instances=8
transaction_isolation = READ-COMMITTED
innodb_lock_wait_timeout = 30
innodb_deadlock_detect = ON
innodb_print_all_deadlocks = ON
innodb_lock_wait_timeout = 10
innodb_status_output = ON
innodb_status_output_locks = ON
innodb_read_ahead_threshold = 64
innodb_random_read_ahead = ON
read_buffer_size = 4M
innodb_buffer_pool_size = 16M
innodb_buffer_pool_dump_now = ON
innodb_buffer_pool_load_now = ON
innodb_monitor_enable = all
back_log = 200

最后一句想说的话:
利用LLM可以很好地辅助软件测试,但是前提你必须具有扎实的基础知识
本系列结束,希望给大家带来帮助,最后

MariaDB [(none)]> select VERSION() ;
+---------------------+
| VERSION()           |
+---------------------+
| 10.4.32-MariaDB-log |
+---------------------+
1 row in set (0.000 sec)
目录
相关文章
|
7天前
|
人工智能 运维 安全
|
5天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
603 21
|
12天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
968 110
|
6天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。