我试图了解由执行某些表扫描的 SQL 语句引起的缓存流失。
假设 LRU 缓存,如果某物正在执行 400K 逻辑 IO,则流过多少内存(IO 块大小 * 逻辑 IO)。
此外,我正在尝试了解如何获取关于顶级逻辑 IO SQL 语句的报告并获取这些产生的物理 IO。
鉴于此,我的问题是:
- SQL Server 逻辑 IO 操作引用的 IO 块大小是多少。
- 如何获取特定 SQL 执行实例的物理 IO?
我试图了解由执行某些表扫描的 SQL 语句引起的缓存流失。
假设 LRU 缓存,如果某物正在执行 400K 逻辑 IO,则流过多少内存(IO 块大小 * 逻辑 IO)。
此外,我正在尝试了解如何获取关于顶级逻辑 IO SQL 语句的报告并获取这些产生的物理 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。
您可以在
sys.dm_exec_query_stats
. 这包括以下列:...ETC。