介绍
欢迎对Postgresql的内部设备进行激动人心的探索,我们将探索两个有趣的功能:仅堆仅元组(热)和仅索引扫描。这些功能与索引扫描操作密切相关,索引扫描操作是PostgreSQL的基本方面。我们将深入研究这些功能的复杂细节,它们的实现以及它们对数据库性能的影响。
作为最先进的开源数据库管理系统之一,PostgreSQL以其稳健性,灵活性和遵守标准而闻名。它为开发人员提供了广泛的功能,以构建可扩展和高效的应用程序。在这些功能中,PostgreSQL的索引和扫描方法在提高其性能和效率方面起着至关重要的作用。在此博客结束时,您将对仅热扫描和索引扫描有一个全面的了解,使您有效地优化了PostgreSQL数据库。因此,让我们开始这一旅程并揭示这些功能的内部工作!
热量概述只有元素(热)
堆仅元组(热)是PostgreSQL 8.3中介绍的功能,以优化在表和索引中使用更新的行与与旧行的同一表页面上时的使用。它的主要目的是解决过度存储消耗的问题,并增加了一排更新后出现的I/O操作。
在PostgreSQL中,当行更新时,将创建并存储在表中的新版本,从而增加了存储要求。此外,如果更新的行具有关联的索引,还会创建一个新的索引条目。此过程可能是资源密集型和影响数据库性能。
HOT可以通过消除在更新行更新时创建新索引条目的必要性,只要可以将更新的行与旧行同一表页面中容纳。通过这样做,HOT可大大减少存储消耗,并最大程度地减少更新索引所需的I/O操作数量。
在职的
使用堆仅使用堆(热)在PostgreSQL中更新一行时,并且更新的行与旧行一起存储在同一表页面中时,未插入相应的索引元组。相反,设置了某些标志来指示更新。
在热门更新期间,heap_hot_updated位设置在旧元组的T_INFOMASK2字段中,表明该元组已使用HOT进行了更新。此外,在新元组的T_INFOMASK2字段中设置了HEAP_ONLY_TUPLE位,表明此元组是热门更新的结果,并且没有其自己的索引条目。
通过使用这些标志,PostgreSQL可以跟踪更新的元组,而无需创建新的索引条目。这种方法大大减少了索引和表页面的消耗,从而提高了性能。它减少了由更新引起的索引元组插入的数量,并减少了真空处理的工作量。
通过利用热热,PostgreSQL通过在更新过程中降低索引元组插入的频率来优化性能,并最大程度地减少对真空处理的需求。这导致了更有效的资源利用和改善的总体数据库性能。
热性能影响
Hot in Postgresql提供了重大的性能改进,通过减少创建新索引条目并最大程度地减少真空处理的必要性。
在PostgreSQL中,真空流程负责收回由“ Dead”元素占用的存储,它们是不再需要的更新行的旧版本。此过程可能是资源密集型的,尤其是对于具有频繁更新的数据库。通过减少真空过程必须处理的单元数量,HOT减少了真空的工作量并改善了数据库的整体性能。
此外,HOT消除了新的索引条目,还可以节省大量存储空间。这对于具有大表和众多索引的数据库尤其有利,因为重复使用用于更新行的现有索引条目可减少对额外存储的需求。通过优化存储利用,HOT有助于提高PostgreSQL数据库的性能和效率。
总的来说,HOT能够最大程度地减少创建新索引条目并减少真空过程中的工作量的能力,从而改善了性能和资源利用率,使其成为PostgreSQL数据库的宝贵功能,尤其是在频繁更新和大量更新的情况下数据。
仅索引扫描的概述
仅索引扫描是PostgreSQL 9.2中介绍的功能强大的功能,可通过降低I/O成本来优化数据库性能。
在传统的索引扫描中,PostgreSQL利用索引在表中定位行,然后从表本身检索行。此过程涉及两个单独的I/O操作:一个用于读取索引,另一个用于读取相应的表数据。
仅索引扫描通过消除索引密钥中存在的所有所需条目时消除访问表的必要性来改善此过程。在这种情况下,PostgreSQL可以直接从索引中获取所需的数据,从而消除了需要访问表的额外I/O操作的需求。
在职的
在PostgreSQL中仅索引扫描时,执行Select语句时,数据库首先验证是否可以在索引密钥中找到所有目标条目。如果存在,PostgreSQL可以直接从索引中获取所需的数据,而无需访问关联的表页。
但是,执行选定语句的关键方面是确保返回的元组的可见性。元组可见性取决于创建或修改元组和当前交易的交易。在常规的索引扫描中,PostgreSQL通过访问表本身来检查元组可见性。但是,在仅索引扫描中,无法访问表。那么,PostgreSQL在这种情况下如何检查元组可见性?
答案在于可见性图,该图是PostgreSQL使用的数据结构,用于跟踪表中元组的可见性。如果在特定页面上存储的所有元组在可见性图中标记为可见,则PostgreSQL可以依靠索引元组的密钥,并且无需访问相应的表页面即可检查可见性。通过以这种方式利用可见性图,访问表页并执行其他I/O操作的需求大大减少了。
通过使用可见性图来确定元组可见性,仅索引扫描通过最小化I/O成本来优化性能。这种简化的方法提高了数据库操作的效率,从而使PostgreSQL可以直接从索引中获取必要的数据并避免在可能的情况下访问表页的开销。
仅索引扫描性能影响
通过降低与访问表页面相关的I/O成本,仅在PostgreSQL中进行索引可提供实质性的性能。这种优化对于具有大表和众多索引的数据库尤其有利,因为在这种情况下,I/O成本可能是一个重要的性能瓶颈。
通过消除访问表页面的需要,仅索引扫描不仅提高了查询执行速度,还可以在存储空间中大量节省。对于存储资源有限的数据库,此好处尤其有价值,因为它允许更有效地利用可用空间。
结论
PostgreSQL的堆仅元组(热)和仅索引扫描是强大的功能,在增强数据库性能中起着至关重要的作用。 HOT通过在同一表页面中有效存储更新的行来优化索引和表中页面的利用,从而减少了对资源密集型真空处理的需求。另一方面,仅索引扫描通过直接利用索引密钥来获取数据,绕过索引键中所有目标条目时访问相应的表页面的必要性来最大程度地减少I/O成本。
通过对这些功能有全面的了解,数据库管理员和系统开发人员可以有效地优化其PostgreSQL数据库,以提高性能和效率。这些功能体现了PostgreSQL的鲁棒性和适应性,强调了为什么它仍然是全球最受欢迎且广泛采用的开源数据库管理系统之一。
参考
如果要进一步探索,请单击下面的链接。
Chapter-7 The Internals of PostgreSQL