什么时候给定连接上的慢MySQL查询会影响其他连接?

sun*_*ant 13 mysql performance

我想我对此有一个基本的了解,但我希望有人可以给我更多细节,因为我有兴趣了解有关数据库性能的更多信息.

可以说我有一个非常大的数据库,有数百万个条目,数据库支持许多连接.由于数据太多,对数据库进行简单查询的速度很慢.我试图准确理解给定连接上的查询何时开始直接影响在其他连接上运行的查询的性能.

如果一个连接锁定某些元素,我理解这将阻止运行需要这些元素的其他连接的查询.例如:

SELECT FOR UPDATE
Run Code Online (Sandbox Code Playgroud)

将锁定你正在选择的内容.

当你做一些简单的事情时会发生什么:

SELECT COUNT(*) FROM myTable
Run Code Online (Sandbox Code Playgroud)

假设我们有一个十亿行的表,所以运行计数需要一些时间(在innodb上运行).它会影响在其他连接上运行的查询吗?

如果使用SELECT和JOIN选择大量数据,例如:

SELECT * FROM myTable1 JOIN myTable2 ON myTable1.id = myTable2.id;
Run Code Online (Sandbox Code Playgroud)

有连接锁定任何其他查询?

我发现很难知道哪些查询会对在其他连接上运行的查询的性能产生直接影响.

谢谢

Seb*_*bas 5

有不同的角度:

  • 行锁定:如果你调整你的架构,这不应该发生,所以你应该忘记它
  • 实际性能问题和瓶颈。在我们的例子中,附带效应。

关于这第二点,问题主要分为3个方面:

  • 磁盘读取
  • 内存使用量(缓冲区)
  • CPU使用率。

关于磁盘读取:您检索的数据(以字节为单位)越多,硬盘驱动器就会越忙,并减慢使用它的任何其他活动。减少选定行的大小以避免磁盘开销。

关于内存使用:mysql 管理一个内部缓冲区,在某些情况下可能会卡住。我对它的了解不足以给你一个正确的答案,但我知道这绝对是你应该关注的事情。

关于cpu使用:基本上cpu会忙的时候

  • 必须计算(连接,准备语句,算术......)
  • 必须完成所有外围工作:例如,将字节从磁盘移动到内存。优化您的查询以减少 CPU 开销。(听起来很傻,但是,无论如何,它总是被证明是问题......)

那么,现在什么时候知道什么时候有附带效应呢?通过分析您的硬件... 如何进行分析?

  • 绝对分析:使用SHOW INNODB STATUSSHOW PROFILE获取有关主 mysql 硬盘、cpu 和内存手表的有用信息。
  • 相对分析:使用您最喜欢的操作系统分析器。在Windows XP中,例如,你可以使用大perfmon.exe和监视PRIVATE BYTESVIRTUAL BYTESMySQL的过程。我说相对,因为毕竟如果查询在您的计算机上很耗时,那么它可能不在 NASA 系统上......

希望有帮助,问候。