精华内容
下载资源
问答
  • 数据库tempdb的日志已满数据库tempdb的日志已满
  • 为数据库 'tempdb' 中的对象 'dbo.SORT temporary run storage: 140737503494144' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或文件组中的现有...

    错误描述

    消息 1105,级别 17,状态 2,第 1 行
    无 法为数据库 'tempdb' 中的对象 'dbo.SORT temporary run storage:  140737503494144' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。
    消息 9002,级别 17,状态 4,第 1 行
    数据库 'tempdb' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。

    解决方法

    [sql] view plaincopyprint?

    查看tempdb当前大小 exec sp_helpdb tempdb 对tempdb进行收缩 use tempdb go dbcc shrinkfile(tempdev,
    1024) use tempdb go dbcc shrinkfile(templog, 512)

     

    尝试将tempdb的文件初始值设置:
    数据文件:10G
    日志文件: 10G
    自动增长的10%设置为10M

     

    原文:http://blog.csdn.net/xuyue1987/article/details/7269972

    转载于:https://www.cnblogs.com/chenghu/p/3669063.html

    展开全文
  • 使用数据库时经常能够遇见数据库盘被写满,表象为tempdb 巨大。 原因 通过对数据库进程的分析,这种tempdb 增长由进程死锁引起。 解决方案 kill 死锁进程 收缩tempdb USE [tempdb] GO dbcc freesystemcache('ALL'...

    前言

    使用数据库时经常能够遇见数据库盘被写满,表象为tempdb 巨大。
    在这里插入图片描述

    原因

    通过对数据库进程的分析,这种tempdb 增长由进程死锁引起。

    解决方案

    • kill 死锁进程
    • 收缩tempdb
    USE [tempdb]
    GO
    dbcc  freesystemcache('ALL')
    Go
    DBCC SHRINKfile(N'tempdev' ,2)
    DBCC SHRINKfile(N'templog' ,2)
    DBCC SHRINKfile(N'temp2' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'temp3' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'temp4' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'temp5' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'temp6' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'temp7' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'temp8' ,2) --收缩到2MB 
    GO
    

    Linux 下SQL Server tempdb导致磁盘爆满

    在这里插入图片描述
    在这里插入图片描述

    执行上述语句报错

    在这里插入图片描述

    使用语句查询tempdb 名称

    select * from sys.database_files
    

    在这里插入图片描述

    将上述语句改为如下

    USE [tempdb]
    GO
    dbcc  freesystemcache('ALL')
    Go
    DBCC SHRINKfile(N'tempdev' ,2)
    DBCC SHRINKfile(N'templog' ,2)
    DBCC SHRINKfile(N'tempdev2' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'tempdev3' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'tempdev4' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'tempdev5' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'tempdev6' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'tempdev7' ,2) --收缩到2MB 
    DBCC SHRINKfile(N'tempdev8' ,2) --收缩到2MB 
    GO
    

    空间已释放

    在这里插入图片描述

    展开全文
  • tempdb is one of the 4 system databases that exists in all SQL Server instances. The other databases are master, model and msdb. In case of using Replication, a fifth system databas...

    介绍 (Introduction)

    tempdb is one of the 4 system databases that exists in all SQL Server instances. The other databases are master, model and msdb. In case of using Replication, a fifth system database named distribution will also exist. You can find all existing system databases in SQL Server Management Studio (SSMS) under the Databases / System Databases folder:

    tempdb是所有SQL Server实例中存在的4个系统数据库之一。 其他数据库是mastermodelmsdb 。 如果使用复制 ,则还将存在第五个名为distribution的系统数据库。 您可以在SQL Server Management Studio(SSMS)中的“数据库/系统数据库”文件夹下找到所有现有系统数据库:

    tempdb的用法 (tempdb usage)

    SQL Server uses tempdb database to store user objects, internal objects and version stores.

    SQL Server使用tempdb数据库存储用户对象,内部对象和版本存储。

    版本商店 (Version stores)

    Version stores are used to store row versions generated from operations as online reindex, triggers or snapshot isolation.

    版本存储用于将操作生成的行版本存储为在线重新索引,触发器或快照隔离。

    内部物件 (Internal objects)

    As the name indicates, internal objects are created internally by the SQL Server engine and are stored in tempdb database. These internal objects are:

    顾名思义,内部对象由SQL Server引擎在内部创建,并存储在tempdb数据库中。 这些内部对象是:

    • Intermediate results for sorting process;

      中间结果用于排序过程;
    • Intermediate results for hash joins and aggregates;

      哈希联接和聚合的中间结果;
    • Intermediate results from queries that need to spool;

      需要假脱机的查询的中间结果;
    • XML variables and large object (LOB) variables;

      XML变量和大对象(LOB)变量;
    • Keys from keyset cursors;

      来自键集游标的键;
    • Query results from static cursors;

      从静态游标查询结果;
    • Messages in transit from Service Brokers;

      服务中介发送的邮件;
    • Data for internal processing from INSTEAD OF triggers;

      来自INSTEAD OF触发器的内部处理数据;
    • Internal use from DBCC CHECK command;

      从DBCC CHECK命令内部使用;
    • Database mail.

      数据库邮件。

    用户对象 (User objects)

    User temporary objects can be tables, stored procedures, table variables, the value returned from a table valued function or the mapping index for online clustered index build with the SORT_IN_TEMPDB option.

    用户临时对象可以是表,存储过程,表变量,从表值函数返回的值或使用SORT_IN_TEMPDB选项构建的在线聚集索引的映射索引。

    User objects can be defined as local temporary object by using a ‘#’ as prefix in the object name (e.g. #MyTempTable) or can be defined as global temporary objects by using the prefix ‘##’ before the object name (e.g. ##MyTempTable).

    可以通过在对象名称中使用前缀“#”将用户对象定义为本地临时对象(例如,#MyTempTable),也可以通过在对象名称之前使用前缀“ ##”将用户对象定义为全局临时对象(例如,## MyTempTable)。

    A local temporary object is destroyed when the scope where it was created, expires or terminates. The scope can be a stored procedure or a session.

    当本地临时对象的作用域在创建,过期或终止时会被销毁。 范围可以是存储过程或会话。

    A global temporary object is only destroyed when all sessions that are using it expires or terminates.

    全局临时对象仅在使用它的所有会话都到期或终止时才被销毁。

    组态 (Configuration)

    A tempdb database was deemed to be so important that in SQL Server 2016 it has his own configuration setup screen during the SQL Server engine installation:

    tempdb数据库被认为非常重要,以至于在SQL Server 2016中,在SQL Server引擎安装期间,它具有自己的配置设置屏幕:

    As can be seen, the number of files is filled automatically with the number of logical processors and it is requiring own location for the data and log files. I will next describe these configuration settings.

    可以看出,文件的数量自动用逻辑处理器的数量填充,并且它需要数据和日志文件自己的位置。 接下来,我将描述这些配置设置。

    资料档案 (Data files)

    It is recommended to create a data file per logical processor for the tempdb database, until a maximum of 8 data files, meaning that if your server has more than 8 processors, you should not create more than 8 data files. This is only a best practice recommendation, though, and can be tweaked if necessary. Keep in mind that too many files may increase the cost of file switching, meaning increase the overhead and that is why recommendation is not to start with more than 8 data files.

    建议为tempdb数据库的每个逻辑处理器创建一个数据文件,直到最多8个数据文件为止;这意味着,如果您的服务器具有8个以上的处理器,则不应创建8个以上的数据文件。 但是,这只是最佳实践建议,如有必要,可以进行调整。 请记住,太多文件可能会增加文件切换的成本,这意味着增加了开销,这就是为什么建议不要从8个以上的数据文件开始的原因。

    Each of the multiple data files should have the same size so the SQL Server engine can apply the proportional fill optimization procedure to reduce UP latch contention. This procedure is a mechanism that will guarantee that each data file is filled in proportion to the free space that is available in the file so that all of the files fill up at about the same time.

    多个数据文件中的每个文件都应具有相同的大小,以便SQL Server引擎可以应用比例填充优化过程来减少UP闩锁争用。 此过程是一种机制,可以确保每个数据文件都按文件中可用空间的比例进行填充,以使所有文件几乎同时填充。

    Microsoft recommends to set an auto grow value for tempdb, but based on my own experience I will not recommend it, myself. My personal recommendation is to initially set the maximum size possible for the tempdb data files (divide the disk size by the number of data files) and immediately fill the disk so you can disable the auto grow to avoid any negative impact during the file grow process.

    Microsoft建议为tempdb设置一个自动增长的值,但是根据我自己的经验,我本人不推荐这样做。 我个人的建议是首先为tempdb数据文件设置最大可能的大小(将磁盘大小除以数据文件的数量),然后立即填充磁盘,以便可以禁用自动增长,以避免在文件增长过程中产生任何负面影响。

    Shrinking files is also not a recommended operation for a tempdb database since it might change database files sizes and impact negatively on the proportional fill optimization procedure because this mechanism needs to have the same size for all data files.

    对于tempdb数据库,也不建议缩小文件,因为它可能会更改数据库文件的大小,并对比例填充优化过程产生负面影响,因为此机制需要所有数据文件的大小相同。

    磁盘空间 (Disk space)

    tempdb is one particular database that is more difficult to estimate the needed disk space. As showed in the tempdb usage section, it stores many kinds of objects and they are not so easy to estimate. Unfortunately, during all these years working with SQL Server I couldn’t yet find the magic formula but I would recommend to provide as much disk space you can with the minimum disk size being the same size as the largest table in the SQL Server instance. It is also wise to add some safety factor to prevent the database growth.

    tempdb是一个特定的数据库,很难估计所需的磁盘空间。 如tempdb用法部分中所示,它存储了许多类型的对象,而且估计起来并不容易。 不幸的是,在使用SQL Server的所有这些年来,我一直找不到神奇的公式,但我建议您提供尽可能多的磁盘空间,最小磁盘大小应与SQL Server实例中最大表的大小相同。 添加一些安全因素以防止数据库增长也是明智的。

    Fortunately, for the tempdb transaction log file, it is easier to estimate the necessary size. The tempdb, being a database with the recovery model set to Simple, it will be minimally logged. You can use a rule of thumb to create the transaction log file based on 20%-30% of the data size and tweak it later if needed.

    幸运的是,对于tempdb事务日志文件,可以更容易地估计所需的大小。 tempdb是恢复模型设置为Simple的数据库,它将被最小化记录。 您可以使用经验法则基于20%-30%的数据大小创建事务日志文件,并在需要时对其进行调整。

    The space in tempdb is vital for the health of the SQL Server instance. When running out of space the SQL Server instance may become unresponsive so it is always better to reserve more space than give less for the tempdb data and log files.

    tempdb中的空间对于SQL Server实例的运行状况至关重要。 当空间不足时,SQL Server实例可能会变得无响应,因此,与为tempdb数据和日志文件提供较少的空间相比,保留更多的空间总是更好。

    It is also good to have dedicated disks for a tempdb database to avoid a situation where other database files to consume space that might be needed later for tempdb. SSD is supported since SQL Server 2012 and can be used to store database files and because of the particularities of tempdb, as such, it is, in my opinion, the best database candidate to be stored in a SSD drive to achieve better performance results.

    tempdb数据库提供专用磁盘也很好,以避免其他数据库文件占用tempdb以后可能需要的空间的情况。 从SQL Server 2012开始就支持SSD,并且由于tempdb的特殊性, SSD可以用于存储数据库文件,因此,在我看来,它是存储在SSD驱动器中以获得最佳性能结果的最佳数据库候选者。

    运作方式 (Operations)

    数据库创建 (Database creation)

    tempdb is created every time the SQL Server instance starts, meaning that any existing object will be lost after the database recreation.

    每次SQL Server实例启动时都会创建tempdb ,这意味着在重新创建数据库后,任何现有对象都将丢失。

    权限 (Permissions)

    By default, all users that have access to the SQL Server instance can create objects and perform queries in tempdb database, although the connect permission can be revoked from an user as it is for a regular database.

    默认情况下,尽管可以像常规数据库一样撤消用户的连接权限,但是所有有权访问SQL Server实例的用户都可以在tempdb数据库中创建对象并执行查询。

    移动文件位置 (Move file locations)

    As in any regular database, tempdb data and log files can be moved to another location if and when needed to. The following is an example for moving 2 data files and 1 transaction log file to a new location in disk T:

    与在任何常规数据库中一样,如果需要,可以将tempdb数据和日志文件移动到另一个位置。 以下是将2个数据文件和1个事务日志文件移动到磁盘T中的新位置的示例:

     
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'T:\TempDB\Data\tempdb.mdf');
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = temp2, FILENAME = 'T:\TempDB\Data\tempdb_mssql_2.ndf');
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'T:\TempDB\Log\templog.ldf');
     
    

    Since tempdb is recreated every time the SQL Server instance restarts, there is no need to copy the current files to the new location. The only thing that it needs to be done to have these changes implemented is to perform a SQL Server service restart and then the new files will be created in the new location (folder structure should exist). After that, old tempdb data and log files can be deleted from old location.

    由于tempdb每次重新启动SQL Server实例时都会重新创建,因此无需将当前文件复制到新位置。 要实现这些更改,唯一需要做的就是重启SQL Server服务,然后将在新位置创建新文件(文件夹结构应该存在)。 之后,可以从旧位置删除旧的tempdb数据和日志文件。

    限制条件 (Restrictions)

    tempdb has many restrictions and some are explained below.

    tempdb有很多限制,下面将对一些限制进行说明。

    后备 (Backup)

    tempdb is the only database that cannot be backed up, meaning of course, that it cannot be restored as well.

    tempdb是唯一无法备份的数据库,这当然意味着它也无法还原。

    In SSMS you will not find the context menu for Backup and Restore on tempdb and if you try to execute the backup command you will receive the error ‘Backup and restore operations are not allowed on database tempdb’:

    在SSMS中,您将无法在tempdb上找到“备份和还原”的上下文菜单,如果尝试执行backup命令,则会收到错误消息“ 数据库tempdb上不允许进行备份和还原操作 ”:

    恢复模式 (Recovery model)

    tempdb recovery model is set to Simple and cannot be changed. If you try to change it, you will receive the error ‘Option ‘RECOVERY’ cannot be set in database ‘tempdb’’:

    tempdb恢复模型设置为“简单”,无法更改。 如果尝试更改它,将收到错误“ 无法在数据库'tempdb'中设置选项'RECOVERY' ':

    删除数据库 (Drop database)

    tempdb cannot be deleted. If you try to delete it, you will receive the error ‘Cannot drop the database ‘tempdb’ because it is a system database’:

    tempdb无法删除。 如果尝试删除它,将会收到错误“由于系统数据库数据库'tempdb'而无法删除 ':

    设为离线 (Set offline)

    tempdb cannot be set to offline. If you try to do it you will receive the error ‘Option ‘OFFLINE’ cannot be set in database ‘tempdb’’:

    tempdb无法设置为脱机。 如果尝试这样做,将会收到错误“ 无法在数据库'tempdb'中设置选项'OFFLINE' ':

    DBCC CHECKCATALOG和CHECKALLOC (DBCC CHECKCATALOG and CHECKALLOC)

    A DBCC CHECKALLOC or DBCC CHECKCATALOG cannot be run on a tempdb database:

    不能在tempdb数据库上运行DBCC CHECKALLOC或DBCC CHECKCATALOG:

    其他限制 (Other restrictions)

    There are some more restrictions that are good to be known:

    还有其他一些众所周知的限制:

    • The tempdb database cannot be renamed;

      tempdb数据库无法重命名;
    • The tempdb database owner is dbo and cannot be changed;

      tempdb数据库所有者为dbo,无法更改;
    • The tempdb database and its primary filegroup cannot be set to READ_ONLY status;

      不能将tempdb数据库及其主文件组设置为READ_ONLY状态。
    • The tempdb does not allow for adding more filegroups for the database nor rename the primary filegroup;

      tempdb不允许为数据库添加更多文件组,也不能重命名主文件组。
    • The primary filegroup, primary data file, primary log file and the guest user of tempdb cannot be deleted;

      不能删除tempdb的主文件组,主数据文件,主日志文件和guest用户。
    • The default collation for the tempdb is the SQL Server instance collation and cannot be changed;

      tempdb的默认排序规则是SQL Server实例排序规则,无法更改;
    • Change Data Capture (CDC) cannot be enabled for tempdb;

      无法为tempdb启用更改数据捕获(CDC);
    • The tempdb database cannot be part of a database mirroring solution.

      tempdb数据库不能成为数据库镜像解决方案的一部分。

    Next articles in this series:

    本系列的下一篇文章:

    参考资料 (References)

    翻译自: https://www.sqlshack.com/configuration-operations-restrictions-tempdb-sql-server-system-database/

    展开全文
  • tempdb数据库收缩 介绍 ( Introduction ) Many times the people focus on the user databases to improve the performance, but sometimes the problem is not the user database itself. Sometimes the ...

    tempdb数据库清理

    介绍 ( Introduction )

    Many times the people focus on the user databases to improve the performance, but sometimes the problem is not the user database itself. Sometimes the problem is the tempdb.

    人们常常将注意力集中在用户数据库上以提高性能,但有时问题不在于用户数据库本身。 有时问题出在tempdb。

    In this article, we will give a brief introduction about the tempdb database, show how to create some temporary objects there and show how to improve and monitor it.

    在本文中,我们将简要介绍tempdb数据库,展示如何在其中创建一些临时对象,并展示如何进行改进和监视。

    要求 ( Requirements )

    • SQL Server 2005 or later (in this example, we are using SQL Server 2014)

      SQL Server 2005或更高版本(在此示例中,我们使用的是SQL Server 2014)

    入门 ( Getting started )

    The temdb is a special system database used to store temporary objects and data like tables, views table variables, tables returned in functions, temporary objects and indexes.

    temdb是一个特殊的系统数据库,用于存储临时对象和数据,例如表,视图表变量,函数中返回的表,临时对象和索引。


    The temdb can also be used for internal operations like rebuilding indexes (when the SORT_IN_TEMPDB is ON), queries using UNION, DBCC checks, GROUP BY, ORDER BY. Hash join and Hash aggregate operations.

    temdb还可以用于内部操作,例如重建索引(当SORT_IN_TEMPDB为ON时),使用UNION,DBCC检查,GROUP BY,ORDER BY的查询。 哈希联接和哈希聚合操作。

    The tempdb is in simple recovery model because the information stored is temporary.

    tempdb采用简单的恢复模型,因为存储的信息是临时的。



    You cannot backup the tempdb database because the data is temporary.

    您不能备份tempdb数据库,因为数据是临时的。


    Let’s start with a brief introduction creating temporary tables. If you already know how to create temporary tables, you can jump to the tempdb recommendations.

    让我们从创建临时表的简短介绍开始。 如果您已经知道如何创建临时表,则可以跳转到tempdb建议。

    创建临时对象 ( Creating temporary objects )

    There are several temporary objects in SQL Server. Let’s start with the local temporary table.

    SQL Server中有几个临时对象。 让我们从本地临时表开始。

    本地临时表 ( Local temporary tables )

    The following example creates a temporary local table in the tempdb database with the information of the Person.Address table.

    以下示例使用Person.Address表的信息在tempdb数据库中创建一个临时本地表。

     
    SELECT [AddressID]
          ,[AddressLine1]
          ,[AddressLine2]
          ,[City]
          ,[StateProvinceID]
          ,[PostalCode]
          ,[SpatialLocation]
          ,[rowguid]
          ,[ModifiedDate]
    	  into #address
      FROM [Person].[Address]
     
    

    If you check the tempdb, you will find the table in the temporary table folder:

    如果检查tempdb,则会在临时表文件夹中找到该表:



    The prefix # is used to indicate that it is a local temporary table. You can access to the temporary tables from any database. These tables or objects created are visible only in the session where they were created. They are very secure. As you can see in the image above, there is an internal left-padded numeric suffix in the table. This is used to differentiate from other local tables created by different procedures or processes.

    前缀#表示它是本地临时表。 您可以从任何数据库访问临时表。 创建的这些表或对象仅在创建它们的会话中可见。 它们非常安全。 如上图所示,表中有一个内部左填充的数字后缀。 这用于与由不同过程或过程创建的其他本地表区分开。

    If you try to create a view, a function or a trigger based on a local temporary table you will receive an error message.

    如果您尝试基于本地临时表创建视图,函数或触发器,则会收到错误消息。

    See the following example:

    请参见以下示例:

     
    create view v_address
    as
    select addressid
    from #address
     
    

    The error message displayed would be the following:

    显示的错误消息如下:

    Msg 4508, Level 16, State 1, Procedure v_address, Line 22
    Views or functions are not allowed on temporary tables. Table names that begin with ‘#’ denote temporary tables.

    消息4508,级别16,状态1,过程v_address,第22行
    临时表上不允许使用视图或函数。 以“#”开头的表名称表示临时表。

    全局临时表 ( Global temporary tables )

    These tables are global and can be accessed from other sessions. This option is not secure and consumes many resources. It is not recommended to use this option, but it is good to know it in order to correct it if someone is using it.

    这些表是全局的,可以从其他会话访问。 此选项不安全,并且消耗许多资源。 不建议使用此选项,但是最好知道它以便在有人使用时对其进行更正。

    The syntax is similar than the local temporary tables, but with double ##:

    语法与本地临时表相似,但带有双##:

     
    SELECT [AddressID]
          ,[AddressLine1]
          ,[AddressLine2]
          ,[City]
          ,[StateProvinceID]
          ,[PostalCode]
          ,[SpatialLocation]
          ,[rowguid]
          ,[ModifiedDate]
    	  into ##address
      FROM [Person].[Address]
     
    

    The global tables do not require suffixes.

    全局表不需要后缀。


    表变量 ( The table variables )

    The table variables can be used instead of the global and local temporary tables. They are easier to handle and to dispose the resources, which makes the use more efficient. The following example will show how to create the table variable, how to insert data on it and how to show the variable values. The use is similar to a simple table. The following example shows how to declare a table variable, how to insert data and how to do a select:

    可以使用表变量代替全局和局部临时表。 它们更易于处理和配置资源,这使使用效率更高。 以下示例将说明如何创建表变量,如何在表变量上插入数据以及如何显示变量值。 用法类似于简单表。 以下示例说明如何声明表变量,如何插入数据以及如何执行选择:

     
    DECLARE @myTableVariable TABLE (id INT, col1 varchar(20))
    insert into @myTableVariable values(1,'First value'),(2,'Second value')
    select * from @myTableVariable 
     
    

    As you can see, it is very easy to use them like any other variable. In general, the local temporary tables are more efficient. The table variables are also stored in the tempdb. However, depending on the scenarios you can only use table variables or local temporary tables. For example, if you need indexes, you can only do it with a local temporary table. By the other hand, in a function, you can only use a table variable. Note that the statistics are not maintained in table variables. In routines, table variables require fewer compiles.

    如您所见,像其他变量一样使用它们非常容易。 通常,本地临时表效率更高。 表变量也存储在tempdb中。 但是,根据方案,您只能使用表变量或本地临时表。 例如,如果需要索引,则只能使用本地临时表来执行。 另一方面,在函数中,只能使用表变量。 请注意,统计信息不保留在表变量中。 在例程中,表变量需要较少的编译。

    A special type of table variable is the Table-value parameter. This is very useful for client applications.

    表变量是表变量的一种特殊类型。 这对于客户端应用程序非常有用。

    The following example shows how to create and use Table-value parameters:

    以下示例显示如何创建和使用表值参数:

     
    CREATE TYPE Table_value AS TABLE 
    (id int
    , name varchar(30) );
    GO
     
    

    We will also create a simple table to fill with the Table-value parameter in a stored procedure:

    我们还将创建一个简单的表,以在存储过程中填充Table-value参数:

     
    CREATE table product
    (id int
    , productname varchar(30))
     
    

    The stored procedure will load the data from the Table-value parameter into the product table created.

    该存储过程会将表值参数中的数据加载到创建的产品表中。

     
    CREATE PROCEDURE insertdata
        @myTable table_value READONLY
        AS 
        SET NOCOUNT ON
        INSERT INTO product
               ([id]
               ,productname)
            SELECT id,name
            FROM  @myTable;
            GO
     
    

    Now, we are going to declare the Table-value parameter insert data there and call the stored procedure and do a select in the table to make sure that the data was inserted:

    现在,我们将在其中声明Table-value参数插入数据,并调用存储过程并在表中进行选择以确保已插入数据:

     
    DECLARE @TVP 
    AS Table_value;
     
    INSERT INTO @TVP (id, name) values
       (1,'Camera'),
       (2,'iPad');
     
    EXEC insertdata @TVP;
    GO
     
    select * from product
     
    

    If everything is OK, you should be able to see the new data inserted in the products table using the stored procedure:

    如果一切正常,则应该可以使用存储过程查看在products表中插入的新数据:


    Tempdb建议 ( Tempdb recommendations )

    By default, the tempdb size is 8 MB approximately. If your databases handle a big amount of data, you may need a bigger Tempdb database. It is not a good idea to have a small size if the tempdb database has to growth very often.

    默认情况下,tempdb的大小约为8 MB。 如果您的数据库处理大量数据,则可能需要更大的Tempdb数据库。 如果tempdb数据库必须非常频繁地增长,则减小其大小不是一个好主意。

    To check the tempdb size, in the SQL Server Management Studio (SSMS), go to Databases>System Databases and right click on the tempdb database. Click on the files page:

    要检查tempdb的大小,请在SQL Server Management Studio(SSMS)中,转到“数据库”>“系统数据库”,然后右键单击tempdb数据库。 单击文件页面:



    If possible, move your tempdb to different disks than the user databases. That will increase the performance.

    如果可能,请将您的tempdb移到与用户数据库不同的磁盘上。 这将提高性能。

    If possible, use RAID 0 to improve the performance.

    如果可能,请使用RAID 0来提高性能。

    Make sure that the autogrowth is enabled (by default it is in 10%, which is usually OK).

    确保已启用自动增长(默认情况下为10%,通常可以)。

    Monitor the tempdb size with the Performance Monitor or other tools of your preference. To do this open the performance monitor in your Windows Operative System:

    使用性能监视器或您喜欢的其他工具来监视tempdb的大小。 为此,请在Windows Operative系统中打开性能监视器:


    In the system monitory, to the SQLServer:Databases>Data File(s) Size and select the tempdb database.

    在系统监视中,选择“ SQLServer:数据库>数据文件的大小”,然后选择tempdb数据库。


    In addition, it is important to check the SQL Error Log in SSMS:

    另外,检查SSMS中SQL错误日志也很重要:

    Common errors in the SQL error Log file related to the tempdb space are the errors 1101, 1105, 3959, 3967, 3966, 3958.

    SQL错误日志文件中与tempdb空间相关的常见错误是错误1101、1105、3959、3967、3966、3958。

    Also, make sure to maintain your indexes in your user databases. Rebuild or Reorganize your indexes in frequency to reduce the tempdb use.

    另外,请确保在用户数据库中维护索引。 重建或重新组织索引的频率以减少tempdb的使用。

    结论 ( Conclusion )

    In this chapter, we introduce the tempdb and explained how to create local, global and table variables in the tempdb.

    在本章中,我们介绍了tempdb,并说明了如何在tempdb中创建局部变量,全局变量和表变量。

    We also introduced some recommendations to monitor the tempdb and improve the performance.

    我们还引入了一些建议来监视tempdb并提高性能。

    翻译自: https://www.sqlshack.com/the-tempdb-database-introduction-and-recommendations/

    tempdb数据库清理

    展开全文
  • 本文主要讲述了笔者在执行sql语句的过程中,遇到提示“数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。”的解决过程,希望对大家有所帮助
  • 你的日志满了,设备空间不够,只要在加个数据库设备,然后在执行就应该可以; 数据库属性 日志是否截断啊 我以前也遇到过日志满的问题,不过是在导数据的时候,先将索引删除,禁用触发器,然后在导入; 但如果是 ...
  • sybase数据库tempdb空间满故障解决

    千次阅读 2016-12-20 18:37:51
    前几天开发同事使用过程中,数据库突然无法连接,发现报错,如下图;  该故障是由于tempdb存储空间已满,于是,为tempdb扩容,具体步骤如下:  1、 命令行进入数据库,  isql -Usa -SDBSERVER -P **  ...
  • Msg 1105, Level 17, State 2, Line 266Could not allocate space for object 'dbo.Large Object Storage System object: 422392492982272' in database 'tempdb' because the 'PRIMARY' filegroup is full....
  • 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间问题: 一个使用SQLServer2000做后台的数据库在执行百万条纪录级数据导出的时候总报:“数据库 'tempdb' 的日志已满。请备份该数据库的事务...
  • 5. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,计科系生成如下选修课综合信息视图(仅包括计科系学生的选课信息,未选课的计科系学生也包括在视图的数据集中,如果未选课则课程等相关字段...
  • 本文我们主要介绍了SQL Server 2005数据库中更改tempdb系统数据库的位置的方法,希望能够对您有所帮助。
  • 收缩 tempdb 数据库

    2018-09-26 11:21:44
    我们知道,如果重启 SQL Server,tempdb 会自动重新创建,从而使 tempdb 回归到初始大小。但是这是生产环境,不允许重启 SQL Server。 尝试 直接收缩 tempdb,始终不成功。 USE [tempdb] GO DBCC SHR...
  • 数据库 'tempdb' 的日志已满 执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 网上找了下...
  • 检查服务器发现tempdb系统数据库占用了大量的控件,日志文件就占用了50G。1、首先通过系统自带的收缩工具收缩数据库,不起作用。(数据库—右键—任务—收缩—文件)2、查询数据库当前的活动状态 USE [master] ...
  • sql tempdb清理 In this article, we will learn latch contention issues that we might experience in the SQL Server TempDB database. We will also discuss reasons and the solution method of these latch ...
  • tempdb数据库过大

    千次阅读 2015-07-15 10:22:20
    用临时表跨库更新数据,导致tempdb数据库大出几十个G,服务器磁盘还剩下24M,自己捅的篓子自己背,很快找出解决办法。 修改了一下初始大小,保存设置后,重启一下sqlserver服务即可。
  • 临时数据库TempDB 虽然是临时库,但对整个数据库系统性能却起到很关键的作用;平时用到的中间数据集会暂时保存到TempDB 中,比如:临时表,排序,临时统计信息,一些中间结果数据,索引重建 等。我们经常发现客户的...
  • 临时数据库TempDb

    千次阅读 2017-11-14 14:30:00
    TempDb用法 我们的每个人使用TempDb。这是我们要接受的事实。因此按需配置TempDb非常重要——即为了获得良好的性能。TempDb存储下列3类对象: 用户对象(User Objects) 内部对象(Internal Objects) 版本...
  • 最常的做法:   --1....DUMP TRANSACTION tempdb WITH NO_LOG ...收缩数据库文件 DBCC SHRINKDATABASE(tempdb)   比较保险的做法: 1. 将tempdb移至D盘或者其它非系统分区; 2. tempdb增加文件大小(最大值至少5G,初...
  • Tempdb数据库详细介绍

    2019-10-03 12:46:11
    一、Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的...
  • tempdb数据库收缩 In this article, we will discuss the best practices that should be followed in order to keep the TempDB database in a healthy state and prevent any unexpected growth of the datab....
  • 今天公司同事反馈,在手机APP端进行业务操作时,提示无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满,如下所示。 出现这个问题的原因是数据库中设置了Log日志限制了文件增长。设置如下所示,然后修改了...
  • Sql tempdb 临时数据库相关知识点

    千次阅读 2016-05-16 10:01:20
    SLQ Tempdb 临时数据库的相关...安装了以上的所有数据库的服务器才能正常运行(事实上,如果缺少其中任意一个数据库,服务器都无法运行) 2、 Tempdb 数据库 在执行一个复杂或者大型查询操作的时候,SQl Server 可
  • 如果sqlserver是安装在默认路径,则tempdb.mdf和...如果硬盘上该分区的空间不足以满足该临时文件的增长需求,那么使用一下命令转移到其他分区:-----移动主输数据库文件ALTER DATABASE tempdb MODIFY FILE(NAME=...
  • sybase数据库tempdb日志滿了

    千次阅读 2007-09-26 12:35:00
    开发数据库服务器遇到这样的一个问题,使用了一段时间之的后,突然之间数据库就用不了了,现象是新连接连接不上,已经连接的执行sql时,报出tempdb日志满了,无法进行操作的错误,而且控制台无法连接上服务器,所有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,465
精华内容 8,586
关键字:

无法为数据库tempdb