标签: database-partitioning

Postgresql:在不同机器之间拆分数据库

我想对一个非常大的 PostgreSQL 8.3 数据库进行分区。引用手册

分区可以提供几个好处:

...

很少使用的数据可以迁移到更便宜、速度更慢的存储介质。

将表重新定位到其他媒体或计算机的正确方法是什么?亚当

postgresql database-partitioning

5
推荐指数
1
解决办法
3429
查看次数

SQL从表中选择 - 仅包括特定文件组中的数据

我跟着这篇文章: http://www.mssqltips.com/sqlservertip/1796/creating-a-table-with-horizo​​ntal-partitioning-in-sql-server/ 这在本质上执行以下操作:

  1. 创建具有三个文件组的数据库,将其称为A,B和C.
  2. 创建分区方案,映射到三个文件组
  3. 使用分区方案创建表 - SalesArchival
  4. 在表中插入几行,拆分文件组.

我想执行这样的查询(请原谅我的伪代码)

select * from SalesArchival
where data in filegroup('A')
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者如果没有,我该怎么做呢.

我想要完成的是每天运行批量运行,将超过90天的数据移动到不同的文件组,并仅在"当前"文件组上执行我的前端查询.

sql t-sql sql-server sql-server-2008 database-partitioning

5
推荐指数
1
解决办法
8678
查看次数

使用unix_timestamp从变量进行mysql分区

鉴于这种 :

delimiter //
create procedure setup()
begin
  declare d datetime;
  set d = rounddate(now());

  create table s_time (req_id int not null,
                       ser_id int not null,
                       hel_id int not null,
                       posted int unsigned not null,
                       completed int unsigned not null default 0
                      )
  partition by range (completed) (partition p0 values less than ( unix_timestamp(d) ),
                                  partition p1 values less than ( unix_timestamp(d + interval 1 day) )
                                 );
end//
Run Code Online (Sandbox Code Playgroud)

我明白了:

ERROR 1064 (42000) : Constant, random, or timezone-dependent expression in …

mysql database-partitioning

5
推荐指数
1
解决办法
4156
查看次数

Oracle DB每日分区

我有下表

  CREATE TABLE "METRIC_VALUE_RAW" 
   (    
    "SUBELEMENT_ID" INTEGER NOT NULL , 
    "METRIC_METADATA_ID" INTEGER NOT NULL , 
    "METRIC_VALUE_INT" INTEGER, 
    "METRIC_VALUE_FLOAT" FLOAT(126), 
    "TIME_STAMP" TIMESTAMP  NOT NULL 
   ) ;
Run Code Online (Sandbox Code Playgroud)
  1. 每小时数据将使用sql loader加载到表中.
  2. 我想创建分区,以便每天的数据进入分区.
  3. 在表格中我想存储数据30天.因此,当它超过30天时,最旧的分区应该被删除.

您能否分享一下我如何设计分区的想法?

oracle database-partitioning

5
推荐指数
2
解决办法
7726
查看次数

在SQL Server数据库中查找分区架构定义

我可以访问数据库,我需要知道数据库中的分区方案定义.即我需要知道分区方案名称,它使用哪个分区功能,分配的分区是什么文件组等等...

例如,某人创建了一个分区方案(取自msdn):

CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
TO (test1fg, test2fg, test3fg, test4fg);
Run Code Online (Sandbox Code Playgroud)

然后我想要名称:myRangePS1,函数:myRangePF1和分区:(test1fg,test2fg,test3fg,test4fg),是否是分区ALL

我如何仅使用SQL语句来解决这个问题?我可以使用系统视图sys.partition_scheme查询名称和一些有关分区的数据,但这还不够.

下面显示了找到分区函数定义的类似解决方案:http: //social.msdn.microsoft.com/forums/sqlserver/en-US/d0ce92e3-bf48-455d-bd89-c334654d7e97/how-to-find-分区功能文本施加到一个表

sql sql-server partitioning database-partitioning partition

5
推荐指数
1
解决办法
2万
查看次数

Postgres中按字符串标识符动态表分区

我想按以前未知的值对 Postgres 中的表进行分区。在我的场景中,该值将是 device_id,它是一个字符串。

这是目前的情况:

表 'device_data' - 存储从设备发送的传感器数据,由 DDL 定义:

CREATE TABLE warehouse.device_data (
  id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('device_data_id_seq'::regclass),
  device_id TEXT NOT NULL,
  device_data BYTEA NOT NULL,
--   contains additional fields which are omitted for brevity
  received_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now()
);
Run Code Online (Sandbox Code Playgroud)

表目前拥有数百万条记录,查询需要花费大量时间。大多数查询都包含WHERE device_id='something'子句。

我想到的解决方案是为每个device_id.

Postgres 是否可以为每个创建表分区device_id

我浏览了 Postgres 文档和我发现的几个示例,但它们都使用固定边界来创建分区。我的解决方案需要:

  1. device_id首次遇到new 时动态创建新的表分区
  2. 存储到现有分区,如果device_id已知并且该分区device_id已经存在

