我已经用谷歌搜索过这个,到目前为止,没有运气,所以向所有伟大的专家寻求帮助。
我试图弄清楚是否有办法使用 t-sql 获取性能计数器“内存:页/秒”,因为我试图将其添加为我们的 Ignite 监控工具中的自定义指标。我查看了 sys.dm_os_performance_counters DMV 但没有在那里找到它。
有人知道这样做的方法吗?提前致谢 :)
我们有一个Truncate Table在 Snapshot 事务中运行的 proc 。这似乎导致了一个LOCK_M_S阻塞 sys 视图的锁sys.partitions。
有没有方便的解决方法?我喜欢不使用 truncate 发生的多余日志的效率,但不想锁定我的sys.partitions.
我很高兴应要求发布代码,但我很确定这是Truncate在 Snapshot 事务中的某种行为。我只是不知道。
我们一直遇到一个表上的页面拆分问题,这是一个特别麻烦的问题 - 它是数据库中活动的审计日志,并且已经增长到 1TB 以上。主要索引位于记录类型上,它是 an NVARCHAR(100)- 因为当有 5 种记录类型时您需要它 - 它比 aTINYINT和记录 id更有意义- 它是 anNVARCHAR(200)而不是记录的整数键。
它们还涵盖索引,包括键、旧值、新值等——非常广泛。
这是一个旧系统,不幸的是,这种审计的代码无处不在,而不是集中在一个程序中。它无法改变,我们正在经历漫长的微服务重写的痛苦过程。
因此,我将两个索引的填充因子从 100% 降低到 85%。
并且页面拆分变得更糟。我会说大约 3 倍的页面拆分。
这是一个普遍的结果吗?大多数建议说减少填充因子以提高页面拆分性能。我可以理解为什么它会这样做,因为键中数据的宽度。
建议是进一步降低填充因子,还是将其恢复原状?
我使用维护计划重建了我的数据库设置填充因子 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) 我继承了一个应用程序在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? …
我有六个错误日志加上当前。他们在我的 VPS 服务器上占用了我硬盘上 10G 的磁盘空间。这大约是服务器空间的 25%。最大的文件是 6G 并且还在增长。
我如何删除不需要的错误日志并在回收之前减小存档文件的大小。
谢谢,
有没有办法知道我的 SQL SERVER DB 2014 中的兼容性级别是否已更改?
我知道什么是参数嗅探,但这似乎不同,我有一个简单的查询:
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秒执行计划的逻辑和物理读取:
没有物理读取......所以PLE不是原因(也许)。我再次阅读了计划的详细信息:3 次执行和 20 秒的总持续时间,因此每次执行需要 6 秒,但 CPU 时间相对较少: …
sql-server availability-groups sql-server-2014 enterprise-edition
根据 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_ROWS是0在直方图步骤。
有问题的统计信息是 SQL Server 在启用自动创建统计信息选项时创建的列统计信息。我使用的是旧版本的数据库,但使用的是最新补丁 - SQL Server 2014 SP3、CU4+GDR (12.0.6372.1)。
有点不幸的是,由于次优查询计划,我们上周几乎崩溃了。最终结果是大扫描和膨胀的内存授权。使用更高的百分比值重新采样统计数据暂时为我们解决了这个问题,但我很想知道初始语句或已知问题是否存在异常(可能使用跟踪标志解决?)以及如何解决对于我们无法控制采样大小的自动创建的统计数据,我如何防止这种情况再次发生?
对 SQL 卷进行磁盘碎片整理运行 Windows 操作系统级别的计划任务是否被认为是安全的?
我从以前的 DBA 那里继承了 SQL Server 的管理,他们有一个 Windows 计划任务设置来对 SQL Server 数据卷进行碎片整理。我想知道我是否可以安全地禁用这些作业。
sql-server-2014 ×10
sql-server ×9
fill-factor ×2
error-log ×1
identity ×1
monitoring ×1
page-splits ×1
perfmon ×1
permissions ×1
security ×1
statistics ×1
truncate ×1