MySQL:选择查询执行和结果获取时间随着连接数量的增加而增加

2023-12-11

我的服务器应用程序通过单独的线程与 MySQL 建立多个连接。每个连接都会触发一个SELECT查询并获取结果,然后应用程序将其返回给其连接的用户。

我正在使用InnoDB。令我惊讶的是,我发现很奇怪的是,如果我增加 MySQL 的连接数量,查询性能就会下降,结果获取时间也会增加。下面的表格显示了相同的内容。

这个数据是当我在 MySQL 表中有 3333 条记录时生成的SELECT基于给定的随机参数的查询会从中获取大约 450 条记录。每条记录大约有 10 个字段,所有字段总共包含 1.2 KB 的数据。 (因此,单SELECT查询总共获取 1.2 * 450 = 540 KB 数据)



╔═══════════╦═══════════════╦══════════════╗
║ Number of ║Query execution║ Result fetch ║
║connections║  time range   ║  time range  ║
║ to MySQL  ║ (in seconds)  ║ (in seconds) ║ 
╠═══════════╬═══════════════╬══════════════╣
║     1     ║ 0.02 to 0.06  ║ 0.03 to 0.18 ║
║     7     ║ 0.23 to 0.64  ║ 0.54 to 0.74 ║
║    17     ║ 0.32 to 1.71  ║ 0.53 to 1.18 ║
║    37     ║ 0.37 to 2.01  ║ 0.70 to 1.70 ║
║   117     ║ 1.13 to 3.29  ║ 2.48 to 3.25 ║
╚═══════════╩═══════════════╩══════════════╝
  

我在这里不明白的是,为什么当连接数增加时,MySQL 会花费更多时间?特别是当没有对表进行更新时,MySQL 应该处理SELECT来自单独线程中每个连接的请求。从而并发处理查询。因此,理想情况下,性能和获取不应显着下降。

我不介意与数据库建立单一连接,但问题是我的服务器性能会随之显着下降。成千上万的用户(连接到我的服务器)将不得不等待该单个线程轮到他们。

在解决了一些相关问题后,我尝试增加innodb_buffer_pool_size到 1 GB 但运气不好。

这是我的所有 InnoDB 参数:

