我们有一个 AlwaysOn 环境,其中包括我们 DR 站点中的一个副本,该副本设置为异步提交和可读辅助 = 否。
当我们在 SQL Server 2014 SP2 上运行时,我们能够针对 DR 副本上的数据库运行 DBCC CHECKDB。但是自从升级到 SQL Server 2016 后,我们就无法升级,而且我们的每周完整性作业因错误而失败。
'The target database is participating in an availability group and is currently not accessible for queries.
Either data movement is suspended or the availability replica is not enabled for read access.
To allow read-only access to this and other databases in the availability group, enable read access to one or more secondary availability replicas in the group. For more …Run Code Online (Sandbox Code Playgroud) 我正在为高性能大型 SQL Server 2016 数据库设计基于分区的解决方案。一些数据每天将有数亿条记录。在白天,我们还将运行报告查询和查询以寻找多天和多周的趋势。
我当前的解决方案将在每日分区中使用 70 天,每个分区使用一个专用文件组。数据超过 70 天标记后,它将进入每周分区,持续 42 周,每个分区也使用专用文件组,然后是 12 个月,然后是 6 年,所有这些都以相同的方式设置。
我们需要真正的高性能和大规模扩展能力(PB+ 范围)。为了最大限度地减少返工,我正在考虑为每日和每周文件组/分区使用每个文件组/分区的多个文件。确切地说,每天 4 次,每周 2 次。
通过这种方式,我们可以潜在地增加每个分区的读取/加载吞吐量,以及增加分区的最大容量(不要问为什么,但我们担心在某些日子实际上需要该级别的容量)。
有没有人这样做过,你的结果是什么?除了管理开销之外,还有什么理由不这样做吗?
所有每周、每月和每年的分区都将位于同一服务器上的同一数据库中(应用程序设计问题,但如果动机适当,多数据库可能是一种选择。多个服务器或实例是不可取的)。
目前正在讨论和评估分区中断。我根据收到的有关查询模式的信息选择了上述值。不同的天数当然是可能的,但我有点喜欢 10 周的每日分区。
我们确实有一个非常高端的数据中心,实际上是 2。我们正在讨论购买特定于该平台和其他平台的融合解决方案。我个人希望看到专用的 AFA(全闪存阵列),但在我得到这些之前,还有一些桥梁需要跨越。
我知道Data Warehouse Fast Track解决方案,但它们对我们不起作用。一方面,我们将主要进行 OLTP,因此基准数据将不能代表我们将得到的结果。其次,它们的规模不够大(目前)。来自参考架构的一些元素当然会被使用,但“交钥匙”SKU 将不是一种选择。我是前 MS PFE,所以这些资源是我首先查看的资源。
我只是想知道这是否可行。我已经安装了 R 服务(数据库内)和 SQL Server 2016(在 SP1+ CU1 打补丁)。
我注意到 R 服务版本是 3.2.2,您可以运行以下脚本来检查
declare @v varchar(100);
exec sp_execute_external_script @language=N'R'
, @script = N'v <- toString(getRversion())'
, @params = N'@v varchar(100) output'
, @v = @v out;
print @v;
-- returns 3.2.2
Run Code Online (Sandbox Code Playgroud)
但我也安装了 Microsoft R 客户端,并注意到它的 R 服务引擎版本为:3. 3 .2。
所以我的问题是“不SQL Server R的服务(在数据库)现在支持研究第3版3 0.2?” 如果是这样,我该如何升级它?如果没有,我想我会等到 MS 发布更新。
我阅读了MSDN,并在其中提到使用sqlBindR.exe来进行更新,但是此工具仅适用于我没有安装的 Windows R 服务器,我什至怀疑如果我安装了它,它是否会更新数据库内R服务。
将我们的数据库恢复到新的服务器硬件失败,出现页面错误。
Message
SQL Server detected a logical consistency-based I/O error:
incorrect pageid (expected 49:8125916; actual 49:29097436).
It occurred during a read of page (49:8125916) in database ID 7 at
offset 0x00000f7fbb8000 in file x:\Databases\Data07\DataWarehouse_OperationalData_15.ndf'.
Additional messages in the SQL Server error log or system event
log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB).
This error can be caused by many …Run Code Online (Sandbox Code Playgroud) 问题:在 SQL Server 2016 中,将列更新为相同的值(例如将列从'john'to更新'john')是否会产生与将列更新为不同值时相同数量的事务日志?阅读下文了解更多详情。
我们有几个 SQL 代理作业按计划运行。这些作业从源表(复制数据、链接服务器)中选择数据,对其进行转换,然后相应地插入/更新/删除本地目标表的行。
在试图找到实现这一目标的最佳方式时,我们经历了各种策略。我们试过了
现在,我只是一个初级 DBD,我对事务日志如何工作的理解非常有限。话虽如此,我的前辈已经得出结论,我们不能使用 MERGE 或 UPDATE 语句,其中所有列都在同一语句中处理,因为它会创建过多的日志记录。对此的论点是,当您UPDATE在 SQL Server 中执行 -语句时,当您设置列值并且新值等于旧值时,它仍会在事务日志中标记为更新。当您执行大量无意义的 SET 操作时,这显然会变得昂贵。
在以下示例中,我们使用源表中的值更新目标表的first_name和last_name,由 连接id。
-- create source- and target-table
CREATE TABLE [#tgt] (
[id] Int PRIMARY KEY,
[first_name] NVarchar(10),
[last_name] NVarchar(10)
)
CREATE TABLE [#src] (
[id] Int PRIMARY KEY,
[first_name] NVarchar(10),
[last_name] NVarchar(10)
)
-- fill some dummy-data …Run Code Online (Sandbox Code Playgroud) SQL Server 2014 引入了sys.dm_exec_query_profiles DMV,它提供了一种监视执行查询的实时进度的方法。最近我在查看 SQL Server 2016 SP1 中的一个有点复杂的查询,并注意到它sys.dm_exec_query_profiles包含查询计划中不存在的额外节点。这些节点必须???为physical_operator_name:
对于查询的并行版本,只有一个隐藏节点。该节点有一个object_id与嵌套循环连接的内表相关联。根据node_id这里是节点应该出现的地方:
运行查询会MAXDOP 1产生更多的隐藏节点。该???节点出现在与之前相同的位置:
还有一个新的没有出现在平行计划中:
这些似乎只出现在一些嵌套循环连接周围。我不记得在 SQL Server 2014 上看到过这种行为。不幸的是,查询很复杂,我无法上传匿名计划。
这里发生了什么?为什么sys.dm_exec_query_profiles报告没有显示在图形计划中的额外查询计划节点?
我发现以下查询显示设置了多少会话上下文变量:
SELECT cache_address
,name
,pages_kb
,pages_in_use_kb
,entries_count
,entries_in_use_count
FROM sys.dm_os_memory_cache_counters
WHERE TYPE = 'CACHESTORE_SESSION_CONTEXT';
Run Code Online (Sandbox Code Playgroud)
但现在我想知道设置了哪些键值对SESSION_CONTEXT()——如果有的话。
在对微软网站进行广泛研究后,我没有发现任何相关内容。
提前致谢。
我有一个带有多个执行计划的查询,与第二个计划相比,授予一个计划的内存是巨大的
当嵌套循环联接的外部表具有将结果过滤为小输入的谓词时,会出现问题,但批处理排序似乎使用与整个外部表等效的基数估计值。这可能会导致感知到过多的内存授予,这在非常并发的服务器中可能会产生多种副作用,例如 OOM 条件、计划缓存驱逐的内存压力或意外的 RESOURCE_SEMAPHORE 等待。我们已经看到,匹配此模式的单个查询实际上可以在高端机器(1TB+ RAM)上获得几 GB 的授予内存。
到目前为止,一种选择是使用跟踪标志 2340 全局禁用此功能,如 KB 2801413 中所述。但是,在 SQL Server 2016 RC0 中,我们已更改行为以保持优化的优势,但现在最大授予限制基于在可用的内存授予空间上。这种改进也转化为更好的可扩展性,从某种意义上说,可以用更小的内存占用执行更多的查询。我们正在考虑将此行为反向移植到即将推出的已将此行为移植到 SQL Server 2014 Service Pack 2,并像往常一样为市场上的版本提供附加值。
这正是我所看到的,但是我使用的是 SQL Server 2016 Enterprise。
这些是执行计划
https://www.brentozar.com/pastetheplan/?id=SJ0mYAy0b
https://www.brentozar.com/pastetheplan/?id=BJzutC1R-
我的问题是
2个执行计划的原因是什么?
优化器正在使用顶部执行计划,我强迫它使用较低的计划,但过了一段时间它又回到顶部执行计划,有什么原因吗?
如何解决这个问题?这个问题导致应用程序崩溃(有很多RESOURCE_SEMAPHORE等待,应用程序变得无响应)?我应该使用提示:DISABLE_OPTIMIZED_NESTED_LOOP还是 Trace Flag 2340?
注意:我检查了 XML,两个计划都有 NestedLoops Optimized="false"
object_definition和sp_helptext都返回存储过程的源代码 - 但是如何object_definition像sp_helptext当前那样使用和获取包含换行符的源代码?
例如在下面的代码中,我创建了一个存储过程:
if OBJECT_ID('usp_radhe') is not null
drop procedure usp_radhe
go
-- this procedure is just a test
-- it just returns a date in the past
-- how will I get its source code?
create procedure usp_radhe as
begin
select dateadd(dd,-31,GETDATE())
end
Run Code Online (Sandbox Code Playgroud)
使用sp_helptext我可以很好地查看源代码:
sp_helptext 'usp_radhe'
Run Code Online (Sandbox Code Playgroud)
使用object_definition我在一行中获得源代码,这对我不利:
select OBJECT_DEFINITION(object_id('usp_radhe'))
Run Code Online (Sandbox Code Playgroud)
我有一个[dbo].[FN_CalcAerialDistance]接受4 parameters并返回其结果的函数。现在 4 个参数来自same table,我不想多次点击数据库来带来相同的数据。我试过了:
SELECT [dbo].[FN_CalcAerialDistance]
(
(select latitude from loc.locations where place_name = 'Delhi'),
(select longitude from loc.locations where place_name = 'Delhi'),
(select latitude from loc.locations where place_name = 'Mumbai'),
(select longitude from loc.locations where place_name = 'Mumbai')
)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以优化代码?我也尝试像数组一样访问表数据类型
sql-server ×10
sql-server-2016 ×10
dbcc-checkdb ×2
memory-grant ×1
metadata ×1
partitioning ×1
r ×1
restore ×1
scripting ×1
session ×1
upgrade ×1