标签: sql-server-2014

如何使用 t-sql 提取 perfmon 计数器“内存:页/秒”?

我已经用谷歌搜索过这个,到目前为止,没有运气,所以向所有伟大的专家寻求帮助。

我试图弄清楚是否有办法使用 t-sql 获取性能计数器“内存:页/秒”,因为我试图将其添加为我们的 Ignite 监控工具中的自定义指标。我查看了 sys.dm_os_performance_counters DMV 但没有在那里找到它。

有人知道这样做的方法吗?提前致谢 :)

monitoring sql-server perfmon sql-server-2014

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

截断表锁定系统视图

我们有一个Truncate Table在 Snapshot 事务中运行的 proc 。这似乎导致了一个LOCK_M_S阻塞 sys 视图的锁sys.partitions

有没有方便的解决方法?我喜欢不使用 truncate 发生的多余日志的效率,但不想锁定我的sys.partitions.

我很高兴应要求发布代码,但我很确定这是Truncate在 Snapshot 事务中的某种行为。我只是不知道。

sql-server truncate snapshot-isolation sql-server-2014

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

降低填充因子会导致更多的页面拆分吗?

我们一直遇到一个表上的页面拆分问题,这是一个特别麻烦的问题 - 它是数据库中活动的审计日志,并且已经增长到 1TB 以上。主要索引位于记录类型上,它是 an NVARCHAR(100)- 因为当有 5 种记录类型时您需要它 - 它比 aTINYINT和记录 id更有意义- 它是 anNVARCHAR(200)而不是记录的整数键。

它们还涵盖索引,包括键、旧值、新值等——非常广泛。

这是一个旧系统,不幸的是,这种审计的代码无处不在,而不是集中在一个程序中。它无法改变,我们正在经历漫长的微服务重写的痛苦过程。

因此,我将两个索引的填充因子从 100% 降低到 85%。

并且页面拆分变得更糟。我会说大约 3 倍的页面拆分。

这是一个普遍的结果吗?大多数建议说减少填充因子以提高页面拆分性能。我可以理解为什么它会这样做,因为键中数据的宽度。

建议是进一步降低填充因子,还是将其恢复原状?

page-splits fill-factor sql-server-2014

5
推荐指数
2
解决办法
139
查看次数

计算填充因子百分比如何与数据库大小相关?

我使用维护计划重建了我的数据库设置填充因子 95(5% 可用空间)中的所有索引。重新索引后,数据库的大小几乎翻了一番——报告的可用空间为 42%。

计算的填充因子如何与数据库的大小相关?

也许重新索引有问题;是什么导致了如此大的规模增长?

重新索引后的一些数据库信息:

Size (MB):            164 983.625
Data Space Used (KB):      82 907 896
Index Space Used (KB):     14 073 320
Space Available (KB):      71 879 024
Run Code Online (Sandbox Code Playgroud)

为一张表生成维护计划的T-SQL:

Size (MB):            164 983.625
Data Space Used (KB):      82 907 896
Index Space Used (KB):     14 073 320
Space Available (KB):      71 879 024
Run Code Online (Sandbox Code Playgroud)

附加信息:

的结果 sp_spaceused 'dbo.BigTable'

name        rows        reserved    data        index_size  unused
BigTable    58028080    72824296 KB 68393936 KB 4424000 KB  6360 KB
Run Code Online (Sandbox Code Playgroud)

sql-server fill-factor sql-server-2014

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

可以允许 SET IDENTITY_INSERT 的权限低于 db_ddladmin 吗?

我继承了一个应用程序在sysadmin帐户下运行的系统。我限制该帐户db_datareader+ db_datawriter+EXECUTE上的所有数据库和一套extended events会议赶permission errors在服务器上。即使用户是其中的成员并且对表没有应用细粒度限制
,看到一些inserts失败也让我感到非常惊讶db_datawriter

然后我注意到只有该集合的插入IDENTITY_INSERT失败。有问题的数据库是满的identity,有太多SET IDENTITY_INSERT在他们的代码。代码不仅意味着modules存储在服务器上,还意味着C#代码。

要能够设置identity_insert用户必须拥有该表对该表具有ALTER权限。但事实是你不能ALTER只授予表,我被迫授予ALTER整个数据库的权限(user 我会让这个用户的db_ddladmin角色成员添加42 个权限(!!!) vs 51 个可以通过授予ALTER数据库添加到用户权限)

