问题标签 [tempdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server - Tempdb 与数据库日志使用情况
这可能是一个非常基本的问题,但是如何事先确定大型操作最终会使用数据库日志还是 tempdb 空间?
例如,我所做的一个大型插入/更新操作使用了数据库日志,以至于我们需要使用 SSIS 和批量操作,这样空间就不会用完,因为脚本中的所有更改都必须部署在一个时间。
所以现在我正在处理一个大规模的删除操作,这将把日志填满 10 次。所以我创建了一个脚本来检查数据库日志文件使用的空间并以较小的批次删除行,其想法是一旦日志文件足够大,脚本将中止,然后第二天从该点继续(允许正常使用一直持续到下一次备份,没有日志空间不足的风险)。
现在,后一个查询开始填充 tempdb,而不是填充日志。具体来说是 Tempdb 数据文件,而不是日志文件。所以我认为我对这两者的理解应该存在一个巨大的漏洞。:)
感谢您的任何建议!
编辑:
澄清一下,这里的问题是为什么第一个示例使用数据库日志,而后者使用 tempdb 数据文件来存储更改?通常,DML 操作通过哪种逻辑存储到 tempdb 或 log 中?通常 log 应该存储所有 DB 更改,而 tempdb 仅用于在显式请求(即临时对象)或服务器耗尽 RAM 时存储操作期间处理的数据,对吗?
sql - Temp Table collation conflict - Error : Cannot resolve the collation conflict between Latin1* and SQL_Latin1*
I can't update temp table. This is my query
But it gives the error
Cannot resolve the collation conflict between "Latin1_General_CI_AI" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.
How to resolve this problem?
My tempdb
collation is Latin1_General_CI_AI
and my actual database collation is SQL_Latin1_General_CP1_CI_AS
.
sql-server - 在 SQL Server 2008 上的 tempdb 上使用聚集索引插入查看的优化问题
我正在创建一个 Java 函数,该函数需要在对其结果进行全面扫描之前使用带有大量连接的 SQL 查询。我决定用这个复杂的查询创建一个视图,而不是对很多连接进行硬编码。然后 Java 函数只使用以下查询来获取此结果:
所以程序运行良好,但我想让它更快,因为这个SELECT
命令需要很多时间。在查看了它的计划执行计划后,我创建了一些索引并使其速度提高了 +-30%,但我想让它更快。
问题是执行计划中的每个操作的成本都在 0% 到 4% 之间,除了一个操作,即具有 +-50% 执行成本的聚集索引插入。我认为系统正在使用一个临时表来存储视图的数据,但是这个视图中的索引对我没有用,因为我需要它的所有行。
那么我可以做些什么来优化该插入CWT_PrimaryKey
?我认为我无法关闭该索引,因为它似乎是 SQL Server 内部结构的一部分。我在某处读到,当您使用游标时可能会出现此操作,但我认为我没有使用(或者视图是否使用它?)。
创建视图的命令很简单(没有 T-SQL,没有 OPTION 等),例如:
这是执行计划中有问题的部分的图片:http: //imgur.com/PO0ZnBU
编辑:更多细节:
那么创建有问题的视图的查询是一个连接很多表的大查询。Java-Client 基于单个参数在创建查询字符串之前对其进行修改。此视图表示从遗留数据库迁移到没有任何外键或主键的 SQLServer 的“数据单元”,因此我们的团队选择遵循此策略。因此,该视图有 50 多个列,并且它是由其他七个视图的连接组成的。
主视图的查询(有很多葡萄牙语单词): http: //pastebin.com/Jh5vQxzA
其他视图(从 VW_Sintese1 到 VW_Sintese7)的创建方式与此类似,但不使用额外的视图,它们仅使用包含主视图请求的数据的表的连接。
然后,Java 客户端使用查询“Select * from VW_Sintese####”创建一个准备好的语句,并使用函数“ExecuteQuery”执行它,例如:
然后程序一直运行到最后。
感谢您的关注。
c# - 实体框架和 SQL Server 临时表
我们有一个遗留应用程序,我们正在迁移到 C#,我想使用实体框架 (EF) 进行数据访问。SQL Server 2012 是数据库,目前我使用的是 EF 5.0。原始应用程序进行了大量数据密集型处理。作为该处理的一部分,原始应用程序广泛使用“临时”表。这些“临时”表中的大多数实际上并不是 SQL Server 临时表(例如 tempdb 中的#sometable),而是在 SQL Server 中它们自己的“临时”数据库中创建和销毁的真实表。
现在,我正在使用 C# EF,我希望能够使用临时表(任一类型)作为我的数据处理的一部分。我已经在 EF 中使用临时表进行了一些谷歌搜索 - 到目前为止,我发现您可以使用 SQLBulkCopy 创建 tempdb 临时表,但无法使用 EF Linq 查询它们,因为它们不是正常的数据结构。我读过的另一个选项 - 使用存储过程进行处理并将表值参数传递给它。这将迫使我们拥有数千个存储过程 - 并将大量业务逻辑放在存储过程中。
还有其他方法可以创建和使用临时 SQL Server 表吗?EF 6 在这方面是否有任何附加功能?
sql-server-2008 - 需要 SQL Server 2008 中的 T-SQL 脚本,它会告诉我 tempdb 中给定数据集所需的磁盘空间 在我使用给定查询运行选择之前
我需要在 SQL Server 2008 中找到一个 T-SQL 查询,它会告诉我 tempdb 中的给定数据集需要多少磁盘空间,然后才能使用给定查询实际运行 select into 语句以创建新表。
例子:
bighugetablewithlotsofjoins
所以我需要知道在创建之前返回的数据需要多少空间newtable
sql-server - 为什么 LinqPad 说它提供给我的数据库是无效的对象名称?
试图找出某个文件(“HHS_WCE4.ARMV4.CAB”)中的内容,我搜索了我的硬盘驱动器以查找任何对它的引用。Fileseek* 的结果之一位于 C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Template Data\tempdb.mdf
[认为这是一个星号]为什么,哦,为什么,Windows 7 不附带文件搜索实用程序?他们的前一个,虽然在某些方面有点蹩脚,但仍然是日常使用中最有用的小程序/实用程序之一。
我试图打开该数据库以查看它可能对“HHS_WCE4.ARMV4.CAB”有什么引用,但它说在另一个窗格上暴露相同的东西后它无法在一个窗格中看到自己:
难道我做错了什么?还有其他方法可以检查 tempdb 的内容吗?
注意:我首先尝试通过添加连接 > 自动构建数据上下文 > 默认 (LINQ to SQL) > 下一步 > (localdb)\v11.0 > 附加数据库文件 > 测试来连接到它,但得到:
sql-server - 如何确认我发现的某些 tempdb 文件是否多余?
在 sql server 上,我继承了 C: 驱动器上的空间不足的责任(大约 5gb,但我正在运行分析器,它告诉我它需要停止,因为 C 上的空间不足)
我发现一些 tempdb 文件存储在C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data
每个 Occupying 10gb 中。
我知道sql server需要tempdb,所以我挖得更深一些。我发现服务器上有另一个驱动器(G)。此驱动器包含一组 tempdb 文件。
如果我tempdb
在 Management Studio 中右键单击,单击属性,然后单击文件,它显示所有文件都存储在此 G 盘上。
因此,C 驱动器中的那些似乎是此 sql 服务器初始配置的“剩余物”。我想绝对确定我可以安全地将它们移到某个地方以腾出空间。
即使 Management Studio 使用另一个驱动器中的文件报告“tempdb”,是否有可能因为一些模糊的幕后原因它们是必要的?
有没有办法检查文件是否“正在使用”?
tsql - 具有防御措施的 tsql 查询以防止填满 tempdb
我最近写了一个查询,相当令人惊讶的是,它填满了我们的 tempdb。我只是对数千条记录进行字符串比较,我想是因为字符串太长以至于 tempdb 中的事务数据被填满。
我想通过向我的查询添加逻辑来防止这种情况发生,以检查 tempdb 是否接近其阈值,如果接近则结束查询。这可能吗?
sql-server - 打开文件 '\\?\E:\TempDB\MDTempStore_1584_1_j1pv2.tmp' 时出现以下错误:访问被拒绝
我正在尝试重新安装 TFS 2013,但遇到问题 TF255356:配置 Team Foundation 数据库时发生以下错误:TF400711:执行服务步骤时发生错误在安装期间为组件 InstallWarehouse 创建仓库:创建分析数据库架构失败:生成分析数据库时出错:文件系统错误:打开文件“\?\E:\TempDB\MDTempStore_1584_1_j1pv2.tmp”时出现以下错误:访问被拒绝。
我试图从 tempdb 文件夹中删除只读标志,但在应用更改后它一直设置为 true。我还添加了注册表项 UseSystemForSystemFolders,它允许从文件夹中删除只读,但它不会持续存在。
对此的任何帮助都会很棒
谢谢
克里斯
sql - 如何根据匹配和非匹配字段在大表中查找重复项?
我有一个非常大的表,有超过 1000 万条记录。我想根据一些匹配的字段和一些不匹配的字段来查找重复项。
我目前使用的查询如下:
如果 ProjectId 的记录数低于 100,000,则此查询工作正常。当 ProjectId 记录超过 100 万条时,在执行此查询时,tempdb 大小会飙升至 100 GB,并导致磁盘空间不足的问题。查询需要永远执行。
请帮助我优化查询。
在获得上述查询的答案后添加了以下行......
非常感谢,@Gordon-Linoff。您建议的查询工作得更快。VendorName 来自不同的表。我可以包含如下所示的内部连接吗?
这是一种有效的方法吗?