SQL Server 逻辑 IO 块大小和物理读取

Inq*_*Shm 0 sql-server storage

我试图了解由执行某些表扫描的 SQL 语句引起的缓存流失。

假设 LRU 缓存,如果某事正在执行 400K 逻辑 IO,则流过多少内存(IO 块大小 * 逻辑 IO)。

此外,我试图了解如何获取关于顶级逻辑 IO SQL 语句的报告并获取这些产生的物理 IO。

鉴于此,我的问题是:

  1. SQL Server 逻辑 IO 操作所指的 IO 块大小是多少。
  2. 如何获取特定 SQL 执行实例的物理 IO?

Jos*_*ell 5

如果某事正在执行 400K 逻辑 IO,则流过多少内存(IO 块大小 * 逻辑 IO)

在 SQL Server 中,1 个“逻辑 I/O”是指从缓冲池(内存)中读取 1 个 8 KB 页。有可能首先发生物理 I/O(将页面从磁盘获取到内存)。所以 400K 逻辑读取是 400,000 * 8 KB = 3,200,000 KB 正在读取的数据(~3 GB)。

可以在 Microsoft Docs 站点上找到对此的参考,其中包含更多详细信息:Pages and Extents Architecture Guide

您提到了块大小,我认为这是参考操作系统级别的块大小。虽然这在操作系统级别很重要,并且可能会影响 SQL Server 性能,但它与页数方面的逻辑 I/O 无关 - 固定为 8KB。

另外,我试图了解如何获取关于顶级逻辑 IO SQL 语句的报告并获取这些产生的物理 IO

您可以在sys.dm_exec_query_stats. 这包括用于以下各项的列:

  • max_logical_reads,
  • total_logical_reads,
  • last_logical_reads,
  • max_physical_reads,
  • total_physical_reads,
  • last_physical_reads

...等等。