我对重构数据库不感兴趣sequence(服务器版本是2014这样我理论上可以做到)而且我不能只是添加execute as dbo到每个使用的 sp 中,identity_insert因为还有应用程序代码要重写,我只是想知道为什么微软会做出如此奇怪的事情db_datawriter无法设置的权限设计identity_insert? …

security sql-server permissions identity sql-server-2014

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

如何删除 SQL Server 错误日志

我有六个错误日志加上当前。他们在我的 VPS 服务器上占用了我硬盘上 10G 的磁盘空间。这大约是服务器空间的 25%。最大的文件是 6G 并且还在增长。

我如何删除不需要的错误日志并在回收之前减小存档文件的大小。

谢谢,

sql-server error-log sql-server-2014

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

SQL Server 的兼容级别

有没有办法知道我的 SQL SERVER DB 2014 中的兼容性级别是否已更改?

sql-server sql-server-2014 cardinality-estimates

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

完全相同的查询和计划,但持续时间和总读取量不同。我知道参数嗅探但是

我知道什么是参数嗅探,但这似乎不同,我有一个简单的查询:

select * from A400RDATA
Run Code Online (Sandbox Code Playgroud)

该表只有 acluster index和大约25000行。查询通常需要 1 秒,但现在需要 20 秒。

我在缓存中找到了它的执行计划,并使用sp_BlitzCache(感谢 Brent Ozar)分析每个细节 -> 是的,最后一次执行需要 20 秒。

因此,我稍作更改,再次运行此查询,前导空格:“ select * from A400RDATA”(注意sof之前的前导空格select)。前导空格是查询文本中的更改,因此会SQL Optimizer生成新的查询计划。

这两个查询计划是相同的,它们是平凡的计划,它们只是使用cluster index,但总读取和持续时间不同。遵循两种不同的 BlitzCache 结果:

在此处输入图片说明

Solarwind 显示下降Page Life Expectancy,并且 SQL Server 实例仅使用一个核心 ( MAXDOP = 1)。
我认为MAXDOP并且PLE可能是问题的原因,你怎么看?我怎么能确定呢?
我如何知道数据是从磁盘还是 RAM 中获取的?

我检查了20秒执行计划的逻辑和物理读取:

  • 执行时间:3
  • 物理读取:0
  • 处理的行数:76000
  • 逻辑写入:0
  • 逻辑读取:3841

没有物理读取......所以PLE不是原因(也许)。我再次阅读了计划的详细信息:3 次执行和 20 秒的总持续时间,因此每次执行需要 6 秒,但 CPU 时间相对较少: …

sql-server availability-groups sql-server-2014 enterprise-edition

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

统计直方图 AVG_RANGE_ROWS 差异

根据 MS 文档,其描述AVG_RANGE_ROWS是:

直方图步骤中具有重复列值的平均行数,不包括上限。当 DISTINCT_RANGE_ROWS 大于 0 时,通过将 RANGE_ROWS 除以 DISTINCT_RANGE_ROWS 来计算 AVG_RANGE_ROWS。当 DISTINCT_RANGE_ROWS 为 0 时,AVG_RANGE_ROWS 为直方图步骤返回 1。

我期待在最后一行,如果的确是这样,我很好奇,想知道为什么我看到一个值AVG_RANGE_ROWS是不相等1的时候DISTINCT_RANGE_ROWS0在直方图步骤。

stats_histogram

有问题的统计信息是 SQL Server 在启用自动创建统计信息选项时创建的列统计信息。我使用的是旧版本的数据库,但使用的是最新补丁 - SQL Server 2014 SP3、CU4+GDR (12.0.6372.1)。

有点不幸的是,由于次优查询计划,我们上周几乎崩溃了。最终结果是大扫描和膨胀的内存授权。使用更高的百分比值重新采样统计数据暂时为我们解决了这个问题,但我很想知道初始语句或已知问题是否存在异常(可能使用跟踪标志解决?)以及如何解决对于我们无法控制采样大小的自动创建的统计数据,我如何防止这种情况再次发生?

sql-server statistics sql-server-2014

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

Windows 操作系统级别的计划磁盘碎片整理任务和 SQL 数据卷

对 SQL 卷进行磁盘碎片整理运行 Windows 操作系统级别的计划任务是否被认为是安全的?

我从以前的 DBA 那里继承了 SQL Server 的管理,他们有一个 Windows 计划任务设置来对 SQL Server 数据卷进行碎片整理。我想知道我是否可以安全地禁用这些作业。

sql-server sql-server-2014

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