使用Sybase数据库是出现的问题,急等解决,Sybase那边没人回答,这边人气旺,来问问。
在进行左连接查询或者排序时出现如下提示,如何解决?
The transaction log in database tempdb is almost full.  Your transaction is being suspended until space is made available in the log.

解决方案 »

  1.   

    不知道SQL Server的牛人对Sybase熟悉否?
      

  2.   

    根据提示,你应该将tempdb数据库分配更多的空间,或者将tempdb数据库设置自动增长.
      

  3.   

    sp_helpdb tempdb看看
    1、有巨大的事务
    2、tempdb没有被设置成checkpoint时截断日志
      

  4.   

    清除日志,可以使用dump tran mydb with truncate_only(or no_log)
      

  5.   

    tempdb 数据库 
    tempdb 数据库保存所有的临时表和临时存储过程。它还满足任何其它的临时存储要求,例如存储 SQL Server 生成的工作表。tempdb 数据库是全局资源,所有连接到系统的用户的临时表和存储过程都存储在该数据库中。tempdb 数据库在 SQL Server 每次启动时都重新创建,因此该数据库在系统启动时总是干净的。临时表和存储过程在连接断开时自动除去,而且当系统关闭后将没有任何连接处于活动状态,因此 tempdb 数据库中没有任何内容会从 SQL Server 的一个会话保存到另一个会话。默认情况下,在 SQL Server 在运行时 tempdb 数据库会根据需要自动增长。不过,与其它数据库不同,每次启动数据库引擎时,它会重置为其初始大小。如果为 tempdb 数据库定义的大小较小,则每次重新启动 SQL Server时,将tempdb 数据库的大小自动增加到支持工作负荷所需的大小这一工作可能会成为系统处理负荷的一部分。为避免这种开销,可以使用 ALTER DATABASE 增加 tempdb 数据库的大小。
      

  6.   

    优化 tempdb 性能
    对 tempdb 数据库的物理位置和数据库选项设置的一般建议包括: 使 tempdb 数据库得以按需自动扩展。这确保在执行完成前不终止查询,该查询所生成的存储在 tempdb 数据库内的中间结果集比预期大得多。
    将 tempdb 数据库文件的初始大小设置为合理的大小,以避免当需要更多空间时文件自动扩展。如果 tempdb 数据库扩展得过于频繁,性能会受不良影响。
    将文件增长增量百分比设置为合理的大小,以避免 tempdb 数据库文件按太小的值增长。如果文件增长幅度与写入 tempdb 数据库的数据量相比太小,则 tempdb 数据库可能需要始终扩展,因而将妨害性能。
    将 tempdb 数据库放在快速 I/O 子系统上以确保好的性能。在多个磁盘上条带化 tempdb 数据库以获得更好的性能。使用文件组将 tempdb 数据库放在除用户数据库所使用的磁盘之外的磁盘上。
      

  7.   

    没有用啊,我使用dump tran mydb with truncate_only和dump tran mydb with no_log后再进行查询,依然如故啊
      

  8.   

    还是自己解决了。
    用sp_helpdb tempdb看了一下,原来的安装人员安装时master只有3M,tempdb在master设备上,只有1M多点,怪不得一个order就出问题。
    解决的方法:
    首先获取vdevno
    use master
    go
    select max(convert(tinyint,substring(convert(binary(4),d.low),v.low,1)))+1
    from master.dbo.sysdevices d,master.dbo.spt_values v
    where v.type='E'and v.number=3
    go
    这里得到6
    然后创建一个tempdb_dev设备:
    disk init name="tempdb_dev", physname="d:\sybase\data\tempdb.dat", vdevno=6, size=262144
    这里size是设备尺寸,单位是2K,一个页面2K,共创建500M的设备
    接着扩展tempdb:
    alter database tempdb on tempdb_dev=500
    这里的500,单位是M