我们正在运行sql Server 2000.在我们的数据库中,我们有一个“订单”表,大约有750,000行.我们可以在这个表上执行简单的SELECT语句.但是,当我们想要运行SELECT TOP 100 * FROM Orders ORDER BY Date_Ordered DESC之类的查询时,我们收到以下消息:
Error: 9002,Severity: 17,State: 6
The log file for database ‘tempdb’ is
full. Back up the transaction log for
the database to free up some log
space.
我们的数据库中有其他表,这些表的大小与表中的记录数量相似(即700,000条记录).在这些表中,我们可以运行任何我们想要的查询,并且我们从未收到有关’tempdb full’的消息.
为了解决这个问题,我们已经备份了数据库,缩小了实际的数据库,并缩小了tempdb系统数据库中的数据库和文件,但这还没有解决问题.
我们不确定下一步该去哪里.有什么想法我们仍然可能收到这条消息吗?
Error: 9002,State: 6
The log file for database ‘tempdb’ is
full. Back up the transaction log for
the database to free up some log
space.
解决方法
根据
this article,如果排序需要的内存比sql Server分配的内存多,则使用临时数据库.
如果对未编制索引的列进行排序,则数据库服务器将执行全表扫描并跟踪表中所有记录的所有Date_Ordered值(和主键值).
在Orders.Date_Ordered上创建一个INDEX,以加快排序并减少内存使用.