标签: sql-server

将几行插入大表时性能缓慢

我们有一个从商店获取数据并更新公司范围内的库存表的流程。该表按日期和按项目为每个商店提供行。对于拥有许多商店的客户,该表可能会变得非常大——大约有 5 亿行。

当商店输入数据时,此库存更新过程通常每天运行多次。这些运行仅从少数商店更新数据。但是,客户也可以运行此程序来更新过去 30 天内的所有商店。在这种情况下,该过程启动 10 个线程并在单独的线程中更新每个商店的库存。

客户抱怨这个过程需要很长时间。我分析了这个过程,发现插入到这个表中的一个查询消耗的时间比我预期的要多得多。此 INSERT 有时会在 30 秒内完成。

当我对这个表(由 BEGIN TRAN 和 ROLLBACK 限定)运行 ad-hoc SQL INSERT 命令时,ad-hoc SQL 以毫秒的数量级完成。

执行缓慢的查询如下。这个想法是插入不存在的记录,然后在我们计算各种数据位时更新它们。该过程的前一个步骤已确定需要更新的项目,进行一些计算,并将结果填充到 tempdb 表 Update_Item_Work 中。这个进程在 10 个独立的线程中运行,每个线程在 Update_Item_Work 中有自己的 GUID。

INSERT INTO Inventory
(
    Inv_Site_Key,
    Inv_Item_Key,
    Inv_Date,
    Inv_BusEnt_ID,
    Inv_End_WtAvg_Cost
)
SELECT DISTINCT
    UpdItemWrk_Site_Key,
    UpdItemWrk_Item_Key,
    UpdItemWrk_Date,
    UpdItemWrk_BusEnt_ID,
    (CASE UpdItemWrk_Set_WtAvg_Cost WHEN 1 THEN UpdItemWrk_WtAvg_Cost ELSE 0 END)
FROM tempdb..Update_Item_Work (NOLOCK)
WHERE UpdItemWrk_GUID = @GUID
AND NOT EXISTS
    -- Only insert for site/item/date combinations that don't exist
    (SELECT …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query-performance

9
推荐指数
1
解决办法
2万
查看次数

如何在 SSMS2012 中检查连接字符串?

我连接到数据库。我使用 Management Studio 2012 Express 的 db。我可以通过单击 Management Studio 中的某些内容来检查连接字符串吗?

sql-server ssms sql-server-2012

9
推荐指数
1
解决办法
1万
查看次数

估计和实际执行计划之间的差异

我是 SQL Server 的新手,我想调整我的第一个查询。

在 SQL Server 20xx 中,“显示估计执行计划”和“包括实际执行计划”有什么区别?

sql-server

9
推荐指数
1
解决办法
1万
查看次数

SQL Server 2012 标准版 - 多实例和内存利用率

如果我们在一台具有 192 GB RAM 的服务器上有多个 SQL Server 2012 标准版实例(具有 64 GB 内存限制),两个实例是否只能访问前 64 GB 内存,还是可以访问不同的内存?部分内存,以便他们每个人都可以拥有自己的 64 GB“块”。

如果两个节点都故障转移到单个节点,则这对于 Active/Active 集群是考虑因素。

sql-server clustering sql-server-2012

9
推荐指数
2
解决办法
2809
查看次数

sp_execute 需要“int”类型的参数“@handle”

如果目标数据库中存在表,我正在尝试签入存储过程。如果没有,我将使用源数据库中的 information_schema 表创建表。但是,当我使用 sp_execute 尝试恢复表是否存在时,我收到错误过程需要“int”类型的参数“@handle”。

我没有使用@handle 参数。有人能告诉我这个错误是什么意思以及为什么我会收到它吗?我的代码的相关部分如下。

DECLARE @SQL NVARCHAR(MAX),
        @Parameters NVARCHAR(4000),
        @TableNotExists INT,
        @SourceTable NVARCHAR(200),
        @DestDB NVARCHAR(200)

BEGIN

SET @SourceTable = 'table'
SET @DestDB = 'database'
SET @Parameters = N'@SourceTableIN NVARCHAR(200), @TableNotExistsOut INT OUTPUT'
SET @SQL = N'USE [' + @DestDB + '] IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME = @SourceTableIN)
BEGIN SET @TableNotExistOUT = 1 END'

EXEC sp_Execute @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOUt = @TableNotExists OUTPUT

END
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server dynamic-sql t-sql

9
推荐指数
1
解决办法
1万
查看次数

SQL Server“创建数据库”语句。如何继承自动增长设置?

我正在使用 SQL Server 2008 R2 并通过持续部署创建数据库。

在我们的系统中,SQL Server 中默认的 1Mb/10% 自动增长设置对我们的数据效果不佳。特别是因为我们有一个遗留应用程序,它阻止我们对架构进行太多更改。我们希望在实例级别配置数据库设置,以便我们可以为分阶段部署更改它。

我在几个地方读到过,新数据库的默认设置基于“模型”的设置,但似乎这只能通过单击 SQL Management Studio UI 中的新数据库而不是从脚本(例如 CREATE DATABASE [MyDb])来实现。

msdn.microsoft.com/en-us/library/ms186388(v=sql.105).aspx

sqlservercentral.com/Forums/Topic1065073-391-1.aspx

/sf/ask/617999021/#comment15586568_8828604

有没有人真的让这个与创建脚本一起工作?还有另一种方法可以设置每个服务器实例的自动增长吗?

sql-server transaction-log

9
推荐指数
1
解决办法
2116
查看次数

SQL I/O Sim 和 SQL IO 工具有什么区别?

我想使用基准工具测试我的不同 SQL Server 替代方案。我找到了微软的两个工具:

  1. SQLIO 磁盘子系统基准测试工具
  2. SQL IO 模拟

它们之间有什么区别?是一样的吗?

谢谢!

performance sql-server

9
推荐指数
1
解决办法
7630
查看次数

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。(MsDtsSrvr)

我有一个集群环境,其中有很多实例。我修改了 xml 文件以允许多个实例使用 ssis。当实例与集群 ssis 位于同一节点上时,一切正常。但是,如果它们位于不同的节点上,则似乎存在身份验证问题,并且会丢失我的凭据。出于某种原因,它尝试使用匿名登录。这是完整的错误:

SSIS 服务配置中指定的 SQL 服务器不存在或不可用。当计算机上没有 SQL Server 的默认实例时,可能会发生这种情况。有关详细信息,请参阅 Server 2005 联机丛书中的“配置集成服务服务”主题。

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。(MsDtsSrvr)

我很感激任何人在这个问题上的帮助。

谢谢,

authentication sql-server

9
推荐指数
1
解决办法
2万
查看次数

dm_exec_query_stats 中的“读取”和“写入”单位是什么

MSDN 将dm_exec_query_stats中的各种逻辑/物理读写列描述为:

上次执行计划时执行的物理读取数。

这些列都是 64 位整数 ( bigint),因此显然更大的数字代表更多的读/写。

但是这个列的单位是什么?数据库页面?千字节?只是一个任意数字?

示例:对于我的数据库中相当昂贵的查询dm_exec_query_stats.total_logical_reads = 40412

40412什么的?

sql-server dmv

9
推荐指数
1
解决办法
7487
查看次数

如何在 SQL Server Management Studio 中为所有查询连接一次?

SSMS 要求我连接项目中的每个查询。对于在我的项目中使用它的所有查询,有没有办法在每个连接中只连接一次?

下面的答案(2014 年 3 月)没有回答这个问题。仍在寻找解决方案。

sql-server ssms sql-server-2012

9
推荐指数
1
解决办法
1万
查看次数