帮帮我! 数据库“tempdb”的日志文件已满。 备份数据库的事务日志以释放一些日志空间

我们正在运行SQL Server 2000.在我们的数据库中,我们有一个“订单”表,大约有750,000行。 我们可以在这个表上执行简单的SELECT语句。 但是,当我们想运行SELECT TOP 100 * FROM Orders BY Date_Ordered DESC这样的查询时,我们会收到以下消息:

错误:9002,严重性:17,状态:6数据库“tempdb”的日志文件已满。 备份数据库的事务日志以释放一些日志空间。

我们的数据库中有其他表格(即700,000条logging)的logging数量相似。 在这些表上,我们可以运行任何我们想要的查询,而且我们永远不会收到“tempdb正在满”的消息。

为了解决这个问题,我们已经备份了我们的数据库,收缩了实际的数据库,并将数据库和文件收缩到tempdb系统数据库中,但是这并没有解决问题。

我们的日志文件的大小设置为自动增长。

我们不确定下一步该去哪里。 有什么想法,为什么我们仍然可能收到这个消息?

错误:9002,严重性:17,状态:6数据库“tempdb”的日志文件已满。 备份数据库的事务日志以释放一些日志空间。

根据这篇文章 ,如果sorting需要比SQL Server分配更多的内存,则使用临时数据库。

如果对未编制索引的列进行sorting,数据库服务器将执行全表扫描,并跟踪表中所有logging的所有Date_Ordered值(和主键值)。

在Orders.Date_Ordered上创build一个INDEX,加快sorting并减less内存使用量。

除了devio的build议之外,请考虑:

  • 你真的需要做SELECT *,如果你只需要几列,拼出来, 如果订单是一张非常宽的表格,那么这种sorting就会更高; 如果有斑点/文本字段,它们会被拖动。
  • 你可以添加一个dateselect,如WHERE Date_Ordered> getdate()-1; 即使你得到的logging比你需要的多,也不必将整个表复制到Tempdb; 你可以做类似的事情

    SELECT TOP 100 * from(select * from date where date_ordered> getdate() – 10)order by date_ordered desc

  • 但是,在date_ordered上添加索引是目前最好的解决scheme。

好,首先问题是,你的SQL Server需要更多的内存。 机器中安装了多less内存。

之后,您需要增加承载tempdb数据库的硬盘的大小。 这个数据库用于各种各样的东西,你需要它完全正常工作,整个SQL Server才能正常工作。

在短期内,重新启动SQL服务,这将删除tempdb数据库并重新创build它的初始大小。 从长远来看,您需要增加硬盘大小,以便tempdb可以增长到所需的大小。

你的磁盘上有足够的空间,其中包含tempdb文件。

尝试运行相同的查询,而不是通过子句顺序,看看是否有错误消失。