mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-20 19:56:00 +00:00
more aggressive postgres partitioning
This commit is contained in:
@@ -1049,16 +1049,6 @@ CREATE TABLE IF NOT EXISTS objects (
|
|||||||
|
|
||||||
CREATE INDEX objects_idx ON objects USING btree(key,ledger_seq);
|
CREATE INDEX objects_idx ON objects USING btree(key,ledger_seq);
|
||||||
|
|
||||||
create table if not exists objects1 partition of objects for values from (0) to (10000000);
|
|
||||||
create table if not exists objects2 partition of objects for values from (10000000) to (20000000);
|
|
||||||
create table if not exists objects3 partition of objects for values from (20000000) to (30000000);
|
|
||||||
create table if not exists objects4 partition of objects for values from (30000000) to (40000000);
|
|
||||||
create table if not exists objects5 partition of objects for values from (40000000) to (50000000);
|
|
||||||
create table if not exists objects6 partition of objects for values from (50000000) to (60000000);
|
|
||||||
create table if not exists objects7 partition of objects for values from (60000000) to (70000000);
|
|
||||||
create table if not exists objects8 partition of objects for values from (70000000) to (80000000);
|
|
||||||
create table if not exists objects9 partition of objects for values from (80000000) to (90000000);
|
|
||||||
create table if not exists objects10 partition of objects for values from (90000000) to (100000000);
|
|
||||||
|
|
||||||
|
|
||||||
-- Index for lookups by ledger hash.
|
-- Index for lookups by ledger hash.
|
||||||
@@ -1074,16 +1064,6 @@ CREATE TABLE IF NOT EXISTS transactions (
|
|||||||
transaction bytea NOT NULL,
|
transaction bytea NOT NULL,
|
||||||
metadata bytea NOT NULL
|
metadata bytea NOT NULL
|
||||||
) PARTITION BY RANGE(ledger_seq);
|
) PARTITION BY RANGE(ledger_seq);
|
||||||
create table if not exists transactions1 partition of transactions for values from (0) to (10000000);
|
|
||||||
create table if not exists transactions2 partition of transactions for values from (10000000) to (20000000);
|
|
||||||
create table if not exists transactions3 partition of transactions for values from (20000000) to (30000000);
|
|
||||||
create table if not exists transactions4 partition of transactions for values from (30000000) to (40000000);
|
|
||||||
create table if not exists transactions5 partition of transactions for values from (40000000) to (50000000);
|
|
||||||
create table if not exists transactions6 partition of transactions for values from (50000000) to (60000000);
|
|
||||||
create table if not exists transactions7 partition of transactions for values from (60000000) to (70000000);
|
|
||||||
create table if not exists transactions8 partition of transactions for values from (70000000) to (80000000);
|
|
||||||
create table if not exists transactions9 partition of transactions for values from (80000000) to (90000000);
|
|
||||||
create table if not exists transactions10 partition of transactions for values from (90000000) to (100000000);
|
|
||||||
|
|
||||||
create index if not exists tx_by_hash on transactions using hash (hash);
|
create index if not exists tx_by_hash on transactions using hash (hash);
|
||||||
create index if not exists tx_by_lgr_seq on transactions using hash (ledger_seq);
|
create index if not exists tx_by_lgr_seq on transactions using hash (ledger_seq);
|
||||||
@@ -1097,17 +1077,6 @@ CREATE TABLE IF NOT EXISTS account_transactions (
|
|||||||
hash bytea NOT NULL,
|
hash bytea NOT NULL,
|
||||||
PRIMARY KEY (account, ledger_seq, transaction_index, hash)
|
PRIMARY KEY (account, ledger_seq, transaction_index, hash)
|
||||||
) PARTITION BY RANGE (ledger_seq);
|
) PARTITION BY RANGE (ledger_seq);
|
||||||
create table if not exists account_transactions1 partition of account_transactions for values from (0) to (10000000);
|
|
||||||
create table if not exists account_transactions2 partition of account_transactions for values from (10000000) to (20000000);
|
|
||||||
create table if not exists account_transactions3 partition of account_transactions for values from (20000000) to (30000000);
|
|
||||||
create table if not exists account_transactions4 partition of account_transactions for values from (30000000) to (40000000);
|
|
||||||
create table if not exists account_transactions5 partition of account_transactions for values from (40000000) to (50000000);
|
|
||||||
create table if not exists account_transactions6 partition of account_transactions for values from (50000000) to (60000000);
|
|
||||||
create table if not exists account_transactions7 partition of account_transactions for values from (60000000) to (70000000);
|
|
||||||
create table if not exists account_transactions8 partition of account_transactions for values from (70000000) to (80000000);
|
|
||||||
create table if not exists account_transactions9 partition of account_transactions for values from (80000000) to (90000000);
|
|
||||||
create table if not exists account_transactions10 partition of account_transactions for values from (90000000) to (100000000);
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS successor (
|
CREATE TABLE IF NOT EXISTS successor (
|
||||||
key bytea NOT NULL,
|
key bytea NOT NULL,
|
||||||
@@ -1116,16 +1085,6 @@ CREATE TABLE IF NOT EXISTS successor (
|
|||||||
PRIMARY KEY(key, ledger_seq)
|
PRIMARY KEY(key, ledger_seq)
|
||||||
) PARTITION BY RANGE(ledger_seq);
|
) PARTITION BY RANGE(ledger_seq);
|
||||||
|
|
||||||
create table if not exists successor1 partition of successor for values from (0) to (10000000);
|
|
||||||
create table if not exists successor2 partition of successor for values from (10000000) to (20000000);
|
|
||||||
create table if not exists successor3 partition of successor for values from (20000000) to (30000000);
|
|
||||||
create table if not exists successor4 partition of successor for values from (30000000) to (40000000);
|
|
||||||
create table if not exists successor5 partition of successor for values from (40000000) to (50000000);
|
|
||||||
create table if not exists successor6 partition of successor for values from (50000000) to (60000000);
|
|
||||||
create table if not exists successor7 partition of successor for values from (60000000) to (70000000);
|
|
||||||
create table if not exists successor8 partition of successor for values from (70000000) to (80000000);
|
|
||||||
create table if not exists successor9 partition of successor for values from (80000000) to (90000000);
|
|
||||||
create table if not exists successor10 partition of successor for values from (90000000) to (100000000);
|
|
||||||
|
|
||||||
|
|
||||||
-- Avoid inadvertent administrative tampering with committed data.
|
-- Avoid inadvertent administrative tampering with committed data.
|
||||||
@@ -1173,23 +1132,39 @@ CREATE OR REPLACE FUNCTION insert_ancestry() RETURNS TRIGGER AS $$
|
|||||||
DECLARE
|
DECLARE
|
||||||
_parent bytea;
|
_parent bytea;
|
||||||
_child bytea;
|
_child bytea;
|
||||||
|
_partition text;
|
||||||
|
_lowerBound bigint;
|
||||||
|
_upperBound bigint;
|
||||||
|
_interval bigint;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF length(NEW.ledger_hash) != 32 OR length(NEW.prev_hash) != 32 THEN
|
IF length(NEW.ledger_hash) != 32 OR length(NEW.prev_hash) != 32 THEN
|
||||||
RAISE 'ledger_hash and prev_hash must each be 32 bytes: %', NEW;
|
RAISE 'ledger_hash and prev_hash must each be 32 bytes: %', NEW;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
_interval = 1000000;
|
||||||
|
_lowerBound = (NEW.ledger_seq / _interval);
|
||||||
|
_partition= _lowerBound;
|
||||||
|
_lowerBound = _lowerBound * _interval;
|
||||||
|
_upperBound = _lowerBound + _interval;
|
||||||
|
|
||||||
|
|
||||||
|
EXECUTE format('create table if not exists public.objects_part_%s partition of public.objects for values from (%s) to (%s)',_partition,_lowerBound,_upperBound);
|
||||||
|
EXECUTE format('create table if not exists public.successor_part_%s partition of public.successor for values from (%s) to (%s)',_partition,_lowerBound,_upperBound);
|
||||||
|
EXECUTE format('create table if not exists public.transactions_part_%s partition of public.transactions for values from (%s) to (%s)',_partition,_lowerBound,_upperBound);
|
||||||
|
EXECUTE format('create table if not exists public.account_transactions_part_%s partition of public.account_transactions for values from (%s) to (%s)',_partition,_lowerBound,_upperBound);
|
||||||
|
|
||||||
IF (SELECT ledger_hash
|
IF (SELECT ledger_hash
|
||||||
FROM ledgers
|
FROM public.ledgers
|
||||||
ORDER BY ledger_seq DESC
|
ORDER BY ledger_seq DESC
|
||||||
LIMIT 1) = NEW.prev_hash THEN RETURN NEW; END IF;
|
LIMIT 1) = NEW.prev_hash THEN RETURN NEW; END IF;
|
||||||
|
|
||||||
IF NOT EXISTS (SELECT 1 FROM LEDGERS) THEN RETURN NEW; END IF;
|
IF NOT EXISTS (SELECT 1 FROM public.ledgers) THEN RETURN NEW; END IF;
|
||||||
|
|
||||||
_parent := (SELECT ledger_hash
|
_parent := (SELECT ledger_hash
|
||||||
FROM ledgers
|
FROM public.ledgers
|
||||||
WHERE ledger_seq = NEW.ledger_seq - 1);
|
WHERE ledger_seq = NEW.ledger_seq - 1);
|
||||||
_child := (SELECT prev_hash
|
_child := (SELECT prev_hash
|
||||||
FROM ledgers
|
FROM public.ledgers
|
||||||
WHERE ledger_seq = NEW.ledger_seq + 1);
|
WHERE ledger_seq = NEW.ledger_seq + 1);
|
||||||
IF _parent IS NULL AND _child IS NULL THEN
|
IF _parent IS NULL AND _child IS NULL THEN
|
||||||
RAISE 'Ledger Ancestry error: orphan.';
|
RAISE 'Ledger Ancestry error: orphan.';
|
||||||
@@ -1201,6 +1176,7 @@ BEGIN
|
|||||||
RAISE 'Ledger Ancestry error: bad child.';
|
RAISE 'Ledger Ancestry error: bad child.';
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE plpgsql;
|
$$ LANGUAGE plpgsql;
|
||||||
|
|||||||
@@ -691,7 +691,6 @@ PostgresBackend::fetchAccountTransactions(
|
|||||||
void
|
void
|
||||||
PostgresBackend::open(bool readOnly)
|
PostgresBackend::open(bool readOnly)
|
||||||
{
|
{
|
||||||
if (!readOnly)
|
|
||||||
initSchema(pgPool_);
|
initSchema(pgPool_);
|
||||||
initAccountTx(pgPool_);
|
initAccountTx(pgPool_);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user