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 / 问题 / 239991
Accepted
Joe Hayes
Joe Hayes
Asked: 2019-06-07 10:13:51 +0800 CST2019-06-07 10:13:51 +0800 CST 2019-06-07 10:13:51 +0800 CST

在 DB2 LUW 中,我什么时候应该使用 4K、8K 或 16K 表空间,而不是仅仅创建一个 32K 表空间并完成它?

  • 772

我们在 Windows 和 Linux 系统上使用 DB2 LUW 10.5 和 11.1,以防它与他的回答相关。

问题:在某个时候使用 4K 而不是 32K 是正确的吗?如果是这样,为什么?(当它可以使用时性能会更好吗?)或者,它只是史前时代的遗留附属物,当时 4K 只是页面大小?

背景:当我创建 DB2 数据库时,我总是只创建一个 4K、8K、16K 和 32K 表空间和关联的缓冲池。

我的经理在这方面向我提出挑战。(对他有好处 - 我应该知道这一点!)他认为我们应该只创建一个 32K 表空间并完成它。

我找不到任何可以告诉我的信息,例如,当行大小允许时,我们应该使用 4K 而不是 32K,因为 XYZ。它告诉我我可以这样做,但不是那样/什么时候应该这样做。

performance db2
  • 3 3 个回答
  • 1094 Views

3 个回答

  • Voted
  1. Best Answer
    mustaccio
    2019-06-11T15:31:41+08:002019-06-11T15:31:41+08:00

    这是一个很好的问题,但遗憾的是,答案值得在一本不存在的书中写一整章。您链接到的 Ember Crooks 文章是一个很好的概述;我将在这里添加一些在决定表空间页面大小时可能需要考虑的随机因素。

    TL; 博士。

    考虑以下几点,选择一种最适合您的数据的页面大小。如果您的性能测试显示可以通过将某些表移动到具有不同页面大小的表空间来解决问题,请明智地执行此操作。

    决定因素。

    正如您所提到的,表格行宽决定了容纳它们所需的最小页面大小。尽管您总是想要“适用于您的数据的最小的”,但这并不意味着您总是想要“适用于您的数据的最小的”。

    首先,通常的论点“避免不必要的 I/O”和“一次处理更少的数据”与较小的页面大小可能有点错位。如果您的表空间容器位于 ZFS 文件系统上的 LVM 卷上的 VMWare 虚拟磁盘上的 Ceph 卷上的未知数量的可能使用旋转磁盘或 SSD 的 RAID6 设备上,您真的知道您的 4K 有多少物理 I/O (或32K)读请求会引起什么?

    如果您的工作负载创建了无法通过其他方式解决的表空间热点(大多数 I/O 请求转到有限数量的页面),那么较小的页面大小肯定会有所帮助。在这种情况下,较小的页面可以提高缓冲池效率并减少代理之间竞争访问同一页面的页面闩锁等待。另一方面,较小的页面大小意味着更长的 LRU 链,因此可能会降低页面清理效率。

    也有更大页面大小的论据。

    存在 LOB 数据。

    通常 LOB 数据存储在表行之外的单独数据结构中,这些数据结构具有以下几个性能缺点:

    • 您只能通过绕过数据库缓冲池的同步直接读写来访问它们;如果为表空间启用了缓存,则唯一可用的缓存是底层文件系统的缓存;直接读取也没有利用页面预取。
    • 由于 LOB 没有加载到缓冲池中,重复访问相同的数据会导致重复的直接读取请求。
    • 即使启用了表压缩,它们也不会被压缩。

    如果您的大多数 LOB 值都相对较小,并且在给定较大页面大小的情况下可以放入行本身(通常是这种情况),您可以将它们内联存储,从而减轻这些缺点。

    压缩。

    较大的页面大小提高了自适应(页面级)压缩的效率。通常,数据压缩带来的 I/O 减少超过其 CPU 成本。

    不要忘记临时表空间。

    即使可以将每个表单独放置到 4K 表空间中,也可能需要具有更大页面大小的系统临时表空间(和相应的缓冲池)。如果查询连接来自两个或多个表的低于 4K 的行,则结果集宽度可能会超过 4K 限制,如果需要溢出,则需要适当大小的表空间。

    值得一提的是,“以防万一”创建每个可能页面大小的表空间并不是一个好主意,因为正如您所说,每个都需要一个专用的缓冲池,并且多个缓冲池,除非必要,几乎总是比一个大的。

    • 5
  2. Joe Hayes
    2019-06-07T10:30:28+08:002019-06-07T10:30:28+08:00

    我终于找到了正确的谷歌搜索,并在 Ember Crooks ( https://datageek.blog/2013/07/09/db2-luw-what-is-a-page/ ) 的一篇帖子中找到了一条注释,上面写着更小页面是 OLTP 或电子商务网站的首选,因此您处理的数据量较小。那我想这就是答案。使用适用于您的数据的最小的,认识到您希望在页面上获得多行。

    我将把它留下答案,而不是仅仅删除它,以防其他人来寻找它。

    • 2
  3. Mark Barinstein
    2019-06-07T10:39:07+08:002019-06-07T10:39:07+08:00

    这种选择通常取决于系统中的工作负载类型。简要地:

    事务系统通常每个请求通过几条记录读取数据。Db2 中最小的存储块是数据页。要读取单个数据行,Db2 必须从磁盘读取整个数据页。典型请求所需的行通常随机驻留在数据页中,因此,磁盘 IO 的数量接近此类系统中典型查询返回的记录数量并不罕见。因此,每 1 行/IO 读取是 4K 与 32K - 对于较大的页面大小返回相同结果集的更多不必要的 IO。

    DSS 系统通常会扫描大量数据——通常每个 IO 请求通过更大的读取可以更有效地完成。

    • 2

相关问题

  • 您如何针对繁重的 InnoDB 工作负载调整 MySQL?

  • 解释计划中的 HSJOIN 是什么意思?

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

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

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