我有一个非常大的表 IMO(约 1.37 亿行),其中包含大量重复数据、大量NULL列等。
我正在考虑使用一个带有 a 的表来探索这个COLUMNSTORE INDEX,我IDENTITY在原始表中有一个列,这是我唯一的每一行都是唯一的列。
我应该忽略此列还是包含它?我已经读到您想将表的所有行都包含在 中,COLUMNSTORE INDEX但我也读到最佳候选者是具有许多非唯一行的列。
这只是一个糟糕的候选人COLUMNSTORE INDEX吗?
我使用的是 SQL Server 2012,所以它是一个非聚集列存储。我只是在探索可能的更好的方法来存储这些数据。更新是不存在的,尽管会通过 ELT 过程定期添加新行,所以我假设会在那里完成一些工作。有些人挖掘这些数据并生成大量报告,大量扫描行,有时会使服务器爬行,这迫使我们每天将副本卸载到辅助服务器。
我有一台刚刚重新启动的服务器,并使用以下命令验证了哪些跟踪标志处于活动状态DBCC TRACESTATUS:
跟踪标志:3688 功能:将有关跟踪开始和停止的消息删除到错误日志
在这里您可以看到每个跟踪标志的作用。
启动参数如下:
题:
如何通过 T-SQL 找到 SQL Server 服务的启动参数?
我试图将存储过程中的值获取到 SSIS 变量中,然后测试以查看如果我添加了表达式,两个 SSIS 任务是否可以工作。所以举个例子,我试图使用这个存储过程:
也许我什至完全错误地设置了 SSIS 变量属性,因为我也不确定我是否以正确的方式将存储的 proc 值导入到 SSIS 变量中。如果您还需要其他任何屏幕截图,请告诉我。
这是任务示例:
这是优先约束编辑器屏幕截图:
这是第一个任务的属性:
我希望它根据这种情况前进(或失败)。但是当我测试它时,不管怎样,过程都会从第一个任务流向第二个任务,并且只向我显示第一个任务的“100% 完成”,而没有关于它是否检查这个表达式是否为真。我怎么能做这样的事情,出了什么问题?我在 SSIS 中有一个名为“orderCount”的变量,用于从存储过程中获取值。
在尝试将下面这个问题的内容应用于我自己的情况时,如果可能的话,我对如何摆脱运算符 Hash Match (Inner Join) 感到有些困惑。
SQL Server 查询性能 - 消除对哈希匹配(内部联接)的需要
我注意到 10% 的成本,并想知道我是否可以减少它。请参阅下面的查询计划。