innodb_adaptive_flushing    ON
innodb_adaptive_flushing_lwm    10
innodb_adaptive_hash_index  ON
innodb_adaptive_max_sleep_delay 150000
innodb_additional_mem_pool_size 2097152
innodb_api_bk_commit_interval   5
innodb_api_disable_rowlock  OFF
innodb_api_enable_binlog    OFF
innodb_api_enable_mdl   OFF
innodb_api_trx_level    0
innodb_autoextend_increment 64
innodb_autoinc_lock_mode    1
innodb_buffer_pool_dump_at_shutdown OFF
innodb_buffer_pool_dump_now OFF
innodb_buffer_pool_filename ib_buffer_pool
innodb_buffer_pool_instances    8
innodb_buffer_pool_load_abort   OFF
innodb_buffer_pool_load_at_startup  OFF
innodb_buffer_pool_load_now OFF
innodb_buffer_pool_size 1073741824
innodb_change_buffer_max_size   25
innodb_change_buffering all
innodb_checksum_algorithm   crc32
innodb_checksums    ON
innodb_cmp_per_index_enabled    OFF
innodb_commit_concurrency   0
innodb_compression_failure_threshold_pct    5
innodb_compression_level    6
innodb_compression_pad_pct_max  50
innodb_concurrency_tickets  5000
innodb_data_file_path   ibdata1:12M:autoextend
innodb_data_home_dir    
innodb_disable_sort_file_cache  OFF
innodb_doublewrite  ON
innodb_fast_shutdown    1
innodb_file_format  Antelope
innodb_file_format_check    ON
innodb_file_format_max  Antelope
innodb_file_per_table   ON
innodb_flush_log_at_timeout 1
innodb_flush_log_at_trx_commit  2
innodb_flush_method normal
innodb_flush_neighbors  1
innodb_flushing_avg_loops   30
innodb_force_load_corrupted OFF
innodb_force_recovery   0
innodb_ft_aux_table 
innodb_ft_cache_size    8000000
innodb_ft_enable_diag_print OFF
innodb_ft_enable_stopword   ON
innodb_ft_max_token_size    84
innodb_ft_min_token_size    3
innodb_ft_num_word_optimize 2000
innodb_ft_result_cache_limit    2000000000
innodb_ft_server_stopword_table 
innodb_ft_sort_pll_degree   2
innodb_ft_total_cache_size  640000000
innodb_ft_user_stopword_table   
innodb_io_capacity  200
innodb_io_capacity_max  2000
innodb_large_prefix OFF
innodb_lock_wait_timeout    50
innodb_locks_unsafe_for_binlog  OFF
innodb_log_buffer_size  268435456
innodb_log_compressed_pages ON
innodb_log_file_size    262144000
innodb_log_files_in_group   2
innodb_log_group_home_dir   .\
innodb_lru_scan_depth   1024
innodb_max_dirty_pages_pct  75
innodb_max_dirty_pages_pct_lwm  0
innodb_max_purge_lag    0
innodb_max_purge_lag_delay  0
innodb_mirrored_log_groups  1
innodb_monitor_disable  
innodb_monitor_enable   
innodb_monitor_reset    
innodb_monitor_reset_all    
innodb_old_blocks_pct   37
innodb_old_blocks_time  1000
innodb_online_alter_log_max_size    134217728
innodb_open_files   300
innodb_optimize_fulltext_only   OFF
innodb_page_size    16384
innodb_print_all_deadlocks  OFF
innodb_purge_batch_size 300
innodb_purge_threads    1
innodb_random_read_ahead    OFF
innodb_read_ahead_threshold 56
innodb_read_io_threads  64
innodb_read_only    OFF
innodb_replication_delay    0
innodb_rollback_on_timeout  OFF
innodb_rollback_segments    128
innodb_sort_buffer_size 1048576
innodb_spin_wait_delay  6
innodb_stats_auto_recalc    ON
innodb_stats_method nulls_equal
innodb_stats_on_metadata    OFF
innodb_stats_persistent ON
innodb_stats_persistent_sample_pages    20
innodb_stats_sample_pages   8
innodb_stats_transient_sample_pages 8
innodb_status_output    OFF
innodb_status_output_locks  OFF
innodb_strict_mode  OFF
innodb_support_xa   ON
innodb_sync_array_size  1
innodb_sync_spin_loops  30
innodb_table_locks  ON
innodb_thread_concurrency   8
innodb_thread_sleep_delay   0
innodb_undo_directory   .
innodb_undo_logs    128
innodb_undo_tablespaces 0
innodb_use_native_aio   OFF
innodb_use_sys_malloc   ON
innodb_version  5.6.28
innodb_write_io_threads 16

有人可以点亮吗?这困扰了我很长时间。

(Note:我在这个问题中没有提到实际的查询,因为查询有点复杂,而且这个问题与该查询无关。但这是在查询相同时随着连接数的增加而导致性能下降的问题)

UPDATE 1

Here is SHOW CREATE TABLE我的表的输出:

