今天,我使用 Cacti 在我们的 SQL 服务器上实施了一个监控解决方案,我注意到的第一件事是临时表数量的增长,在我们的测试系统上仅 3 小时,我们的临时数据库中就有 300 多个临时表。我还注意到 SQL Server 在这 3 小时内的内存增长非常大 - 3 小时后使用了 15 GB。
当我运行 SP_WHO 时,只有 3-4 个用户在测试系统上进行测试,大约 5 个连接打开到应用程序。
是什么原因造成的?我对临时数据库中的对象进行了查询,所有名称都类似于此#XXXXXXXXX,我在某处读到这些来自表变量(声明@myTable ...)
有什么方法可以检查为什么我们的临时表数量增加以及导致它的原因是什么?在此阶段的任何帮助将不胜感激。
我明天将安装 2008 年的服务包,希望这能解决问题。
临时表的使用将完全取决于您的应用程序,这些应用程序的数据库位于 SQL Server 上,或者正在使用 SQL Server。例如,监控应用程序本身在收集数据时可能会使用数十个临时表。
至于内存使用,SQL Server 默认会用尽它需要的内存。每次需要修改数据时,它都会将该数据加载到内存中,然后将该数据留在内存中,直到 SQL Server 需要内存来做其他事情。换句话说,高内存使用量并不需要担心,因为它是完全正常的。也就是说,您需要限制 SQL Server 可以访问的内存量,以便它不会使用服务器上的所有内存。
您可以按照以下解决方案在 tempdb 中获取该信息:
读取不属于你的临时表
您可以通过以下帖子获得有关 tempdb 的一些一般信息:
DMV 查询以获取存储在 tempdb 表中的数据,...