我希望使用表分区来完成这项工作,因为它允许跨多个device_ids进行查询。

postgresql partitioning database-partitioning

5
推荐指数
1
解决办法
3814
查看次数

MySQL 分区一个 VARCHAR(60)

我有一个非常大的 5 亿行表,其中包含以下列:

  • id- Bigint- 自动增加主索引。
  • date- Datetime- 每个日期大约 150 万行,删除 1 年之前的数据。
  • uid- VARCHAR(60)- 一个用户ID
  • sessionNumber —— INT
  • start- INT- 开始时间的纪元。
  • end- INT- 结束时间的时代。
  • 更多与此查询无关的列。

的组合uidsessionNumber形成uinque索引。我也有一个日期索引。

由于规模庞大,我想对表进行分区。

我的大多数访问都是按日期进行的,因此按日期范围分区似乎很直观,但由于日期不是唯一索引的一部分,因此这不是一个选项。

选项 1:RANGE PARTITION在日期和BEFORE INSERT TRIGGER

我真的没有经常遇到违反uidsessionNumber唯一性的问题。源数据是一致的,但可以连续两天插入跨越两天的会话,午夜是第一天的结束时间和第二天的开始时间。

我试图了解是否可以删除唯一键并使用触发器

  • 检查前一天是否有具有相同标识符的会话,如果有,
  • 更新结束日期。
  • 取消实际插入。

但是,我不确定是否可以 1) 在同一张表上触发更新。或 2) 防止实际插入。

选项 2:LINEAR HASH PARTITIONUID

我的第二个选择是在 UID 上使用线性哈希分区。但是,我看不到任何使用 VARCHAR 并将其转换为用于HASH分区的 INTEGER …

mysql database-partitioning

5
推荐指数
1
解决办法
4768
查看次数

PostgreSQL 11 中的逻辑复制和声明式分区

我有一个transactions有 2 亿行的普通表。

我决定使用逻辑复制将此表转换为声明式分区。

我在 node1 上创建了一个出版物,如下所示:

CREATE PUBLICATION transactions_pub FOR TABLE transactions;
Run Code Online (Sandbox Code Playgroud)

当我尝试在 node2 上创建订阅时,如下所示:

CREATE SUBSCRIPTION transactions_sub CONNECTION 'host=x.x.x.x port=5432 password=123456 user=replicator dbname=mydbname' PUBLICATION transactions_pub;
Run Code Online (Sandbox Code Playgroud)

返回此错误:

ERROR:  logical replication target relation "public.transactions" is not a table
Run Code Online (Sandbox Code Playgroud)

是否可以使用逻辑复制将常规表复制到声明式分区表?

postgresql replication database-partitioning postgresql-11 logical-replication

5
推荐指数
1
解决办法
845
查看次数

PostgreSQL 11 在索引应该足够的分区表上进行并行 seq 扫描

问题是我一直在一个相当简单的查询上获得 seq 扫描,这是一个非常简单的设置。我究竟做错了什么?

  • Windows Server 2016 上的 Postgres 11
  • 配置更改完成: constraint_exclusion = partition
  • 单个表分区为 200 个子表,每个分区有数十万条记录。
  • 相关字段的索引(假设一个字段也已分区)

这是创建语句:

CREATE TABLE A (
    K int NOT NULL,
    X bigint NOT NULL,
    Date timestamp NOT NULL,
    fy smallint NOT NULL,
    fz decimal(18, 8) NOT NULL,
    fw decimal(18, 8) NOT NULL,
    fv decimal(18, 8) NULL,
    PRIMARY KEY (K, X)
) PARTITION BY LIST (K);

CREATE TABLE A_1 PARTITION OF A FOR VALUES IN (1);
CREATE TABLE A_2 PARTITION OF A FOR VALUES IN …
Run Code Online (Sandbox Code Playgroud)

postgresql query-optimization database-partitioning database-indexes postgresql-11

5
推荐指数
1
解决办法
1654
查看次数

如何在分区的表上创建索引?

如何在 PostgreSQL 11.2 的分区表上创建索引?

我的表是:

CREATE TABLE sometablename
(
    column1 character varying(255) COLLATE pg_catalog."default" NOT NULL,
    column2 integer NOT NULL,
    column3 character varying(255) COLLATE pg_catalog."default" NOT NULL,
    "timestamp" timestamp without time zone NOT NULL,
    avg_val double precision,
    max_val double precision,
    min_val double precision,
    p95_val double precision,
    sample_count double precision,
    sum_val double precision,
    unit character varying(255) COLLATE pg_catalog."default",
    user_id bigint NOT NULL,
    CONSTRAINT testtable_pkey PRIMARY KEY (column1, column2, column3, "timestamp", user_id)
)
PARTITION BY HASH (user_id) 
    WITH (
    OIDS = FALSE …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing database-partitioning postgresql-11

5
推荐指数
1
解决办法
4417
查看次数