CREATE TABLE `profiles` (
  `SRNO` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `HANDLE_FIRST` int(10) unsigned NOT NULL,
  `HANDLE_SECOND` bigint(20) unsigned NOT NULL,
  `USERID` binary(16) NOT NULL,
  `UNIQUESTRING` char(10) NOT NULL,
  `CLIENT_VERSION` smallint(5) unsigned NOT NULL,
  `ISCONNECTED` bit(1) NOT NULL,
  `ISPROFILEPRESENT` bit(1) NOT NULL,
  `USERNAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `GENDER` tinyint(1) DEFAULT NULL,
  `DND` bit(1) DEFAULT NULL,
  `STATUS` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `PROFILE_URL` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`SRNO`),
  UNIQUE KEY `USERID` (`USERID`),
  KEY `USERID_INDEX` (`USERID`),
  KEY `UNIQUESTRING_INDEX` (`UNIQUESTRING`),
  KEY `ISCONNECTED_INDEX` (`ISCONNECTED`),
  KEY `ISPROFILEPRESENT_INDEX` (`ISPROFILEPRESENT`)
) ENGINE=InnoDB AUTO_INCREMENT=9250 DEFAULT CHARSET=utf8


CREATE TABLE `blockers` (
  `BLOCKER_PROFILE_SRNO` bigint(20) unsigned NOT NULL,
  `BLOCKED_PROFILE_SRNO` bigint(20) unsigned NOT NULL,
  UNIQUE KEY `BLOCKER_PROFILE_SRNO` (`BLOCKER_PROFILE_SRNO`,`BLOCKED_PROFILE_SRNO`),
  KEY `BLOCKER_PROFILE_SRNO_INDEX` (`BLOCKER_PROFILE_SRNO`),
  KEY `BLOCKED_PROFILE_SRNO_INDEX` (`BLOCKED_PROFILE_SRNO`),
  CONSTRAINT `fk_BlockedIndex` FOREIGN KEY (`BLOCKED_PROFILE_SRNO`) REFERENCES `profiles` (`SRNO`),
  CONSTRAINT `fk_BlockerIndex` FOREIGN KEY (`BLOCKER_PROFILE_SRNO`) REFERENCES `profiles` (`SRNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

这是我正在运行的查询:

select  prfls.*
    from  profiles as prfls
    left outer join  blockers as blkr1 on blkr1.blocker_profile_srno = prfls.srno
      and  blkr1.blocked_profile_srno = 6443
    left outer join  blockers as blkr2 on blkr2.blocker_profile_srno = 6443
      and  blkr2.blocked_profile_srno = prfls.srno
    where  blkr1.blocker_profile_srno is null
      and  blkr2.blocker_profile_srno is null
      and  (      (prfls.uniquestring like 'phk5600dcc%')
              or  (prfls.uniquestring like 'phk5600dcf%')
           )
      and  prfls.isconnected=1
      and  prfls.isprofilepresent=1
    limit  450

该查询本质上是一个准备好的语句,其中blocked_profile_srno, blocker_profile_srno and uniquestring每个查询的参数不断变化。然而blocked_profile_srno and blocker_profile_srno始终保持相等(在上面的查询中,它们的值为 6443)。桌子blockers是空白的(我已将其放在适当的位置以供将来使用,但目前其中没有数据)

当 117 个连接同时运行查询时,输出SHOW GLOBAL STATUS LIKE 'Threads_running';大多数时候是1。但是有时会达到27。同时,输出SHOW GLOBAL STATUS LIKE 'Max_used_connections'; was 130

UPDATE 2

我可以从下面的 Rick James 回答中得知,优化查询会减少查询执行时间范围。这个时间范围仍然随着连接数量的增加而增加,但在可接受的范围内。这就是我接受答案的原因。


可能每个连接都在进行全表扫描profiles。让我们尽量避免这种情况。当有数十个查询命中同一个表时,就会有锁导致 InnoDB“陷入困境”。这些计划中的任何一个都将加快查询速度并减少接触的行数(从而减少锁定)。使用建议的“复合”索引将加快查询速度。但是OR妨碍。我看到两个仍然可以查看索引的技巧uniquestring,但要避免部分或全部OR.

(      (prfls.uniquestring like 'phk5600dcc%')
   or  (prfls.uniquestring like 'phk5600dcf%')
)

OR很难优化。

添加这个:

INDEX(isconnected, isprofilepresent, uniquestring)

Then...

Plan A:

prfls.uniquestring         like 'phk5600dc%' AND  -- note common prefix
(      (prfls.uniquestring like 'phk5600dcc%')
   or  (prfls.uniquestring like 'phk5600dcf%')
)

这假设您可以构造该公共前缀。

B计划(转OR into UNION):

( SELECT ...
    WHERE prfls.uniquestring like 'phk5600dcc%' AND ...
    LIMIT 450 )
UNION ALL    -- ? You may want DISTINCT, if there could be dups
( SELECT ...
    WHERE prfls.uniquestring like 'phk5600dcf%' AND ...  -- the only diff
    LIMIT 450 )
LIMIT 450   -- yes, again

计划A(如果可行)利用什么seems成为共同的起始值。不管怎样,B 计划都会起作用,但可能会慢一点,尽管仍然比原来快很多。

其他注意事项...

标志上的索引(您有两个)几乎从未使用过。EXPLAIN SELECT ...可能会表明两者都没有被使用。请提供EXPLAIN对于任何SELECT这需要讨论。

A UNIQUE KEY is a KEY,所以不需要冗余索引USERID.

limit 450-- 您想要哪个 450?没有ORDER BY,查询允许给你any450.(当然,也许这样就可以了。)(并且ORDER BY可能会减慢查询速度。)

我的建议不会“解决”问题,但它们应该在速度变慢变得明显之前增加连接数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL:选择查询执行和结果获取时间随着连接数量的增加而增加 的相关文章

  • MySQL 导入 125000 行 CSV 的最快方法?

    这是我第一次使用 MySQL 除了对现有数据库进行一些基本查询之外 所以我不擅长解决这个问题 我有一个包含 125 000 条记录的 CSV 我想将其加载到 MySQL 中 我安装了版本 8 和工作台 我使用导入向导加载 CSV 它开始导入
  • 当数据表输入来自服务器的 JSON 数据时,更改 Google 图表栏颜色

    我一直在努力使用谷歌图表 API 我在 SO 上发现了这个出色的例子PHP MySQL Google Chart JSON 完整示例 https stackoverflow com questions 12994282 php mysql
  • Mysql - Mysql2::错误:字符串值不正确:

    所以我建造了一个刮刀并拉动一些物体 问题是有些是外语 它使 mysql 数据库有点崩溃 这是我得到的错误 知道我能用这个做什么吗 谢谢 Mysql2 错误 列的字符串值不正确 xC5 x8Dga 第 1 行的 描述 插入sammiches
  • 如何用 UNION 运算符替换 OR 运算符?

    这是我的查询 SELECT h id h subject h body matnF h amount h keywords tags h closed h author id author h AcceptedAnswer h type h
  • Codeigniter 加入多个条件

    我正在使用 Codeigniter Active Records 课程 我想加入我的users与我的桌子clients表 这样我就可以显示用户的 真实 姓名 而不仅仅是他们的 ID 这是什么clients表看起来像 示例 列 a 1 a 2
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • MySQL 存储过程将值分配给 select 语句中的多个变量

    这是我的存储过程 我在为声明的变量赋值时遇到问题 当我执行它时 插入和更新命令工作正常 但声明变量的值保持为 0 但我在数据库中有一些价值 我怎样才能正确地做到这一点 BEGIN DECLARE PaidFee INT DEFAULT 0
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教

随机推荐

  • 在 Woocommerce 单一产品页面和购物车上有条件地设置特定产品价格

    在 Woocommerce 中 我想更改单个产品页面和相关购物车项目上特定产品 在本例中 ID 为 87 的价格 产品价格需要增加 10 美元 但仅限于单个产品页面且仅在外部 以便内部价格或 Woocommerce 中设置的价格不会改变 此
  • 每个请求发送两个 servlet 响应

    我写 因为我无法解决以下问题 我有一个处理一些信息的 servlet 作为响应 我添加了文本和二进制内容 如何从同一个请求开始获得两个响应 然后是两个 html 页面 有可能吗 第一个响应应该继续做他现在所做的事情 而第二个响应将出现一个弹
  • Django ImageField“上传有效的图像。您上传的文件要么不是图像,要么是损坏的图像。”

    我安装了 PIL 但是每当我尝试通过模型的 Django 管理将 png 文件上传到图像字段时 都会收到此错误 上传有效的图像 您上传的文件要么不是图像 要么是损坏的图像 其他图像类型工作正常 我尝试过几个不同的 PNG 文件 我在安装 p
  • PHPExcel 返回损坏的二进制文件

    I want to write a reference xls file and retrieve the result When I tested with a single file it works but when the refe
  • IPC的实现方式

    在 Windows 上实现 IPC 的首选方法是什么 我知道几个类似的 命名管道 共享内存 信号量 也许是COM 虽然我不知道如何 我想知道什么被认为是最强大 最快速 最不容易出错并且易于维护 理解的 几年前 我们针对客户端 服务器情况研究
  • 使用sql语句insert into将blob文件写入数据库

    我目前正在 Advantage Database Server 中寻找通过 sql 将字节流 所谓的 blob 文件 放入表中的可能性 当我建立一个完整的数据库时 我会这样做 TBlobField BaseTable FieldByName
  • 如何获取 HTML Canvas 中旧生成元素的引用?

    看一下这个例子 var c document getElementById myCanvas var ctx c getContext 2d First rectangle created ctx fillRect 20 20 150 10
  • python panda:返回公共行的索引

    抱歉 如果这是一个相当新手的问题 我试图找出两个数据框之间哪些行是共同的 返回值应该是行索引df2常见于df1 我的笨重例子 df1 pd DataFrame col1 cx cx cx2 col2 1 4 12 df1 col2 df1
  • java中具有多个客户端的Socket服务器

    我必须创建一个套接字服务器来监听多个客户端 假设有6个客户端同时连接到服务器 并且每个客户端同时向服务器发送一些命令 如果这些客户端每 1 秒向服务器发送一次消息 我如何处理来自服务器端 6 个客户端的这些消息 将其存储在表中以及对每个客户
  • 如何在 Angular 的反应表单中设置表单控件的值

    我是角度新手 实际上 我正在尝试从服务订阅数据 并将该数据传递给我的表单控件 例如 它就像编辑表单 import Component OnInit from angular core import FormBuilder FormGroup
  • 在 ios 应用程序中获取某人的 Facebook 公开资料

    我正在开发一个需要 Facebook 登录的 ios 应用程序 我已经成功实现了登录过程 但现在我无法找到如何以及在哪里可以获得用户的个人资料信息 如名字 姓氏 个人资料图片等 我的应用程序有权访问名字 姓氏 个人资料图片和电子邮件 以下是
  • Jupyter-Lite 模块/包/库安装

    如何在 Jupyter Lite 中添加更多模块 我尝试了大多数变化 Jupyter Lite 是否在我的机器上使用 python 库 我希望浏览器中的 Jupyterlite 使用本地安装的 python 库 例如在 Jupyter la
  • 如何在 Clojure 中向数组映射添加元素?

    如何在 Clojure 中向数组映射添加元素 我尝试使用 assoc 但它没有被添加 我本质上想为条目数组映射中任何缺失的项目设置默认值 0 defn create entry doc let entry assoc doc id str
  • 结构数组 - 初始化错误

    我在这里创建一些数据结构 使用 MFC 在 MS Visual C 6 0 中编译 是的 它很旧 struct SOpcodeData BYTE m byDataType DWORD m dwMinValue DWORD m dwMaxVa
  • 如何删除数据框中同时出现在两列中相同的行?

    我有一个数据框 DF1 Id1 Id2 0 286 409 1 286 257 2 409 286 3 257 183 在这个 DF 中 对我来说行286 409 and 409 286是一样的 我只想保留其中一行 我所做的所有这一切都是使
  • 事件处理程序是否会阻止垃圾收集的发生?

    如果我有以下代码 MyClass pClass new MyClass pClass MyEvent MyFunction pClass null pClass 会被垃圾回收吗 或者它会在事件发生时继续触发事件吗 我需要执行以下操作才能允许
  • 存储访问框架,takePersistableUriPermission

    在我的应用程序中 用户可以选择下载目录 如果他选择外部可拆卸SD 卡 不是模拟的 SD 卡 而是内存 例如真正的物理 microSD 卡 从 Android 4 4 开始我只能使用以下命令对其进行写入SAF 存储访问框架 我已经弄清楚如何使
  • 同一模型中的 has_many 和 Belongs_to

    我有一个模型用户 它有一个 角色 属性 可以填充 员工 或 经理 现在我想要一种关系 其中经理拥有 许多员工 而员工属于 经理 是否可以在同一模型中执行此操作 我可以想到这样的事情 has many employees class name
  • 按顺序进行控制

    我正在使用表单的文本字段创建一个 XML 文件 当我使用For Each loop For each Ctrl in Me Controls dosomething Next 它不按顺序排列它们 也就是说 它首先需要TextBox在中间 然
  • MySQL:选择查询执行和结果获取时间随着连接数量的增加而增加

    我的服务器应用程序通过单独的线程与 MySQL 建立多个连接 每个连接都会触发一个SELECT查询并获取结果 然后应用程序将其返回给其连接的用户 我正在使用InnoDB 令我惊讶的是 我发现很奇怪的是 如果我增加 MySQL 的连接数量 查