我们有一个具有大量RAM (256 GB)的SQL Server 2012 Enterprise安装程序,此时的数据库相当小(大约为17 GB)。目前,由于各种编码问题,我们正在经历性能问题,希望通过一些代码评审和优化来解决这些问题。同时,也有一种尝试通过为tempDB LUN获得更快的磁盘来提高性能,比如使用FusionIO PCIe闪存卡。
我担心的是,考虑到Server仍然有大量的RAM可供利用,我们不会看到添加更快的磁盘带来任何真正的性能改善。我认为大多数tempDB操作都是在内存中进行的,或者是在磁盘上进行的,但最终缓存在内存中(无论是在主机上、HBA上还是SAN上)。
是否有人知道,当tempDB磁盘操作有大量内存可供使用时,Server 2012是否仍将等待IO阻塞,还是我们所看到的tempDB磁盘活动只是为了提供持久性或持久性?
发布于 2014-10-12 10:55:50
即使您有大量的DRAM,tempdb仍然可能被使用。
这种情况在以下几种情况下发生:
快照隔离:使用此功能可以创建大量的tempdb活动。
散列和排序溢出:当优化器创建查询计划时,它将尝试估计运行查询所需的内存总量。在查询运行之前,将分配估计内存。如果结果(例如,由于糟糕的统计数据)分配的内存太小,那么Server将像散列表和排序缓冲区那样向tempdb溢出操作符,即使在查询开始满足需求之后有足够的内存。
当然,如果您的查询被完美地调优,并且运行时没有快照隔离,则可以避免这些效果。但是在大多数情况下,即使在大型的tempdb系统中,也会有一定数量的DRAM活动。
https://dba.stackexchange.com/questions/78907
复制相似问题