我正在将数据库应用程序从 Windows 2008 R2/SQL Server 2008 R2 迁移到使用第三方 .NET CLR 程序集来解析字符串的 Windows 2012 R2/SQL Server 2016。
我得到的错误是:
尝试加载程序集 ID 65540 时 Microsoft .NET Framework 中发生错误。服务器可能资源不足,或者程序集可能不受 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE 的信任。再次运行查询,或检查文档以了解如何解决程序集信任问题。有关此错误的更多信息:
System.IO.FileLoadException: 无法加载文件或程序集“clrsplit,版本=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。发生与安全相关的错误。(来自 HRESULT 的异常:0x8013150A)System.IO.FileLoadException: 在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean SuppressSecurityChecks. (AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean SuppressSecurityChecks) 在 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblyMarkSecurity, StackIndPrrawlPrawl for …
我们最近将许多实例升级到 2016 年。因此,来自sqlpackage.exe的 SELECT 语句在某些实例上超时。
经过一些测试,我发现通过更新执行计划中显示的数据库系统表的统计信息,SELECT 停止了超时。
update statistics sys.[sysclsobjs] with fullscan
update statistics sys.[syscolpars] with fullscan
update statistics sys.[sysidxstats] with fullscan
update statistics sys.[sysiscols] with fullscan
update statistics sys.[sysobjvalues] with fullscan
Run Code Online (Sandbox Code Playgroud)
无论如何,是否可以通过标准维护包、Ola Hallengren 的脚本或其他一些过程来仅更新系统表统计信息?
08/01 更新
以下是我升级后的步骤
关于 4199 跟踪标志KB974006
-- for the instance
/*
Turn on traceflag 4199 (my understanding of this traceflag is that it disables
optimizer hotfixes in 2016
*/
-- disable automatic numa
sp_configure 'automatic soft-NUMA disabled', 1
GO
-- For each …Run Code Online (Sandbox Code Playgroud) 我的数据库大约是 2.5TB。每天运行重建索引是一个好习惯吗?
我们每天删除大约 20 GB 的数据 & 同时我们删除分区 & 我们将添加新分区。运行重建索引需要 8 小时,有时需要 24 小时。在此期间,日志文件增加到 300 GB。
我们需要将数据库碎片的每日报告发送给客户。看到 99% 或 98% 的人都会害怕。请建议。
表大小为 70GB,对于此表碎片级别,每天将是 99%。不知道是什么让客户要求每日报告碎片级别,但他每天都需要它。
每次我尝试查看查询存储中缺少的索引详细信息时,都会收到以下错误:
文档框架(SQL 编辑器)
程序位置:在 Microsoft.SqlServer.Management.UI.VSIntegration.Editors.ShowPlan.ShowPlanControl.OnMissingIndexDetails(Object sender, EventArgs a) 在 System.ComponentModel.Design.MenuCommand.Invoke() 在 Microsoft.SqlServer.Management.UI.VSIntegration .Editors.ShowPlan.ShowPlanControl.Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget.Exec(Guid&guidGroup, UInt32 nCmdId, UInt32 nCmdExcept, IntPtr vIn, IntPtr vOut)
有没有其他人遇到过这种情况?这是我可以修复的东西还是一个错误?
SSMS 版本 13.0.16106.4
这有点令人沮丧,因为我无法查看创建索引建议的结尾。
SQL Server 2016 中的新基数估计器 (CE) 有一个不幸的回归,它严重影响了我们的部署。有问题的查询是一个普通的 Hibernate 生成的更新;然而,更新的表也是索引视图的一部分。这是一个单行更新,通常也会影响索引视图中的 ~5 行。
我已经设法将问题缩小到 2.5M 表的 PK 列的基数估计,如果首先针对该列的当前统计信息中的 PK 值编译查询,一切正常,并且生成了最佳计划.
如果 PK 较新,id est 在统计范围之外,CE 130 会生成一个非常次优的计划,基本上估计整个索引视图将受到更新的影响。对于 CE 120 或 CE 70 而言,这对我们来说从来都不是问题,这两个估算器都能生成良好的计划。有问题的领先列被“标记”为 UNKNOWN。
然而,我发现有几个跟踪标志(2388-90、4139)可用于旧的查询规划器,但这些对 CE 120+ 没有影响。
是否有任何更新的设置或跟踪标志可以调用以确保每次都能找到正常的查询计划?
我已经尝试过 TF 9481 来强制使用旧的 CE,然后它工作得很好,但这很难与 Hibernate 结合(很难将提示注入查询,我真的不想在 Hibernate 的内部结构中胡思乱想)。我还尝试了 TF 4199 和最新的 CU,但无济于事。
我设置了几个 SQL Server 警报并添加了 Operator 来通知是否发生任何警报。
我只是注意到确实发生了几个警报,但我们没有收到任何警报电子邮件。我确实向操作员发送了一封测试通知电子邮件,它工作正常,我们收到了电子邮件。
知道为什么在实际警报发生时我们没有收到电子邮件警报吗?
数据库邮件日志中没有任何内容。
SQL Server 是可用性组的一部分,我只在操作员中提供电子邮件名称,而不提供任何“网络发送地址”或“寻呼机电子邮件名称”。此外,所有警报都列在操作员的属性中。
警报历史记录“发生次数:266”,上次警报的日期是昨天 6 月 29 日,但我根本没有收到警报电子邮件。甚至运营商历史也没有任何历史(从未通过电子邮件发送)。
sql-server sql-server-agent database-mail alerts sql-server-2016
我一直在尝试使用我的其中之一登录,sql server logins但收到以下错误消息:
Run Code Online (Sandbox Code Playgroud)TITLE: Connect to Server ------------------------------ Cannot connect to MY_SERVER. ------------------------------ ADDITIONAL INFORMATION: Logon failed for login 'cola' due to trigger execution. Changed database context to 'master'. Changed language setting to us_english. (Microsoft SQL Server, Error: 17892) For help, click: http://go.microsoft.com/fwlink?> ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=17892&LinkId=20476 ------------------------------ BUTTONS: OK ------------------------------
我知道下面的问题,但它略有不同,我已经尝试了那里所说的所有内容,但对我没有用,这就是我在这里提出这个问题的原因:
“由于触发器执行,登录 'sa' 登录失败。” 未定义 SA 登录触发器时
这里的这个问题也非常相似:
用户登录失败 - 错误:18456,严重性:14,状态:38
从这个我得到了以下信息:
用户登录失败 - 错误 18456 - 严重性 14,状态 38
1 'Account is locked out'
2 'User …Run Code Online (Sandbox Code Playgroud) 分区表为空,我正在加载 1 个具有 180k 行的分区的数据。我禁用索引并加载数据并在加载数据后重建索引。
在检查重建索引的查询计划时,我可以看到“估计行数”为 180k,但“实际行数”为 300 个分区 * 180,000 行 = 5400 万行,即使我只加载了一个分区的数据。
你能解释一下这种行为以及如何克服这个问题吗?
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64) Mar 18 2018 09:11:49 版权所有 (c) Windows Server 2012 R2 Standard 6.3(内部版本 9600)上的 Microsoft Corporation Enterprise Edition(64 位):
sql-server partitioning sql-server-2016 index-maintenance cardinality-estimates
我们正在使用传统的平面 txt 文件并将它们插入到带有 SSIS 的阶段表中。问题出现了表是否应该具有主聚集键索引。这是没有转换的直接平面文件导入。
create table dbo.CustomerTransaction
(
CustomerName varchar(255),
PurchaseLocation varchar(255),
Productid int,
AmountSold float,
CustomerAddress varchar(50)
)
create table dbo.CustomerTransaction
(
-- discussion for adding this column
CustomerTransactionId int primary key clustered identity(1,1)
CustomerName varchar(255),
PurchaseLocation varchar(255),
Productid int,
AmountSold float,
CustomerAddress varchar(50)
)
-- both tables have nonclustered indexes
create nonclustered index idx_ProductId on dbo.CustomerTransaction(ProductId)
create nonclustered index idx_CustomerAddress on dbo.CustomerTransaction(CustomerAddress)
-- Actually have more indexes, tables above are just for sample
Run Code Online (Sandbox Code Playgroud)
1)在ETL之前,临时表被截断。没有删除和更新。仅插入。
truncate table dbo.[CustomerTransaction] …Run Code Online (Sandbox Code Playgroud) performance database-design sql-server etl sql-server-2016 performance-tuning
sql-server-2016 ×10
sql-server ×8
ssms ×2
alerts ×1
connections ×1
etl ×1
logins ×1
memory ×1
partitioning ×1
performance ×1
security ×1
sql-clr ×1
statistics ×1