页级清理
数据库管理领域是一个由性能、可靠性和效率交织而成的复杂结构。在这一生态系统的核心,PostgreSQL 作为一种健壮的开源关系型数据库系统脱颖而出,因其 ACID 合规性、可扩展性和高级功能而备受青睐。然而,即使在 PostgreSQL 这台精密运转的机器中,也存在一些需要深入理解的细微机制,它们若处理不当,将显著影响性能。其中一种机制便是 VACUUM 过程,特别是其在页级上的操作。本文深入探讨了页级清理的内部机制,以及为何这对数据库管理员和开发人员都至关重要。
理解 PostgreSQL 的页级存储
在深入 VACUUM 的机制之前,理解 PostgreSQL 如何存储数据至关重要。与以大块分配空间的文件系统不同,PostgreSQL 将数据存储分解为页——在大多数系统上,页的大小通常为 8KB。每页包含多个元组(行),当更新或删除一行时,PostgreSQL 不会立即将其移除。相反,它会将空间标记为空闲,并将该行保留在原地,直到 VACUUM 过程来回收它。
这种行为被称为“行级锁定”,它避免了写操作时的锁需求,从而显著提高了并发性。然而,随着时间的推移,这可能导致一个称为“碎片化”的问题。随着行的更新和删除,页内的空闲空间变得分散,即使总空闲空间足够,新行也无法放入这些“空洞”中。这种碎片化会降低性能,因为数据库可能需要读取多个页才能为新行找到空间,或者不得不分配新页,增加 I/O。
VACUUM 的作用
这时就引入了 VACUUM,它是整理数据库内部混乱的过程。VACUUM 主要做两件事:
- 回收空间:通过清理已更新或删除的元组(行),
VACUUM 压缩页,减少碎片化,并在同一页内为新的行腾出更多空间。
- 防止表膨胀:如果没有
VACUUM,表会无限增长,占用越来越多的磁盘空间。VACUUM 通过移除旧元组并使其可供重用来防止这种情况。
VACUUM 有两种形式:VACUUM FULL 和 VACUUM ANALYZE。VACUUM FULL 是一种更激进的形式,通过重建整个表来回收所有空闲空间,这可以显著减小表的大小。然而,它需要独占表锁,因此在过程中不兼容写操作。另一方面,VACUUM ANALYZE 则不那么激进,仅在页级别回收空间,并更新查询规划器使用的统计信息。它允许写操作继续,但不像 VACUUM FULL 那样大幅减小表的大小。
页级清理:核心所在
页级清理是 VACUUM 在页级别上回收空间的过程。当发出 VACUUM 命令时,PostgreSQL 会扫描受影响表的页,识别死元组,并将其标记为删除。然后,它会压缩页,将活元组合并在一起,填补死元组留下的空白。这个过程会重复应用于表中的每一页,逐步减少碎片化并回收空间。
理解页级清理的关键在于认识到它并非一刀切的操作。PostgreSQL 采用多种策略来确定何时以及如何清理页:
- 自动清理:PostgreSQL 的自动清理功能会根据各种阈值自动触发
VACUUM 操作,例如页上死元组的百分比或自上次清理以来的插入数量。这有助于在不进行人工干预的情况下维持性能。
- 手动清理:数据库管理员可以根据需要手动发出
VACUUM 命令来清理表和索引。这对于经历不频繁但重大变化的表,或者对性能至关重要的表非常有用。
VACUUM FULL:如前所述,VACUUM FULL 可以用于回收所有空闲空间,但它需要独占锁,因此对于经常访问的表不太实用。
示例:页级清理实战
考虑一个具有以下结构的表:
CREATE TABLE example (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
deleted BOOLEAN DEFAULT FALSE
);
在插入和删除行后,表的页可能会变得碎片化。要执行页级清理,您需要发出以下命令:
VACUUM example;
然后,PostgreSQL 会扫描 example 表的每一页,识别并删除标记为删除的元组(deleted 为 TRUE 的行),并压缩页。结果是,表碎片化减少,并为新行腾出更多空间。
页级清理的影响
理解页级清理至关重要,原因如下:
- 性能:碎片化会显著降低查询性能,因为数据库可能需要读取多个页才能为新行找到空间,或者不得不分配新页,增加 I/O。通过减少碎片化,
VACUUM 提高了性能。
- 存储:如果没有
VACUUM,表会无限增长,占用越来越多的磁盘空间。这可能导致存储限制和成本增加,尤其是在存储计费的云环境中。
- 数据完整性:
VACUUM 通过确保删除死元组并更新表的统计信息,帮助维护数据完整性。这对于经常被访问和修改的表尤为重要。
案例研究:忽视的代价
想象一个高流量的电子商务数据库,其中有一个关键的 orders 表。随着时间的推移,如果没有定期的 VACUUM 操作,表会变得高度碎片化。当新订单被创建时,数据库必须读取多个页才能为新行找到空间,导致 I/O 增加和响应时间变慢。客户体验更长的等待时间,系统难以处理峰值负载。
通过实施定期的 VACUUM 计划,数据库管理员可以防止这种情况。自动清理设置根据表的使用模式触发 VACUUM 操作,确保碎片化得到控制。结果是,系统响应更迅速,能够在不降低性能的情况下处理峰值负载。
页级清理的最佳实践
为了最大限度地发挥页级清理的效益,请考虑以下最佳实践:
- 启用自动清理:对于大多数表,启用自动清理是最佳方法。PostgreSQL 的自动清理功能旨在自动处理大部分工作,减少人工干预的需求。
```sql
SELECT * FROM pg_database WHERE datname = 'your_database';
SELECT * FROM pg_catalog.pg_tables WHERE schemaname = 'public';
SELECT * FROM pg_catalog.pg_class WHERE relkind = 'r' AND relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes
Vacuum at the Page Level
The world of database management is a complex tapestry woven with threads of performance, reliability, and efficiency. At the heart of this ecosystem, PostgreSQL stands out as a robust, open-source relational database system cherished for its ACID compliance, extensibility, and advanced features. Yet, even within the well-oiled machinery of PostgreSQL, there are nuanced mechanisms that can significantly impact performance if not properly understood. One such mechanism is the VACUUM process, particularly its operation at the page level. This deep dive explores the inner workings of page-level vacuuming and why it matters to database administrators and developers alike.
Understanding PostgreSQL's Page-Level Storage
Before diving into the mechanics of VACUUM, it's essential to grasp how PostgreSQL stores data. Unlike file-based systems that allocate space in large chunks, PostgreSQL breaks down data storage into pages—typically 8KB in size on most systems. Each page contains multiple tuples (rows), and when a row is updated or deleted, PostgreSQL doesn't immediately remove it. Instead, it marks the space as free, leaving the row in place until the VACUUM process comes along to reclaim it.
This behavior, known as "row-level locking," prevents the need for locks during writes, which can significantly improve concurrency. However, over time, this can lead to a problem called "fragmentation." As rows are updated and deleted, the free space within a page becomes scattered, creating "holes" where new rows cannot fit even if there is enough total free space. This fragmentation can degrade performance, as the database may need to read multiple pages to find the space for a new row or may have to resort to allocating new pages, increasing I/O.
The Role of VACUUM
Enter VACUUM, the process that tidies up the database's internal mess. VACUUM does two primary things:
- Reclaims space: By cleaning up dead tuples (rows that have been updated or deleted),
VACUUM compacts pages, reducing fragmentation and making more space available for new rows within the same page.
- Prevents table bloat: Without
VACUUM, tables can grow indefinitely, consuming more and more disk space. VACUUM prevents this by removing old tuples and making space available for reuse.
VACUUM comes in two flavors: VACUUM FULL and VACUUM ANALYZE. VACUUM FULL is a more aggressive form that reclaims all free space by rebuilding the entire table, which can significantly reduce its size. However, it requires an exclusive lock on the table, making it incompatible with writes during the process. VACUUM ANALYZE, on the other hand, is less aggressive, only reclaiming space on a per-page basis and updating statistics used by the query planner. It allows writes to continue but doesn't reduce the table's size as much as VACUUM FULL.
Page-Level Vacuuming: The Heart of the Matter
Page-level vacuuming is the granular process by which VACUUM reclaims space on a per-page basis. When a VACUUM command is issued, PostgreSQL scans through the pages of the affected table, identifies dead tuples, and marks them for removal. It then compacts the page, moving live tuples together to fill the gaps left by the dead tuples. This process is repeated for each page in the table, gradually reducing fragmentation and reclaiming space.
The key to understanding page-level vacuuming is recognizing that it's not a one-size-fits-all operation. PostgreSQL employs several strategies to determine when and how to vacuum a page:
- Autovacuum: PostgreSQL's autovacuum feature automatically triggers
VACUUM operations based on various thresholds, such as the percentage of dead tuples on a page or the number of insertions since the last vacuum. This helps maintain performance without manual intervention.
- Manual vacuuming: Database administrators can manually issue
VACUUM commands to clean up tables and indexes as needed. This is useful for tables that experience infrequent but significant changes or for tables that are critical to performance.
- VACUUM FULL: As mentioned earlier,
VACUUM FULL can be used to reclaim all free space but requires an exclusive lock, making it less practical for frequently accessed tables.
Example: Page-Level Vacuum in Action
Consider a table with the following structure:
CREATE TABLE example (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
deleted BOOLEAN DEFAULT FALSE
);
After inserting and deleting rows, the table's pages may become fragmented. To perform a page-level vacuum, you would issue the following command:
VACUUM example;
PostgreSQL would then scan each page of the example table, identify and remove dead tuples (rows where deleted is TRUE), and compact the page. The result is a table with reduced fragmentation and more available space for new rows.
The Implications of Page-Level Vacuuming
Understanding page-level vacuuming is crucial for several reasons:
- Performance: Fragmentation can significantly degrade query performance, as the database may need to read multiple pages to find space for a new row or may have to allocate new pages, increasing I/O. By reducing fragmentation,
VACUUM improves performance.
- Storage: Without
VACUUM, tables can grow indefinitely, consuming more and more disk space. This can lead to storage constraints and increased costs, especially in cloud-based environments where storage is billed.
- Data integrity:
VACUUM helps maintain data integrity by ensuring that dead tuples are removed and that the table's statistics are up to date. This is particularly important for tables that are frequently accessed and modified.
Case Study: The Cost of Neglect
Imagine a high-traffic e-commerce database with a critical orders table. Over time, without regular VACUUM operations, the table becomes heavily fragmented. When a new order is placed, the database has to read multiple pages to find space for the new row, leading to increased I/O and slower response times. Customers experience longer wait times, and the system struggles to handle peak loads.
By implementing a regular VACUUM schedule, the database administrator can prevent this scenario. Autovacuum settings are tuned to trigger VACUUM operations based on the table's usage patterns, ensuring that fragmentation is kept in check. The result is a more responsive system that can handle peak loads without performance degradation.
Best Practices for Page-Level Vacuuming
To maximize the benefits of page-level vacuuming, consider the following best practices:
- Enable Autovacuum: For most tables, enabling autovacuum is the best approach. PostgreSQL's autovacuum feature is designed to handle the bulk of the work automatically, reducing the need for manual intervention.
```sql
SELECT * FROM pg_database WHERE datname = 'your_database';
SELECT * FROM pg_catalog.pg_tables WHERE schemaname = 'public';
SELECT * FROM pg_catalog.pg_class WHERE relkind = 'r' AND relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_tables WHERE relname = 'your_table';
SELECT * FROM pg_stat_user_indexes WHERE relname = 'your