NL.和
直接技术咨询?
直接在数据库帮助,支持和支持线上的经验丰富的DBA。我们可以立即看你!035 369 0304.
首页 > 博客

用斜面的索引和分区分析

Martijn钱包 28-5-2020 14:38
类别: 管理,博客,云,DBMS,PostgreSQL,技术,提示

我们经常接触我们是否可以评估数据库环境,库存或调整。今天,将数据库环境设置为不同的可能性,几乎没有数据库环境与其他人进行比较。在此,我们的同事Dimitri已经在他的博客中讲述了“这样你就可以让你的数据库健康健康“。我们的 快速扫描 另一个铁锹变得更深。挑战通常是循环生产环境,您不愿释放各种脚本和分析工具,以防止主要过程受到干扰。这也没有必要不必要地成本。此外,在我们的QuickScan期间,我们在QuickScan期间也被要求在“现在我们在那里的背景下”我们也被要求其他事项。当然,我们喜欢帮助,但同时我们确保我们仍然可以在约定的时间内准备好。在本博客Martijn钱包中,我们的经理讨论了咨询和培训,分区分析,即他在QuickScan期间由亚马逊RDS Postgres数据库环境制成的分区分析。

实质性的估计

一段时间我站在一个挑战中,以获得最好的分区密钥 亚马逊RDS postgres数据库确定。在一个理想的情况下,我们将为这个项目开始一个项目,以便我们可以在和平和在发展环境中对此进行骚乱来调查这一点。但在QuickScan期间,顾客在尽可能短的时间内最佳估计。

PostgreSQL. 有许多可用于各种情况的扩展。类似地确定最佳分区密钥。但是我的一部分挑战是由此确定的 并非所有的扩展 在Amazon RDS PostgreSQL上得到支持。 hyp 但是,它得到支持,我将其解决如下:

  • 通过本地流浪者节奏的重点11。
  • 然后我下载了 测试版 从缺口,因为它有分区。
  • 我已经安装了软件并尝试构建扩展,但需要一些额外的包和变量:

tar xvfz 2.0.0beta.tar.gz
cd hypopg-2.0.0beta/
export PATH=$PATH:/usr/pgsql-11/bin/
yum install postgresql11-devel -y
yum install postgresql11-libs -y
yum install epel-release -y
yum install centos-release-scl -y
yum install postgresql11-devel -y
yum install gcc -y
make install

  • 现在,扩展准备好使用,可以在用户数据库中打开:

CREATE EXTENSION hypopg;

在我的特定情况下,我想在使用名称user_id的列上测试分区。我首先确保该列是每个唯一约束的一部分,以及主要键。在大多数情况下,我必须将列添加到唯一索引和主键。以下步骤是:

select hypopg_partition_table('shop_order','PARTITION BY RANGE(user_id)');
select tablename from hypopg_add_partition('shop_order_1_10000', 'PARTITION OF shop_order FOR VALUES FROM (1) TO (10000)');
select tablename from hypopg_add_partition('shop_order_10000_20000', 'PARTITION OF shop_order FOR VALUES FROM (10000) TO (20000)');
....
SELECT * FROM hypopg_create_index('CREATE INDEX ON shop_order (user_id)') ;

开始解释或解释分析将进行分区洞察力。

例子:

SELECT "shop_order"."uuid" FROM "shop_order" WHERE ("shop_order"."user_id" = 39626 AND "shop_order"."processed_at" IS NULL);

This query has the following current execution plan:
Bitmap Heap Scan on shop_order (cost=51.42..4297.60 rows=490 width=16)
     Recheck Cond: ((user_id = 39626))
     Filter: (processed_at IS NULL)
     -> Bitmap Index Scan on shop_order_list_idx (cost=0.00..51.29 rows=1073 width=0)
            Index Cond: ((user_id = 39626))

With partitioning on user_id the query plan would look like:
Append (cost=0.03..8.06 rows=1 width=16)
      -> Index Scan using btree_shop_order_user_id_order_cr on shop_order shop_order_30000_40000 (cost=0.03..8.05 rows=1 width=16)
              Index Cond: ((user_id = 39626))
              Filter: (processed_at IS NULL)

在实际环境中模拟,对该环境的直接影响

在实时运行的生产环境中,通常难以实现实时更改或进行分区分析。这需要很多时间,你根本没有那个。使用kepopg,您可以模拟“会话绑定”而不会对实际环境产生直接影响,同时使用该实际环境。因此,您可以在不需要响应开发环境的情况下获得要分析的内容的现实图片。

使用彼此的力量

如果要在另一个情况下创建索引分析,则它以同样的方式工作。低通道是一个精彩的工具,并说明了如何在具有开源的宝贵社区中工作。通过举起,您可以使用可用的工具和彼此的电源。

知道更多吗?

没有义务就保证了 接触 如果您想在可用的PostgreSQL扩展中详细介绍,例如,您想更详细地云带,或者您对快速扫描感兴趣。

返回博客概述

回复

Optimada使用cookie来记住您的兴趣的某些偏好和调整职位空缺。