标签: sql-server

列存储索引中的标识列

我有一个非常大的表 IMO(约 1.37 亿行),其中包含大量重复数据、大量NULL列等。

我正在考虑使用一个带有 a 的表来探索这个COLUMNSTORE INDEX,我IDENTITY在原始表中有一个列,这是我唯一的每一行都是唯一的列。

我应该忽略此列还是包含它?我已经读到您想将表的所有行都包含在 中,COLUMNSTORE INDEX但我也读到最佳候选者是具有许多非唯一行的列。

这只是一个糟糕的候选人COLUMNSTORE INDEX吗?

我使用的是 SQL Server 2012,所以它是一个非聚集列存储。我只是在探索可能的更好的方法来存储这些数据。更新是不存在的,尽管会通过 ELT 过程定期添加新行,所以我假设会在那里完成一些工作。有些人挖掘这些数据并生成大量报告,大量扫描行,有时会使服务器爬行,这迫使我们每天将副本卸载到辅助服务器。

sql-server sql-server-2012 columnstore

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

列出 SQL Server 实例启动参数

我有一台刚刚重新启动的服务器,并使用以下命令验证了哪些跟踪标志处于活动状态DBCC TRACESTATUS

在此处输入图片说明

跟踪标志:3688 功能:将有关跟踪开始和停止的消息删除到错误日志

在这里您可以看到每个跟踪标志的作用。

标记 3688

启动参数如下:

在此处输入图片说明

题:

如何通过 T-SQL 找到 SQL Server 服务的启动参数?

sql-server t-sql configuration sql-server-2014

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

将存储过程结果分配给 SSIS 变量

我试图将存储过程中的值获取到 SSIS 变量中,然后测试以查看如果我添加了表达式,两个 SSIS 任务是否可以工作。所以举个例子,我试图使用这个存储过程:

在此处输入图片说明

也许我什至完全错误地设置了 SSIS 变量属性,因为我也不确定我是否以正确的方式将存储的 proc 值导入到 SSIS 变量中。如果您还需要其他任何屏幕截图,请告诉我。

这是任务示例:

在此处输入图片说明

这是优先约束编辑器屏幕截图:

在此处输入图片说明

这是第一个任务的属性:

在此处输入图片说明

我希望它根据这种情况前进(或失败)。但是当我测试它时,不管怎样,过程都会从第一个任务流向第二个任务,并且只向我显示第一个任务的“100% 完成”,而没有关于它是否检查这个表达式是否为真。我怎么能做这样的事情,出了什么问题?我在 SSIS 中有一个名为“orderCount”的变量,用于从存储过程中获取值。

sql-server ssis

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

通过删除运算符哈希匹配内连接来提高查询性能

在尝试将下面这个问题的内容应用于我自己的情况时,如果可能的话,我对如何摆脱运算符 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

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

如何解决 SSIS Excel 连接管理器错误 0xC0209303?

我创建了一个 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 连接管理器出于某种原因尝试访问用户临时文件夹,如果它无权访问该文件夹,则它将失败:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection- manager-failed-with?forum=sqlintegrationservices

我也注意到 Microsoft.JET.OLEDB.4.0 驱动程序将尝试读取登录用户配置文件下的临时目录。

.

...我们使用较低级别的域帐户运行我们的 SQL 代理,并使用代理帐户运行我们的 SSIS 包。你是对的,因为 Procmon 也为我证实了这一点。我将代理帐户权限授予了配置文件的临时目录 (C:\Documents and Settings\SQLAgentDomainAccount\Local Settings\Temp) 并且它起作用了!

我没有使用 SQL Server 作业或代理帐户。该包由 Windows 帐户很可能通过命令行脚本简单地执行。

Windows 帐户可以访问该文件,但我不确定它是否可以访问它的“TEMP”文件夹(我从未在包中引用它,所以我不知道为什么它需要访问该文件夹) ...

sql-server ssis

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

递归sql查询性能问题

这是我第六次问这个问题,也是最短的一次。之前的所有尝试都产生了更类似于博客文章而不是问题本身的东西,但我向您保证,我的问题是真实的,只是它涉及一个大主题,并且没有这个问题包含的所有细节,它将是不清楚我的问题是什么。所以这里...

抽象的

我有一个数据库,它允许以一种奇特的方式存储数据,并提供我的业务流程所需的几个非标准功能。特点如下:

  1. 通过仅插入方法实现的非破坏性和非阻塞更新/删除,允许数据恢复和自动记录(每个更改都与进行更改的用户相关联)
  2. 多版本数据(同一数据可以有多个版本)
  3. 数据库级权限
  4. 与 ACID 规范和事务安全的创建/更新/删除的最终一致性
  5. 能够将当前的数据视图倒回或快进到任何时间点。

可能还有其他功能我忘了提及。

数据库结构

所有用户数据都Items以 JSON 编码字符串 ( ntext) 的形式存储在表中。所有的数据库操作都通过两个存储过程进行GetLatestInsertSnashot,它们允许类似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)

performance sql-server sql-server-2012 query-performance

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

使用 PAGELATCH_* 等待类型等待的阻塞会话?

编辑:为什么会话报告被阻止但等待PAGELATCH_*,而不是LCK_M_相关的等待类型?

我之前假设 SQL Server 只会在 blocks_session_Id 列中报告阻塞会话。如果被阻塞的会话正在等待逻辑锁而不是其他任何东西,例如PAGELATCH_*.

在此处输入图片说明

sql-server optimization locking wait-types sql-server-2014

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

相当于 Oracle USING INDEX 子句的 SQL Server

是否有 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 值。

这似乎意味着有一种方法可以指定主键应该使用什么索引。

sql-server-2008 oracle sql-server constraint primary-key

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

DB Engine Stolen Server 内存太高

我从 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 memory sql-server-2012

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

在没有分析器的情况下,如何查看查询等待锁定的时间?

我正在尝试诊断一个间歇性需要很长时间的查询。我怀疑它可能在尝试获取锁时被阻止。我无权在遇到问题的环境中使用探查器。

有什么方法可以让我在不使用外部分析器的情况下获取有关此单个查询被阻止多长时间的统计信息?

sql-server blocking sql-server-2014

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