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

7 sql-server

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

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

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

为了解决这个问题,我们备份了我们的数据库,缩小了实际数据库,同时缩小了 tempdb 系统数据库中的数据库和文件,但这并没有解决问题。

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

我们不确定下一步要去哪里。有什么想法为什么我们仍然可能会收到此消息?

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

小智 6

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

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

在 Orders.Date_Ordered 上创建一个 INDEX 以加快排序并减少内存使用。