我们正在运行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议之外,请考虑:
你可以添加一个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文件。
尝试运行相同的查询,而不是通过子句顺序,看看是否有错误消失。