有谁知道像这个页面https://columnscore.com/这样的工具,可以在其中确定表是否适合行或页面压缩。
我也试图了解压缩的好处。我一直在阅读它,但仍然有这些问题。
- 压缩会使更多的 8KB 适合缓冲区缓存吗?数据何时变得未压缩,即在选择中?
- 备份会变得更快吗?
- 压缩广告cpu开销的原因是因为例如插入需要在插入之前压缩吗?
- 是否有充分的理由在不调查表的使用方式的情况下压缩表(即静态与易失)。
一位同事已经开始压缩很多表(页)。我不知道这个决定背后的分析。我知道我们有时会在某些高峰时段等待资源信号量。我真的不认为他知道自己在做什么。我可以看到我们的 sos 调度程序产量等待略有上升。
我认为压缩造成的危害更大,而且现在维护任务似乎更多(例如备份、检查数据库...)。
工具推荐在这里是题外话,主要是因为可以有任意数量的答案,而且它们往往很快就会过时。也就是说,SQL Server 确实提供了一个内置过程来估计压缩所节省的空间,
sp_estimate_data_compression_savings
. 它不会尝试预测压缩对于整个工作负载是否是一个不错的选择,而只是预测是否可以节省空间。它本质上是一个包装器TABLESAMPLE
,创建一个新对象并从那里推断出全尺寸。如果压缩是有效的,那么是的。页面在缓冲池中保持压缩。
当存储引擎级别之上的 SQL Server 组件需要处理数据时,数据会被解压缩。例如,索引扫描会将解压缩的数据呈现给执行计划中的过滤器运算符。
下面的堆栈跟踪显示了在将数据呈现给查询处理器之前解压缩的一个示例(突出显示存储引擎代码):
您可以在Sunil Agarwal(当时是 SQL Server 工程团队的成员)的Compression Strategies中了解更多信息。
许多人报告说他们这样做了。直觉是持久存储上的压缩数据需要更少的 I/O 来读取备份。如果您的实例通常受 CPU 限制,您可能会看到较慢的备份,因为解压缩所需的额外处理器工作超过了 I/O 加速。
当然,压缩会增加 CPU 开销,但这通常是可以管理的,因为选择数据压缩算法是为了提高效率而不是最终大小。请注意,数据压缩和备份压缩非常不同。备份压缩基于 gzip 压缩的一种变体,旨在以更多的 CPU 使用为代价实现非常好的大小缩减。
每次插入和更新都会产生至少一些数据压缩开销。
PAGE
这在压缩时更为明显。SQL Server 也可能会在对该页面进行一定数量的修改后尝试重新压缩整个页面。这是主观的,取决于您当地的优先事项。一般而言,可以选择在没有详细测试的情况下进行压缩,这样可以明显节省大量(和必要的)空间,并且系统有足够的空闲处理器时间可用。
您应该与您的同事讨论理由。
对于您的第一个问题,您可以使用一个系统存储过程:-
sp_estimate_data_compression_savings
https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-estimate-data-compression-savings-transact-sql?view=sql-server-ver15
对于您的其他问题
1 由于数据是压缩的,因此您可以在相同的内存大小中容纳更多信息,因此在与应用程序交换数据时会对其进行解压缩。请参阅https://learn.microsoft.com/en-us/sql/relational-databases/data-compression/data-compression?view=sql-server-ver15
2 不,可能不会
3 是
4 你的问题是一个引导性问题,你能想到有多少事情是不经调查就应该做的?
如果您想了解他们为什么做某事,您可能应该与您的同事交谈,某些任务过度运行的原因可能有很多。