PostgreSQL Plus Advanced Server一括作成パーティション表書き込み億レベルデータインスタンス
13422 ワード
現在の状況:大きなテーブルのデータ量はすでに2億件に近い私の解決構想:n*100個のパーティションテーブルを作成し、各パーティションテーブルを異なるtablespaceに置くという利点:1、まずこのレベルのデータテーブルの性能が向上する2、データ管理がより科学的である3、生産メンテナンスプロセスのトラブルシューティング便利な実験環境VM Ware ESXiRedhat 6.3 64 bitPostgreSQL 9.2/9.3メモリ:2 G実装方法(Oracleにも適用)
1、試験表の作成
2、時間が既にパーティション条件で、300個のパーティションテーブルを作成するプロセス
3、パーティション表の作成
DEMOテスト1、書き込みデータの作成手順
2、書き込みデータの保存プロセスを実行する
3、書き込みデータのデータ量をチェックする
必要に応じて、パーティションテーブルの作成やデータの書き込みの時間データを記録できます.
1、試験表の作成
1 /**
2 300 , 5
3 */
4 -- -------------------- step1 : CREATE TABLE--------------------
5 DROP TABLE parttest;
6 CREATE TABLE parttest (some_test TEXT,some_tstimestamptz TEXT,random_value INT4, p_condition DATE)
7 PARTITION BY RANGE(p_condition)
8 (
9 PARTITION p_2013_09_02_and_early VALUES LESS THAN ('2013-09-03')
10 );
2、時間が既にパーティション条件で、300個のパーティションテーブルを作成するプロセス
1 -- -------------------- step2 : CREATE PARTITION PROCEDUCE --------------------
2 CREATE OR REPLACE PROCEDURE create_partition_withindex() AS
3
4 DECLARE
5 tblname varchar := 'parttest';
6 tblname_prefix varchar := 'p_condition';
7 part_tbl_name varchar;
8 current_part_name varchar;
9 sql_addpartition_cmd varchar;
10
11 BEGIN
12 -- POPULATE SQL COMMAND
13 -- PARTITION TABLE'S NAME IS LIKE "TABLENAME_p_2019_12_31"
14 FOR j IN 1..300 LOOP
15 current_part_name := to_char(current_date + j,'YYYY_MM_DD');
16 part_tbl_name := tblname_prefix || '_p_' || current_part_name;
17
18 -- POPULATE SQL COMMAND STRING
19 sql_addpartition_cmd = 'ALTER TABLE ' || tblname || ' ADD PARTITION p_' || current_part_name || ' VALUES LESS THAN (''' || (current_date + j + 1) || ''');';
20 DBMS_OUTPUT.PUT_LINE(sql_addpartition_cmd);
21 EXECUTE IMMEDIATE sql_addpartition_cmd;
22
23 IF ((j % 30) = 0) THEN
24 COMMIT;
25 END IF;
26
27 END LOOP;
28
29 EXECUTE IMMEDIATE 'ALTER TABLE ' || tblname || ' ADD PARTITION p_' || to_char(current_date + 300 + 1,'YYYY_MM_DD') || '_and_later VALUES LESS THAN (''' || (current_date + 300 + 2) || ''');';
30 END;
3、パーティション表の作成
-- -------------------- step3 CREATE PARTITION --------------------
EXEC create_partition_withindex;
DEMOテスト1、書き込みデータの作成手順
1 -- -------------------- step4 CREATE TEST DATA PROCEDUCE --------------------
2
3 CREATE OR REPLACE PROCEDURE create_partition_testdata() AS
4
5 DECLARE
6
7 BEGIN
8 FOR i IN 0..300 LOOP
9 INSERT INTO parttest (some_test, some_tstimestamptz, random_value,p_condition)
10 SELECT
11 'user #' || cast(floor(random() * 10) as int4),
12 now() - '1 year'::INTERVAL * random(),
13 cast(random() * 100000000 as INT4),
14 (current_date + i)
15 FROM
16 generate_series(1,500000);
17 COMMIT;
18 END LOOP;
19 END;
2、書き込みデータの保存プロセスを実行する
-- -------------------- step5 CREATE TEST DATA --------------------
EXEC create_partition_testdata;
3、書き込みデータのデータ量をチェックする
SELECT COUNT(*) FROM parttest;
必要に応じて、パーティションテーブルの作成やデータの書き込みの時間データを記録できます.