这项工作来自我今天必须调整的查询:
SELECT c.AccountCode, MIN(d.CustomerSID)
FROM Stage.Customer c
INNER JOIN Dimensions.Customer d ON c.Email = d.Email
OR (
c.HomePostCode = d.HomePostCode
AND c.StrSurname = d.strSurname
)
GROUP BY c.AccountCode
Run Code Online (Sandbox Code Playgroud)
添加这些索引后:
---------------------------------------------------------------------
-- Create the indexes
---------------------------------------------------------------------
CREATE NONCLUSTERED INDEX IDX_Stage_Customer_HOME_SURNAME_INCL
ON Stage.Customer(HomePostCode ,strSurname)
INCLUDE (AccountCode)
--WHERE HASEMAIL = 0
--WITH (ONLINE=ON, DROP_EXISTING = ON)
go
CREATE NONCLUSTERED INDEX IDX_Dimensions_Customer_HOME_SURNAME_INCL
ON Dimensions.Customer(HomePostCode ,strSurname)
INCLUDE (AccountCode,CustomerSID)
--WHERE HASEMAIL = …Run Code Online (Sandbox Code Playgroud) performance index sql-server execution-plan sql-server-2014 query-performance
我创建了一个 SSIS 包,它将 Excel 文件导入到 SQL Server 表中。
当我在我的机器上本地运行 SSIS 包时,它运行没有任何问题,但是当我在计划包的服务器上运行它时,我收到以下错误(从我输出错误的文本文件到使用 SSIS 日志记录)。
经过研究,我能找到的唯一建议是将 Run64BitRuntime 属性设置为 false,我做了但仍然没有运气。我怀疑这是导致我错误的原因,因为错误没有指定任何关于 64 位的内容(就像我发现的文章中的情况一样)。
我还认为可能是服务器没有合适的 Excel 驱动程序,但我也不认为是这种情况,因为通常错误消息会说明驱动程序未注册。
我目前无权访问远程服务器。我只能将包上传到一个文件夹,然后它由应用程序运行,因此我能看到的唯一错误消息是我创建的文本错误日志中的内容。
错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“Envision”的 AcquireConnection 方法调用失败,错误代码为 0xC0209303。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。
“Envision”是我的 excel 连接管理器的名称。
我使用表达式填充 Excel 文件路径和连接字符串。
连接字符串表达式如下所示:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+@[User::SourceFilePath] +";Extended Properties=\"EXCEL 12.0 XML;HDR=YES\";"
SSIS 包由 Windows 用户名/帐户执行。我认为这可能是一个网络服务帐户。(BDS_sprtIIS)
有没有人对如何解决仅在我的本地计算机上运行但在将部署包的实际服务器上不起作用的包的这个问题有任何解决方案或建议?
我在另一个论坛上找到了以下答案,请问是什么导致了我的问题?他们基本上是说 Excel 连接管理器出于某种原因尝试访问用户临时文件夹,如果它无权访问该文件夹,则它将失败:
我也注意到 Microsoft.JET.OLEDB.4.0 驱动程序将尝试读取登录用户配置文件下的临时目录。
.
...我们使用较低级别的域帐户运行我们的 SQL 代理,并使用代理帐户运行我们的 SSIS 包。你是对的,因为 Procmon 也为我证实了这一点。我将代理帐户权限授予了配置文件的临时目录 (C:\Documents and Settings\SQLAgentDomainAccount\Local Settings\Temp) 并且它起作用了!
我没有使用 SQL Server 作业或代理帐户。该包由 Windows 帐户很可能通过命令行脚本简单地执行。
Windows 帐户可以访问该文件,但我不确定它是否可以访问它的“TEMP”文件夹(我从未在包中引用它,所以我不知道为什么它需要访问该文件夹) ...
这是我第六次问这个问题,也是最短的一次。之前的所有尝试都产生了更类似于博客文章而不是问题本身的东西,但我向您保证,我的问题是真实的,只是它涉及一个大主题,并且没有这个问题包含的所有细节,它将是不清楚我的问题是什么。所以这里...
我有一个数据库,它允许以一种奇特的方式存储数据,并提供我的业务流程所需的几个非标准功能。特点如下:
可能还有其他功能我忘了提及。
所有用户数据都Items以 JSON 编码字符串 ( ntext) 的形式存储在表中。所有的数据库操作都通过两个存储过程进行GetLatest和InsertSnashot,它们允许类似Git是如何操纵源文件中的数据进行操作。
结果数据在前端链接(JOINed)成完全链接的图,因此在大多数情况下不需要进行数据库查询。
也可以将数据存储在常规 SQL 列中,而不是以 Json 编码形式存储。然而,这增加了整体复杂性压力。
GetLatest结果与指令形式的数据,请考虑下图进行解释:
该图显示了对单个记录所做更改的演变。图上的箭头显示了编辑所依据的版本(假设用户正在离线更新一些数据,与在线用户进行的更新并行,这种情况会引入冲突,基本上是两个版本的数据而不是一个)。
因此,GetLatest在以下输入时间跨度内调用将产生以下记录版本:
GetLatest 0, 15 => 1 <= The data is created upon it's first occurance
GetLatest 0, 25 => 2 <= Inserting another version on top of first one overwrites the existing version
GetLatest 0, 30 => 3 <= The overwrite …Run Code Online (Sandbox Code Playgroud) 编辑:为什么会话报告被阻止但等待PAGELATCH_*,而不是LCK_M_相关的等待类型?
我之前假设 SQL Server 只会在 blocks_session_Id 列中报告阻塞会话。如果被阻塞的会话正在等待逻辑锁而不是其他任何东西,例如PAGELATCH_*.
是否有 SQL Server 2008 等效于 Oracle 中的 USING INDEX 子句?特别是对于构造:
CREATE TABLE c(c1 INT, c2 INT);
CREATE INDEX ci ON c (c1, c2);
ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci;
Run Code Online (Sandbox Code Playgroud)
在关于唯一索引的 Sql Server文档中,它指出(强调):
唯一索引通过以下方式实现:
PRIMARY KEY 或 UNIQUE 约束
当您创建 PRIMARY KEY 约束时,如果表上的聚集索引尚不存在并且您没有指定唯一的非聚集索引,则会自动创建一个或多个列上的唯一聚集索引。主键列不能允许 NULL 值。
这似乎意味着有一种方法可以指定主键应该使用什么索引。
我从 System Center Operations Manager (SCOM) 收到错误消息。
如何解决这个错误?
SQL DB 2012 Engine Stolen Server Memory 过高。
我运行查询并得到这个计数器:
???????????????????????????????????????????????
? Stolen Server Memory (MB) ? 7354.773437 ?
? Lock Memory (MB) ? 106.195312 ?
? Free Memory (MB) ? 64.632812 ?
? Connection Memory (MB) ? 24.203125 ?
? Log Pool Memory (MB) ? 14.085937 ?
? Optimizer Memory (MB) ? 2.351562 ?
? Granted Workspace Memory (MB) ? 1.296875 ?
? Cursor memory usage ? 0.000000 ?
? Cursor memory …Run Code Online (Sandbox Code Playgroud) 我正在尝试诊断一个间歇性需要很长时间的查询。我怀疑它可能在尝试获取锁时被阻止。我无权在遇到问题的环境中使用探查器。
有什么方法可以让我在不使用外部分析器的情况下获取有关此单个查询被阻止多长时间的统计信息?
sql-server ×10
performance ×2
ssis ×2
blocking ×1
columnstore ×1
constraint ×1
index ×1
locking ×1
memory ×1
optimization ×1
oracle ×1
primary-key ×1
t-sql ×1
wait-types ×1