在尝试调查 SQL Server 数据库的一些性能问题时,我注意到 ASYNC_IO_COMPLETION 和 PAGEIOLATCH_* 的等待统计信息似乎很高。在资源监视器中,我注意到 tempDB 经常(每小时至少 1 次)读取/写入大量数据,总计(B/秒)范围为 5GB - 25GB。
tempDB 位于与数据库和日志文件不同的虚拟磁盘上。TempDB 大小为 4 GB。我们的主数据库和日志文件各为 40GB。我已经尝试为此研究性能计数器,但找不到任何我能理解的东西来弄清楚为什么我会得到某些数字。
通过资源监视器,tempDB 的总数据如此之高是不是很不寻常?我们的主数据库每天仅增长约 50MB。我应该寻找什么来找出导致 tempDB 上如此高数据的原因以及这是否导致 I/O 瓶颈?如果最好的方法是使用特定的 perfmon 计数器,我应该查看哪些计数器以及哪些值是好的或坏的?
Tempdb 用于保存:
显式创建的临时用户对象,例如:全局或本地临时表和索引、临时存储过程、表变量、表值函数中返回的表或游标。要捕获导致 tempdb 分配的会话,请尝试使用 sp_blitz或参考这篇文章更深入地了解 tempdb。https://www.mssqltips.com/sqlservertip/4356/track-sql-server-tempdb-space-usage/