AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 292116
Accepted
xhr489
xhr489
Asked: 2021-05-24 11:28:36 +0800 CST2021-05-24 11:28:36 +0800 CST 2021-05-24 11:28:36 +0800 CST

测试表何时可以压缩(行或页)

  • 772

有谁知道像这个页面https://columnscore.com/这样的工具,可以在其中确定表是否适合行或页面压缩。

我也试图了解压缩的好处。我一直在阅读它,但仍然有这些问题。

  1. 压缩会使更多的 8KB 适合缓冲区缓存吗?数据何时变得未压缩,即在选择中?
  2. 备份会变得更快吗?
  3. 压缩广告cpu开销的原因是因为例如插入需要在插入之前压缩吗?
  4. 是否有充分的理由在不调查表的使用方式的情况下压缩表(即静态与易失)。

一位同事已经开始压缩很多表(页)。我不知道这个决定背后的分析。我知道我们有时会在某些高峰时段等待资源信号量。我真的不认为他知道自己在做什么。我可以看到我们的 sos 调度程序产量等待略有上升。

我认为压缩造成的危害更大,而且现在维护任务似乎更多(例如备份、检查数据库...)。

sql-server compression
  • 2 2 个回答
  • 412 Views

2 个回答

  • Voted
  1. Best Answer
    Paul White
    2021-05-26T03:55:35+08:002021-05-26T03:55:35+08:00

    有谁知道像这个页面https://columnscore.com/这样的工具,可以在其中确定表是否适合行或页面压缩。

    工具推荐在这里是题外话,主要是因为可以有任意数量的答案,而且它们往往很快就会过时。也就是说,SQL Server 确实提供了一个内置过程来估计压缩所节省的空间,sp_estimate_data_compression_savings. 它不会尝试预测压缩对于整个工作负载是否是一个不错的选择,而只是预测是否可以节省空间。它本质上是一个包装器TABLESAMPLE,创建一个新对象并从那里推断出全尺寸。

    压缩会使更多的 8KB 适合缓冲区缓存吗?

    如果压缩是有效的,那么是的。页面在缓冲池中保持压缩。

    数据何时变得未压缩,即在选择中?

    当存储引擎级别之上的 SQL Server 组件需要处理数据时,数据会被解压缩。例如,索引扫描会将解压缩的数据呈现给执行计划中的过滤器运算符。

    SQL Server 主要组件

    下面的堆栈跟踪显示了在将数据呈现给查询处理器之前解压缩的一个示例(突出显示存储引擎代码):

    堆栈跟踪

    您可以在Sunil Agarwal(当时是 SQL Server 工程团队的成员)的Compression Strategies中了解更多信息。

    备份会变得更快吗?

    许多人报告说他们这样做了。直觉是持久存储上的压缩数据需要更少的 I/O 来读取备份。如果您的实例通常受 CPU 限制,您可能会看到较慢的备份,因为解压缩所需的额外处理器工作超过了 I/O 加速。

    压缩广告cpu开销的原因是因为例如插入需要在插入之前压缩吗?

    当然,压缩会增加 CPU 开销,但这通常是可以管理的,因为选择数据压缩算法是为了提高效率而不是最终大小。请注意,数据压缩和备份压缩非常不同。备份压缩基于 gzip 压缩的一种变体,旨在以更多的 CPU 使用为代价实现非常好的大小缩减。

    每次插入和更新都会产生至少一些数据压缩开销。PAGE这在压缩时更为明显。SQL Server 也可能会在对该页面进行一定数量的修改后尝试重新压缩整个页面。

    是否有充分的理由在不调查表的使用方式的情况下压缩表(即静态与易失)。

    这是主观的,取决于您当地的优先事项。一般而言,可以选择在没有详细测试的情况下进行压缩,这样可以明显节省大量(和必要的)空间,并且系统有足够的空闲处理器时间可用。

    一位同事已经开始压缩很多表(页)。我不知道这个决定背后的分析。

    您应该与您的同事讨论理由。

    • 9
  2. Stephen Morris - Mo64
    2021-05-24T12:07:47+08:002021-05-24T12:07:47+08:00

    对于您的第一个问题,您可以使用一个系统存储过程:-

    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 你的问题是一个引导性问题,你能想到有多少事情是不经调查就应该做的?

    如果您想了解他们为什么做某事,您可能应该与您的同事交谈,某些任务过度运行的原因可能有很多。

    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve