Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Limitazioni DDL e altre informazioni per Aurora PostgreSQL Limitless Database
I seguenti argomenti descrivono le limitazioni o forniscono ulteriori informazioni per i comandi SQL DDL in Aurora PostgreSQL Limitless Database.
Argomenti
ALTER TABLE
Il ALTER TABLE
comando è generalmente supportato in Aurora PostgreSQL Limitless Database. Per ulteriori informazioni, vedere ALTER TABLE
Limitazioni
ALTER TABLE
presenta le seguenti limitazioni per le opzioni supportate.
- Rimozione di una colonna
-
-
Nelle tabelle condivise, non è possibile rimuovere le colonne che fanno parte della chiave shard.
-
Nelle tabelle di riferimento, non è possibile rimuovere le colonne chiave primarie.
-
- Modifica del tipo di dati di una colonna
-
-
L'
USING
espressione non è supportata. -
Nelle tabelle condivise, non è possibile modificare il tipo delle colonne che fanno parte della chiave shard.
-
- Aggiungere o rimuovere un vincolo
-
Per informazioni dettagliate su ciò che non è supportato, consulta. Vincoli
- Modifica del valore predefinito di una colonna
-
I valori predefiniti sono supportati. Per ulteriori informazioni, consulta Valori predefiniti.
Opzioni non supportate
Alcune opzioni non sono supportate perché dipendono da funzionalità non supportate, come i trigger.
Le seguenti opzioni a livello di tabella per ALTER TABLE
non sono supportate:
-
ALL IN TABLESPACE
-
ATTACH PARTITION
-
DETACH PARTITION
-
ONLY
contrassegnare -
RENAME CONSTRAINT
Le seguenti opzioni a livello di colonna per ALTER TABLE
non sono supportate:
-
AGGIUNGI GENERATO
-
ELIMINA ESPRESSIONE [SE ESISTE]
-
DROP IDENTITY [SE ESISTE]
-
RESET
-
RESTART
-
SET
-
IMPOSTA LA COMPRESSIONE
-
SET STATISTICS
CREATE DATABASE
In Aurora PostgreSQL Limitless Database, sono supportati solo database illimitati.
Durante CREATE DATABASE
l'esecuzione, i database che sono stati creati correttamente in uno o più nodi potrebbero non riuscire negli altri nodi, poiché la creazione del database è un'operazione non transazionale. In questo caso, gli oggetti del database che sono stati creati correttamente vengono rimossi automaticamente da tutti i nodi entro un periodo di tempo predeterminato per mantenere la coerenza nel gruppo di shard DB. Durante questo periodo, la ricreazione di un database con lo stesso nome potrebbe generare un errore che indica che il database esiste già.
Sono supportate le seguenti opzioni:
-
Collazione:
CREATE DATABASE
name
WITH [LOCALE =locale
] [LC_COLLATE =lc_collate
] [LC_CTYPE =lc_ctype
] [ICU_LOCALE =icu_locale
] [ICU_RULES =icu_rules
] [LOCALE_PROVIDER =locale_provider
] [COLLATION_VERSION =collation_version
]; -
CREATE DATABASE WITH OWNER
:CREATE DATABASE
name
WITH OWNER =user_name
;
Le seguenti opzioni non sono supportate:
-
CREATE DATABASE WITH TABLESPACE
:CREATE DATABASE
name
WITH TABLESPACE =tablespace_name
; -
CREATE DATABASE WITH TEMPLATE
:CREATE DATABASE
name
WITH TEMPLATE =template
;
CREATE INDEX
CREATE INDEX CONCURRENTLY
è supportato per le tabelle condivise:
CREATE INDEX CONCURRENTLY
index_name
ONtable_name
(column_name
);
CREATE UNIQUE INDEX
è supportato per tutti i tipi di tabella:
CREATE UNIQUE INDEX
index_name
ONtable_name
(column_name
);
CREATE UNIQUE INDEX CONCURRENTLY
non è supportato:
CREATE UNIQUE INDEX CONCURRENTLY
index_name
ONtable_name
(column_name
);
Per ulteriori informazioni, consulta UNIQUE. Per informazioni generali sulla creazione di indici, vedere CREATE INDEX
- Mostrare gli indici
-
Non tutti gli indici sono visibili sui router quando si utilizzano comandi simili.
\d
Utilizzate invece latable_name
pg_catalog.pg_indexes
vista per ottenere gli indici, come illustrato nell'esempio seguente.SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"id"}'; CREATE TABLE items (id int PRIMARY KEY, val int); CREATE INDEX items_my_index on items (id, val); postgres_limitless=> SELECT * FROM pg_catalog.pg_indexes WHERE tablename='items'; schemaname | tablename | indexname | tablespace | indexdef ------------+-----------+----------------+------------+------------------------------------------------------------------------ public | items | items_my_index | | CREATE INDEX items_my_index ON ONLY public.items USING btree (id, val) public | items | items_pkey | | CREATE UNIQUE INDEX items_pkey ON ONLY public.items USING btree (id) (2 rows)
CREATE SCHEMA
CREATE SCHEMA
con un elemento dello schema non è supportato:
CREATE SCHEMA
my_schema
CREATE TABLE (column_name
INT);
Ciò genera un errore simile al seguente:
ERROR: CREATE SCHEMA with schema elements is not supported
CREATE TABLE
Le relazioni nelle CREATE TABLE
istruzioni non sono supportate, ad esempio:
CREATE TABLE orders (orderid int, customerId int, orderDate date) WITH (autovacuum_enabled = false);
IDENTITY
le colonne non sono supportate, ad esempio:
CREATE TABLE orders (orderid INT GENERATED ALWAYS AS IDENTITY);
Aurora PostgreSQL Limitless Database supporta fino a 54 caratteri per i nomi di tabella condivisi.
CREATE TABLE AS
Per creare una tabella utilizzandoCREATE TABLE AS
, è necessario utilizzare la variabile. rds_aurora.limitless_create_table_mode
Per le tabelle condivise, è necessario utilizzare anche la rds_aurora.limitless_create_table_shard_key
variabile. Per ulteriori informazioni, consulta Creazione di tabelle illimitate utilizzando variabili.
-- Set the variables. SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"a"}'; CREATE TABLE ctas_table AS SELECT 1 a; -- "source" is the source table whose columns and data types are used to create the new "ctas_table2" table. CREATE TABLE ctas_table2 AS SELECT a,b FROM source;
Non è possibile utilizzarla CREATE TABLE AS
per creare tabelle di riferimento, poiché richiedono vincoli di chiave primaria. CREATE TABLE
AS
non propaga le chiavi primarie a nuove tabelle.
Per informazioni generali, vedere CREATE TABLE AS
DROP DATABASE
Puoi eliminare i database che hai creato.
Il DROP DATABASE
comando viene eseguito in modo asincrono in background. Mentre è in esecuzione, riceverai un errore se provi a creare un nuovo database con lo stesso nome.
SELECT INTO
SELECT INTO
è funzionalmente simile a. CREATE TABLE AS È necessario utilizzare la rds_aurora.limitless_create_table_mode
variabile. Per le tabelle condivise, è necessario utilizzare anche la rds_aurora.limitless_create_table_shard_key
variabile. Per ulteriori informazioni, consulta Creazione di tabelle illimitate utilizzando variabili.
-- Set the variables. SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"a"}'; -- "source" is the source table whose columns and data types are used to create the new "destination" table. SELECT * INTO destination FROM source;
Attualmente, l'SELECT INTO
operazione viene eseguita tramite il router, non direttamente tramite gli shard. Pertanto, le prestazioni possono essere lente.
Per informazioni generali, vedere SELECT INTO nella
Vincoli
Le seguenti limitazioni si applicano ai vincoli in Aurora PostgreSQL Limitless Database.
- CHECK
-
Sono supportati semplici vincoli che coinvolgono operatori di confronto con valori letterali. Le espressioni e i vincoli più complessi che richiedono la convalida delle funzioni non sono supportati, come illustrato negli esempi seguenti.
CREATE TABLE my_table ( id INT CHECK (id > 0) -- supported , val INT CHECK (val > 0 AND val < 1000) -- supported , tag TEXT CHECK (length(tag) > 0) -- not supported: throws "Expression inside CHECK constraint is not supported" , op_date TIMESTAMP WITH TIME ZONE CHECK (op_date <= now()) -- not supported: throws "Expression inside CHECK constraint is not supported" );
È possibile assegnare nomi espliciti ai vincoli, come illustrato nell'esempio seguente.
CREATE TABLE my_table ( id INT CONSTRAINT positive_id CHECK (id > 0) , val INT CONSTRAINT val_in_range CHECK (val > 0 AND val < 1000) );
È possibile utilizzare la sintassi dei vincoli a livello di tabella con il vincolo, come illustrato nell'esempio seguente
CHECK
.CREATE TABLE my_table ( id INT CONSTRAINT positive_id CHECK (id > 0) , min_val INT CONSTRAINT min_val_in_range CHECK (min_val > 0 AND min_val < 1000) , max_val INT , CONSTRAINT max_val_in_range CHECK (max_val > 0 AND max_val < 1000 AND max_val > min_val) );
- EXCLUDE
-
I vincoli di esclusione non sono supportati in Aurora PostgreSQL Limitless Database.
- FOREIGN KEY
-
Per ulteriori informazioni, consulta Chiavi esterne.
- NON NULLO
-
NOT NULL
i vincoli sono supportati senza restrizioni. - PRIMARY KEY
-
La chiave primaria implica vincoli univoci e pertanto le stesse restrizioni sui vincoli unici si applicano alla chiave primaria. Ciò significa:
-
Se una tabella viene convertita in una tabella condivisa, la chiave shard deve essere un sottoinsieme della chiave primaria. Cioè, la chiave primaria contiene tutte le colonne della chiave shard.
-
Se una tabella viene convertita in una tabella di riferimento, deve avere una chiave primaria.
Gli esempi seguenti illustrano l'uso delle chiavi primarie.
-- Create a standard table. CREATE TABLE public.my_table ( item_id INT , location_code INT , val INT , comment text ); -- Change the table to a sharded table using the 'item_id' and 'location_code' columns as shard keys. CALL rds_aurora.limitless_alter_table_type_sharded('public.my_table', ARRAY['item_id', 'location_code']);
Sto cercando di aggiungere una chiave primaria che non contenga una chiave shard:
-- Add column 'item_id' as the primary key. -- Invalid because the primary key doesnt include all columns from the shard key: -- 'location_code' is part of the shard key but not part of the primary key ALTER TABLE public.my_table ADD PRIMARY KEY (item_id); -- ERROR -- add column "val" as primary key -- Invalid because primary key does not include all columns from shard key: -- item_id and location_code iare part of shard key but not part of the primary key ALTER TABLE public.my_table ADD PRIMARY KEY (item_id); -- ERROR
Cercando di aggiungere una chiave primaria che contenga una chiave shard:
-- Add the 'item_id' and 'location_code' columns as the primary key. -- Valid because the primary key contains the shard key. ALTER TABLE public.my_table ADD PRIMARY KEY (item_id, location_code); -- OK -- Add the 'item_id', 'location_code', and 'val' columns as the primary key. -- Valid because the primary key contains the shard key. ALTER TABLE public.my_table ADD PRIMARY KEY (item_id, location_code, val); -- OK
Trasforma una tabella standard in una tabella di riferimento.
-- Create a standard table. CREATE TABLE zipcodes (zipcode INT PRIMARY KEY, details VARCHAR); -- Convert the table to a reference table. CALL rds_aurora.limitless_alter_table_type_reference('public.zipcode');
Per ulteriori informazioni sulla creazione di tabelle frammentate e di riferimento, vedereCreazione di tabelle del database Aurora SQL Postgre Limitless.
-
- UNIQUE
-
Nelle tabelle suddivise, la chiave univoca deve contenere la chiave shard, ovvero la chiave shard deve essere un sottoinsieme della chiave univoca. Questo viene controllato quando si cambia il tipo di tabella in sharded. Nelle tabelle di riferimento non ci sono restrizioni.
CREATE TABLE customer ( customer_id INT NOT NULL , zipcode INT , email TEXT UNIQUE );
I
UNIQUE
vincoli a livello di tabella sono supportati, come illustrato nell'esempio seguente.CREATE TABLE customer ( customer_id INT NOT NULL , zipcode INT , email TEXT , CONSTRAINT zipcode_and_email UNIQUE (zipcode, email) );
L'esempio seguente mostra l'uso congiunto di una chiave primaria e di una chiave univoca. Entrambe le chiavi devono includere la chiave shard.
SET rds_aurora.limitless_create_table_mode='sharded'; SET rds_aurora.limitless_create_table_shard_key='{"p_id"}'; CREATE TABLE t1 ( p_id BIGINT NOT NULL, c_id BIGINT NOT NULL, PRIMARY KEY (p_id), UNIQUE (p_id, c_id) );
Per ulteriori informazioni, consulta Vincoli
Valori predefiniti
Aurora PostgreSQL Limitless Database supporta espressioni con valori predefiniti.
L'esempio seguente mostra l'uso di valori predefiniti.
CREATE TABLE t ( a INT DEFAULT 5, b TEXT DEFAULT 'NAN', c NUMERIC ); CALL rds_aurora.limitless_alter_table_type_sharded('t', ARRAY['a']); INSERT INTO t DEFAULT VALUES; SELECT * FROM t; a | b | c ---+-----+--- 5 | NAN | (1 row)
Le espressioni sono supportate, come illustrato nell'esempio seguente.
CREATE TABLE t1 (a NUMERIC DEFAULT random());
L'esempio seguente aggiunge una nuova colonna che è NOT NULL
e ha un valore predefinito.
ALTER TABLE t ADD COLUMN d BOOLEAN NOT NULL DEFAULT FALSE; SELECT * FROM t; a | b | c | d ---+-----+---+--- 5 | NAN | | f (1 row)
L'esempio seguente modifica una colonna esistente con un valore predefinito.
ALTER TABLE t ALTER COLUMN c SET DEFAULT 0.0; INSERT INTO t DEFAULT VALUES; SELECT * FROM t; a | b | c | d ---+-----+-----+----- 5 | NAN | | f 5 | NAN | 0.0 | f (2 rows)
L'esempio seguente elimina un valore predefinito.
ALTER TABLE t ALTER COLUMN a DROP DEFAULT; INSERT INTO t DEFAULT VALUES; SELECT * FROM t; a | b | c | d ---+-----+-----+----- 5 | NAN | | f 5 | NAN | 0.0 | f | NAN | 0.0 | f (3 rows)
Per ulteriori informazioni, consulta Valori predefiniti
Estensioni
Le seguenti estensioni PostgreSQL sono supportate in Aurora PostgreSQL Limitless Database:
-
aurora_limitless_fdw
— Questa estensione è preinstallata. Non puoi lasciarlo cadere. -
aws_s3
— Questa estensione funziona in Aurora PostgreSQL Limitless Database in modo simile a Aurora PostgreSQL.Puoi importare dati da un bucket Amazon S3 a un cluster Aurora PostgreSQL Limitless Database DB o esportare dati da un cluster Aurora PostgreSQL Limitless Database DB a un bucket Amazon S3. Per ulteriori informazioni, consultare Importazione di dati da Amazon S3 in un cluster database Aurora PostgreSQL e Esportazione di dati da del cluster di database Aurora PostgreSQLRDS per PostgreSQL a Amazon S3.
-
btree_gin
-
citext
-
ip4r
-
pg_buffercache
— Questa estensione si comporta in modo diverso in Aurora PostgreSQL Limitless Database rispetto alla community PostgreSQL. Per ulteriori informazioni, consulta differenze pg_buffercache nel database Aurora PostgreSQL Limitless. -
pg_stat_statements
-
pg_trgm
-
pgcrypto
-
pgstattuple
— Questa estensione si comporta in modo diverso in Aurora PostgreSQL Limitless Database rispetto alla community PostgreSQL. Per ulteriori informazioni, consulta differenze pgstattuple nel database Aurora PostgreSQL Limitless. -
pgvector
-
plpgsql
— Questa estensione è preinstallata, ma è possibile eliminarla. -
PostGIS
— Le transazioni lunghe e le funzioni di gestione delle tabelle non sono supportate. La modifica della tabella di riferimento spaziale non è supportata. -
unaccent
-
uuid
La maggior parte delle estensioni PostgreSQL attualmente non è supportata in Aurora PostgreSQL Limitless Database. Tuttavia, puoi comunque utilizzare l'impostazione di configurazione shared_preload_libraries
Ad esempio, è possibile caricare l'pg_hint_plan
estensione, ma il suo caricamento non garantisce che vengano utilizzati i suggerimenti passati nei commenti delle query.
Nota
Non puoi modificare gli oggetti associati all'estensione pg_stat_statements
È possibile utilizzare le pg_available_extension_versions
funzioni pg_available_extensions
and per trovare le estensioni supportate in Aurora PostgreSQL Limitless Database.
Per le estensioni sono supportate le seguenti opzioni: DDLs
- CREATE EXTENSION
-
È possibile creare estensioni, come in PostgreSQL.
CREATE EXTENSION [ IF NOT EXISTS ]
extension_name
[ WITH ] [ SCHEMAschema_name
] [ VERSIONversion
] [ CASCADE ]Per ulteriori informazioni, consulta CREATE EXTENSION
nella documentazione di PostgreSQL. - ALTER EXTENSION
-
Sono supportati: DDLs
ALTER EXTENSION
name
UPDATE [ TOnew_version
] ALTER EXTENSIONname
SET SCHEMAnew_schema
Per ulteriori informazioni, vedere ALTER EXTENSION
nella documentazione di PostgreSQL. - DROP EXTENSION
-
Puoi eliminare le estensioni, come in PostgreSQL.
DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Per ulteriori informazioni, consulta DROP EXTENSION
nella documentazione di PostgreSQL.
Quanto segue DDLs non è supportato per le estensioni:
- ALTER EXTENSION
-
Non puoi aggiungere o eliminare oggetti membri dalle estensioni.
ALTER EXTENSION
name
ADDmember_object
ALTER EXTENSIONname
DROPmember_object
differenze pg_buffercache nel database Aurora PostgreSQL Limitless
In Aurora PostgreSQL Limitless Database, quando installi l'estensione pg_buffercache e utilizzi la pg_buffercache
vista, ricevi informazioni relative al bufferpg_buffercache_summary
pg_buffercache_usage_counts
È possibile disporre di numerosi nodi e potrebbe essere necessario accedere alle informazioni sul buffer da qualsiasi nodo per diagnosticare i problemi in modo efficace. Pertanto, Limitless Database offre le seguenti funzioni:
-
rds_aurora.limitless_pg_buffercache(
subcluster_id
) -
rds_aurora.limitless_pg_buffercache_summary(
subcluster_id
) -
rds_aurora.limitless_pg_buffercache_usage_counts(
subcluster_id
)
Inserendo l'ID del sottocluster di qualsiasi nodo, che si tratti di un router o di uno shard, è possibile accedere facilmente alle informazioni sul buffer specifiche di quel nodo. Queste funzioni sono disponibili direttamente quando si installa l'pg_buffercache
estensione nel database illimitato.
Nota
Aurora PostgreSQL Limitless Database supporta queste funzioni per la versione 1.4 e successive dell'estensione. pg_buffercache
Le colonne mostrate nella limitless_pg_buffercache
vista differiscono leggermente da quelle nella vista: pg_buffercache
-
bufferid
— Rimane invariato dapg_buffercache
. -
relname
— Invece di visualizzare il numero di nodo del file come in precedenzapg_buffercache
,limitless_pg_buffercache
presenta quello associato,relname
se disponibile, nel database corrente o nei cataloghi del sistema condiviso, altrimenti.NULL
-
parent_relname
— Questa nuova colonna, non presente inpg_buffercache
, mostra il genitorerelname
se il valore nellarelname
colonna rappresenta una tabella partizionata (nel caso di tabelle condivise). Altrimenti, viene visualizzata.NULL
-
spcname
— Invece di visualizzare l'identificatore dell'oggetto del tablespace (OID) come in precedenzapg_buffercache
,limitless_pg_buffercache
visualizza il nome del tablespace. -
datname
— Invece di visualizzare l'OID del database come in precedenzapg_buffercache
,limitless_pg_buffercache
visualizza il nome del database. -
relforknumber
— Rimane invariato dapg_buffercache
. -
relblocknumber
— Rimane invariato da.pg_buffercache
-
isdirty
— Rimane invariato da.pg_buffercache
-
usagecount
— Rimane invariato da.pg_buffercache
-
pinning_backends
— Rimane invariato da.pg_buffercache
Le colonne limitless_pg_buffercache_summary
e le limitless_pg_buffercache_usage_counts
viste sono uguali a quelle delle viste normali pg_buffercache_summary
e delle pg_buffercache_usage_counts
viste, rispettivamente.
Utilizzando queste funzioni, è possibile accedere a informazioni dettagliate sulla cache del buffer su tutti i nodi dell'ambiente Limitless Database, facilitando una diagnosi e una gestione più efficaci dei sistemi di database.
differenze pgstattuple nel database Aurora PostgreSQL Limitless
In Aurora PostgreSQL, l'estensione pgstattuple
Riconosciamo l'importanza di questa estensione per ottenere statistiche a livello di tuple, fondamentali per attività come la rimozione del bloat e la raccolta di informazioni diagnostiche. Pertanto, Aurora PostgreSQL Limitless Database fornisce supporto per l'estensione in database illimitati. pgstattuple
Il database Aurora PostgreSQL Limitless include le seguenti funzioni nello schema: rds_aurora
- Funzioni statistiche a livello di tuple
-
rds_aurora.limitless_pgstattuple(
relation_name
)-
Scopo: Estrarre statistiche a livello di tuple per tabelle standard e relativi indici
-
Input:
relation_name
(testo) — Il nome della relazione -
Output: colonne coerenti con quelle restituite dalla
pgstattuple
funzione in Aurora PostgreSQL
rds_aurora.limitless_pgstattuple(
relation_name
,subcluster_id
)-
Scopo: Estrarre statistiche a livello di tuple per tabelle di riferimento, tabelle condivise, tabelle di catalogo e relativi indici
-
Input:
-
relation_name
(testo) — Il nome della relazione -
subcluster_id
(testo) — L'ID del sottocluster del nodo in cui devono essere estratte le statistiche
-
-
Output:
-
Per le tabelle di riferimento e di catalogo (compresi i relativi indici), le colonne sono coerenti con quelle di Aurora PostgreSQL.
-
Per le tabelle suddivise, le statistiche rappresentano solo la partizione della tabella condivisa che risiede nel sottocluster specificato.
-
-
- Funzioni di statistica dell'indice
-
rds_aurora.limitless_pgstatindex(
relation_name
)-
Scopo: Estrarre le statistiche per gli indici B-tree su tabelle standard
-
Input:
relation_name
(testo) — Il nome dell'indice B-tree -
Output:
root_block_no
vengono restituite tutte le colonne tranne. Le colonne restituite sono coerenti con lapgstatindex
funzione di Aurora PostgreSQL.
rds_aurora.limitless_pgstatindex(
relation_name
,subcluster_id
)-
Scopo: Estrarre le statistiche per gli indici B-tree su tabelle di riferimento, tabelle ripartite e tabelle di catalogo.
-
Input:
-
relation_name
(testo) — Il nome dell'indice B-tree -
subcluster_id
(testo) — L'ID del sottocluster del nodo in cui devono essere estratte le statistiche
-
-
Output:
-
Per gli indici delle tabelle di riferimento e del catalogo, vengono restituite tutte le colonne (tranne
root_block_no
). Le colonne restituite sono coerenti con Aurora PostgreSQL. -
Per le tabelle suddivise, le statistiche rappresentano solo la partizione dell'indice della tabella condivisa che risiede nel sottocluster specificato. La
tree_level
colonna mostra la media di tutte le sezioni di tabella del sottocluster richiesto.
-
rds_aurora.limitless_pgstatginindex(
relation_name
)-
Scopo: Estrarre le statistiche per gli indici invertiti generalizzati () su tabelle standard GINs
-
Input:
relation_name
(testo) — Il nome del GIN -
Output: colonne coerenti con quelle restituite dalla
pgstatginindex
funzione in Aurora PostgreSQL
rds_aurora.limitless_pgstatginindex(
relation_name
,subcluster_id
)-
Scopo: Estrarre le statistiche per gli indici GIN su tabelle di riferimento, tabelle condivise e tabelle di catalogo.
-
Input:
-
relation_name
(testo) — Il nome dell'indice -
subcluster_id
(testo) — L'ID del sottocluster del nodo in cui devono essere estratte le statistiche
-
-
Output:
-
Per gli indici GIN delle tabelle di riferimento e di catalogo, le colonne sono coerenti con quelle di Aurora PostgreSQL.
-
Per le tabelle suddivise, le statistiche rappresentano solo la partizione dell'indice della tabella condivisa che risiede nel sottocluster specificato.
-
rds_aurora.limitless_pgstathashindex(
relation_name
)-
Scopo: Estrarre le statistiche per gli indici hash su tabelle standard
-
Input:
relation_name
(text) — Il nome dell'indice hash -
Output: colonne coerenti con quelle restituite dalla
pgstathashindex
funzione in Aurora PostgreSQL
rds_aurora.limitless_pgstathashindex(
relation_name
,subcluster_id
)-
Scopo: Estrarre le statistiche per gli indici hash su tabelle di riferimento, tabelle suddivise e tabelle di catalogo.
-
Input:
-
relation_name
(testo) — Il nome dell'indice -
subcluster_id
(testo) — L'ID del sottocluster del nodo in cui devono essere estratte le statistiche
-
-
Output:
-
Per gli indici hash delle tabelle di riferimento e del catalogo, le colonne sono coerenti con Aurora PostgreSQL.
-
Per le tabelle suddivise, le statistiche rappresentano solo la partizione dell'indice della tabella condivisa che risiede nel sottocluster specificato.
-
-
- Funzioni di conteggio delle pagine
-
rds_aurora.limitless_pg_relpages(
relation_name
)-
Scopo: Estrarre il conteggio delle pagine per le tabelle standard e i relativi indici
-
Input:
relation_name
(testo) — Il nome della relazione -
Output: numero di pagine della relazione specificata
rds_aurora.limitless_pg_relpages(
relation_name
,subcluster_id
)-
Scopo: estrae il conteggio delle pagine per le tabelle di riferimento, le tabelle suddivise e le tabelle del catalogo (compresi i relativi indici)
-
Input:
-
relation_name
(testo) — Il nome della relazione -
subcluster_id
(testo) — L'ID del sottocluster del nodo in cui deve essere estratto il conteggio delle pagine
-
-
Output: per le tabelle suddivise, il conteggio delle pagine è la somma delle pagine di tutte le sezioni della tabella nel sottocluster specificato.
-
- Funzioni statistiche approssimative a livello di tuple
-
rds_aurora.limitless_pgstattuple_approx(
relation_name
)-
Scopo: Estrarre statistiche approssimative a livello di tuple per le tabelle standard e i relativi indici
-
Input:
relation_name
(testo) — Il nome della relazione -
Output: colonne coerenti con quelle restituite dalla funzione pgstattuple_approx in Aurora PostgreSQL
rds_aurora.limitless_pgstattuple_approx(
relation_name
,subcluster_id
)-
Scopo: Estrarre statistiche approssimative a livello di tuple per tabelle di riferimento, tabelle suddivise e tabelle di catalogo (compresi i relativi indici)
-
Input:
-
relation_name
(testo) — Il nome della relazione -
subcluster_id
(testo) — L'ID del sottocluster del nodo in cui devono essere estratte le statistiche
-
-
Output:
-
Per le tabelle di riferimento e di catalogo (compresi i relativi indici), le colonne sono coerenti con quelle di Aurora PostgreSQL.
-
Per le tabelle suddivise, le statistiche rappresentano solo la partizione della tabella condivisa che risiede nel sottocluster specificato.
-
-
Nota
Attualmente, Aurora PostgreSQL Limitless Database non supporta l'pgstattuple
estensione su viste materializzate, tabelle TOAST o tabelle temporanee.
In Aurora PostgreSQL Limitless Database, è necessario fornire l'input come testo, sebbene Aurora PostgreSQL supporti altri formati.
Chiavi esterne
I vincoli Foreign key () sono supportati con alcune limitazioni: FOREIGN KEY
-
CREATE TABLE
withFOREIGN KEY
è supportato solo per le tabelle standard. Per creare una tabella frammentata o di riferimento conFOREIGN KEY
, create innanzitutto la tabella senza un vincolo di chiave esterna. Quindi modificatela utilizzando la seguente dichiarazione:ALTER TABLE ADD CONSTRAINT;
-
La conversione di una tabella standard in una tabella frammentata o di riferimento non è supportata quando la tabella ha un vincolo di chiave esterna. Eliminate il vincolo, quindi aggiungetelo dopo la conversione.
-
Le seguenti limitazioni si applicano ai tipi di tabella per i vincoli di chiave esterna:
-
Una tabella standard può avere un vincolo di chiave esterna rispetto a un'altra tabella standard.
-
Una tabella condivisa può avere un vincolo di chiave esterna se le tabelle principale e secondaria sono collocate e la chiave esterna è un superset della chiave shard.
-
Una tabella condivisa può avere un vincolo di chiave esterna rispetto a una tabella di riferimento.
-
Una tabella di riferimento può avere un vincolo di chiave esterna rispetto a un'altra tabella di riferimento.
-
Argomenti
Opzioni a chiave esterna
Le chiavi esterne sono supportate in Aurora PostgreSQL Limitless Database per alcune opzioni DDL. La tabella seguente elenca le opzioni supportate e non supportate tra le tabelle del database Aurora PostgreSQL Limitless.
Opzione DDL | Riferimento al riferimento | Da frammentato a frammentato (collocato) | Suddiviso in base al riferimento | Da standard a standard |
---|---|---|---|---|
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
No | No | No | No |
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
Sì | No | No | Sì |
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
No | No | No | No |
|
Sì | No | No | Sì |
|
No | No | No | Sì |
|
Sì | Sì | Sì | Sì |
|
Sì | Sì | Sì | Sì |
|
No | No | No | No |
|
Sì | No | No | Sì |
Esempi
-
Da standard a standard:
set rds_aurora.limitless_create_table_mode='standard'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer ); SELECT constraint_name, table_name, constraint_type FROM information_schema.table_constraints WHERE constraint_type='FOREIGN KEY'; constraint_name | table_name | constraint_type -------------------------+-------------+----------------- orders_product_no_fkey | orders | FOREIGN KEY (1 row)
-
Da suddiviso a frammentato (collocato):
set rds_aurora.limitless_create_table_mode='sharded'; set rds_aurora.limitless_create_table_shard_key='{"product_no"}'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); set rds_aurora.limitless_create_table_shard_key='{"order_id"}'; set rds_aurora.limitless_create_table_collocate_with='products'; CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer, quantity integer ); ALTER TABLE orders ADD CONSTRAINT order_product_fk FOREIGN KEY (product_no) REFERENCES products (product_no);
-
Suddiviso in base al riferimento:
set rds_aurora.limitless_create_table_mode='reference'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); set rds_aurora.limitless_create_table_mode='sharded'; set rds_aurora.limitless_create_table_shard_key='{"order_id"}'; CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer, quantity integer ); ALTER TABLE orders ADD CONSTRAINT order_product_fk FOREIGN KEY (product_no) REFERENCES products (product_no);
-
Riferimento al riferimento:
set rds_aurora.limitless_create_table_mode='reference'; CREATE TABLE products( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer, quantity integer ); ALTER TABLE orders ADD CONSTRAINT order_product_fk FOREIGN KEY (product_no) REFERENCES products (product_no);
Funzioni
Le funzioni sono supportate in Aurora PostgreSQL Limitless Database.
Le seguenti DDLs funzioni sono supportate:
- CREATE FUNCTION
-
È possibile creare funzioni, come in Aurora PostgreSQL, con l'eccezione di modificarne la volatilità sostituendole.
Per ulteriori informazioni, consultare CREATE FUNCTION
nella documentazione di PostgreSQL. - ALTER FUNCTION
-
È possibile modificare le funzioni, come in Aurora PostgreSQL, ad eccezione della modifica della loro volatilità.
Per ulteriori informazioni, vedere ALTER FUNCTION
nella documentazione di PostgreSQL. - DROP FUNCTION
-
È possibile eliminare le funzioni, come in Aurora PostgreSQL.
DROP FUNCTION [ IF EXISTS ]
name
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]Per ulteriori informazioni, vedere DROP FUNCTION
nella documentazione di PostgreSQL.
Distribuzione delle funzioni
Quando tutte le istruzioni di una funzione sono indirizzate a un singolo shard, è utile spostare l'intera funzione sullo shard di destinazione. Quindi il risultato viene propagato al router, anziché annullare la funzione sul router stesso. La funzionalità pushdown di funzioni e stored procedure è utile per i clienti che desiderano eseguire la propria funzione o la stored procedure più vicino alla fonte di dati, ovvero allo shard.
Per distribuire una funzione, è necessario innanzitutto creare la funzione, quindi chiamare la rds_aurora.limitless_distribute_function
procedura per distribuirla. Questa funzione utilizza la seguente sintassi:
SELECT rds_aurora.limitless_distribute_function('
function_prototype
', ARRAY['shard_key
'], 'collocating_table
');
La funzione accetta i seguenti parametri:
-
— La funzione da distribuire. Menziona solo gli argomenti di input e non nessuno degli argomenti di output.function_prototype
Se uno qualsiasi degli argomenti è definito come
OUT
parametro, non includete il loro tipo negli argomenti difunction_prototype
. -
ARRAY['
— L'elenco degli argomenti della funzione identificati come chiave shard per la funzione.shard_key
'] -
— La tabella condivisa che contiene l'intervallo di dati sullo shard di destinazione.collocating_table
Per identificare lo shard su cui attivare questa funzione per farla funzionare, il sistema prende l'ARRAY['
argomento, ne esegue l'hash e trova lo shard shard_key
']
che ospita l'intervallo contenente questo valore hash.collocating_table
- Restrizioni
-
Quando distribuite una funzione o una procedura, questa tratta solo i dati delimitati dall'intervallo di chiavi dello shard in quel frammento. Nei casi in cui la funzione o la procedura tenta di accedere ai dati da un altro shard, i risultati restituiti dalla funzione o dalla procedura distribuita saranno diversi rispetto a quelli non distribuiti.
Ad esempio, create una funzione contenente interrogazioni che toccheranno più shard, ma poi chiamate la
rds_aurora.limitless_distribute_function
procedura per distribuirla. Quando si richiama questa funzione fornendo argomenti per una chiave shard, è probabile che i risultati della sua esecuzione siano limitati dai valori presenti in tale shard. Questi risultati sono diversi da quelli prodotti senza distribuire la funzione. - Esempi
-
Consideriamo la seguente funzione
func
in cui abbiamo la tabella condivisacustomers
con il tasto shard.customer_id
postgres_limitless=> CREATE OR REPLACE FUNCTION func(c_id integer, sc integer) RETURNS int language SQL volatile AS $$ UPDATE customers SET score = sc WHERE customer_id = c_id RETURNING score; $$;
Ora distribuiamo questa funzione:
SELECT rds_aurora.limitless_distribute_function('func(integer, integer)', ARRAY['c_id'], 'customers');
Di seguito sono riportati alcuni esempi di piani di interrogazione.
EXPLAIN(costs false, verbose true) SELECT func(27+1,10); QUERY PLAN -------------------------------------------------- Foreign Scan Output: (func((27 + 1), 10)) Remote SQL: SELECT func((27 + 1), 10) AS func Single Shard Optimized (4 rows)
EXPLAIN(costs false, verbose true) SELECT * FROM customers,func(customer_id, score) WHERE customer_id=10 AND score=27; QUERY PLAN --------------------------------------------------------------------- Foreign Scan Output: customer_id, name, score, func Remote SQL: SELECT customers.customer_id, customers.name, customers.score, func.func FROM public.customers, LATERAL func(customers.customer_id, customers.score) func(func) WHERE ((customers.customer_id = 10) AND (customers.score = 27)) Single Shard Optimized (10 rows)
L'esempio seguente mostra una procedura con
OUT
parametriIN
e parametri come argomenti.CREATE OR REPLACE FUNCTION get_data(OUT id INTEGER, IN arg_id INT) AS $$ BEGIN SELECT customer_id, INTO id FROM customer WHERE customer_id = arg_id; END; $$ LANGUAGE plpgsql;
L'esempio seguente distribuisce la procedura utilizzando solo
IN
parametri.EXPLAIN(costs false, verbose true) SELECT * FROM get_data(1); QUERY PLAN ----------------------------------- Foreign Scan Output: id Remote SQL: SELECT customer_id FROM get_data(1) get_data(id) Single Shard Optimized (6 rows)
Volatilità della funzione
Puoi determinare se una funzione è immutabile, stabile o volatile controllando il provolatile
valore nella vista pg_proc.provolatile
valore indica se il risultato della funzione dipende solo dai suoi argomenti di input o è influenzato da fattori esterni.
Il valore è uno dei seguenti:
-
i
— Funzioni immutabili, che forniscono sempre lo stesso risultato per gli stessi input -
s
— Funzioni stabili, i cui risultati (per input fissi) non cambiano durante una scansione -
v
— Funzioni volatili, i cui risultati potrebbero cambiare in qualsiasi momento. Utilizzatele anchev
per funzioni con effetti collaterali, in modo che le chiamate ad esse non possano essere ottimizzate.
Gli esempi seguenti mostrano le funzioni volatili.
SELECT proname, provolatile FROM pg_proc WHERE proname='pg_sleep'; proname | provolatile ----------+------------- pg_sleep | v (1 row) SELECT proname, provolatile FROM pg_proc WHERE proname='uuid_generate_v4'; proname | provolatile ------------------+------------- uuid_generate_v4 | v (1 row) SELECT proname, provolatile FROM pg_proc WHERE proname='nextval'; proname | provolatile ---------+------------- nextval | v (1 row)
La modifica della volatilità di una funzione esistente non è supportata in Aurora PostgreSQL Limitless Database. Questo vale sia per i comandi che per ALTER FUNCTION
i CREATE OR REPLACE FUNCTION
comandi, come illustrato negli esempi seguenti.
-- Create an immutable function CREATE FUNCTION immutable_func1(name text) RETURNS text language plpgsql AS $$ BEGIN RETURN name; END; $$IMMUTABLE; -- Altering the volatility throws an error ALTER FUNCTION immutable_func1 STABLE; -- Replacing the function with altered volatility throws an error CREATE OR REPLACE FUNCTION immutable_func1(name text) RETURNS text language plpgsql AS $$ BEGIN RETURN name; END; $$VOLATILE;
Consigliamo vivamente di assegnare le volatilità corrette alle funzioni. Ad esempio, se la funzione utilizza SELECT
più tabelle o fa riferimento a oggetti del database, non impostarla come. IMMUTABLE
Se il contenuto della tabella cambia, l'immutabilità viene interrotta.
Aurora PostgreSQL consente funzioni SELECT
interne immutabili, ma i risultati potrebbero essere errati. Aurora PostgreSQL Limitless Database può restituire sia errori che risultati errati. Per ulteriori informazioni sulla volatilità delle funzioni, consulta Categorie di volatilità delle funzioni nella documentazione
Sequenze
Le sequenze denominate sono oggetti di database che generano numeri univoci in ordine crescente o decrescente. CREATE SEQUENCE
crea un nuovo generatore di numeri di sequenza. È garantito che i valori di sequenza siano unici.
Quando si crea una sequenza denominata in Aurora PostgreSQL Limitless Database, viene creato un oggetto sequenza distribuito. Quindi Aurora PostgreSQL Limitless Database distribuisce blocchi di valori di sequenza non sovrapposti su tutti i Distributed Transaction Router (router). I blocchi sono rappresentati come oggetti di sequenza locale sui router; pertanto, le operazioni di sequenza come e vengono eseguite localmente. nextval
currval
I router funzionano in modo indipendente e richiedono nuovi blocchi dalla sequenza distribuita quando necessario.
Per ulteriori informazioni sulle sequenze, vedere CREATE SEQUENCE nella documentazione
Argomenti
Richiedere un nuovo blocco
È possibile configurare le dimensioni dei blocchi allocati sui router utilizzando il parametro. rds_aurora.limitless_sequence_chunk_size
Il valore predefinito è 250000
. Inizialmente ogni router possiede due blocchi: attivi e riservati. I blocchi attivi vengono utilizzati per configurare gli oggetti della sequenza locale (impostazione minvalue
emaxvalue
) e i blocchi riservati vengono archiviati in una tabella interna del catalogo. Quando un blocco attivo raggiunge il valore minimo o massimo, viene sostituito dal blocco riservato. Per fare ciò, ALTER SEQUENCE
viene utilizzato internamente, il che significa che AccessExclusiveLock
viene acquisito.
I background worker vengono eseguiti ogni 10 secondi sui nodi del router per scansionare le sequenze alla ricerca di blocchi riservati utilizzati. Se viene trovato un blocco usato, il lavoratore richiede un nuovo blocco dalla sequenza distribuita. Assicurati di impostare la dimensione del blocco sufficientemente grande da consentire ai lavoratori in background di avere abbastanza tempo per richiederne di nuovi. Le richieste remote non avvengono mai nel contesto delle sessioni utente, il che significa che non è possibile richiedere direttamente una nuova sequenza.
Limitazioni
Le seguenti limitazioni si applicano alle sequenze in Aurora PostgreSQL Limitless Database:
-
Il
pg_sequence
catalogo, lapg_sequences
funzione e l'SELECT * FROM
istruzione mostrano tutti solo lo stato della sequenza locale, non lo stato distribuito.sequence_name
-
È garantito che i valori di sequenza siano unici e monotoni all'interno di una sessione. Tuttavia, possono non funzionare correttamente se le
nextval
istruzioni vengono eseguite in altre sessioni, se tali sessioni sono connesse ad altri router. -
Assicurati che la dimensione della sequenza (numero di valori disponibili) sia sufficientemente grande da poter essere distribuita su tutti i router. Utilizzate il
rds_aurora.limitless_sequence_chunk_size
parametro per configurare.chunk_size
(Ogni router ha due blocchi). -
L'
CACHE
opzione è supportata, ma la cache deve essere più piccola di.chunk_size
Opzioni non supportate
Le seguenti opzioni non sono supportate per le sequenze in Aurora PostgreSQL Limitless Database.
- Funzioni di manipolazione di sequenze
-
La funzione non è supportata.
setval
Per ulteriori informazioni, consulta Funzioni di manipolazione delle sequenzenella documentazione di PostgreSQL. - CREATE SEQUENCE
-
Le seguenti opzioni non sono supportate.
CREATE [{ TEMPORARY | TEMP} | UNLOGGED] SEQUENCE [[ NO ] CYCLE]
Per ulteriori informazioni, vedere CREATE SEQUENCE
nella documentazione di PostgreSQL. - ALTERARE LA SEQUENZA
-
Le seguenti opzioni non sono supportate.
ALTER SEQUENCE [[ NO ] CYCLE]
Per ulteriori informazioni, vedere ALTER SEQUENCE
nella documentazione di PostgreSQL. - ALTER TABLE
-
Il
ALTER TABLE
comando non è supportato per le sequenze.
Esempi
- CREA/RILASCIA UNA SEQUENZA
-
postgres_limitless=> CREATE SEQUENCE s; CREATE SEQUENCE postgres_limitless=> SELECT nextval('s'); nextval --------- 1 (1 row) postgres_limitless=> SELECT * FROM pg_sequence WHERE seqrelid='s'::regclass; seqrelid | seqtypid | seqstart | seqincrement | seqmax | seqmin | seqcache | seqcycle ----------+----------+----------+--------------+--------+--------+----------+---------- 16960 | 20 | 1 | 1 | 10000 | 1 | 1 | f (1 row) % connect to another router postgres_limitless=> SELECT nextval('s'); nextval --------- 10001 (1 row) postgres_limitless=> SELECT * FROM pg_sequence WHERE seqrelid='s'::regclass; seqrelid | seqtypid | seqstart | seqincrement | seqmax | seqmin | seqcache | seqcycle ----------+----------+----------+--------------+--------+--------+----------+---------- 16959 | 20 | 10001 | 1 | 20000 | 10001 | 1 | f (1 row) postgres_limitless=> DROP SEQUENCE s; DROP SEQUENCE
- ALTERARE LA SEQUENZA
-
postgres_limitless=> CREATE SEQUENCE s; CREATE SEQUENCE postgres_limitless=> ALTER SEQUENCE s RESTART 500; ALTER SEQUENCE postgres_limitless=> SELECT nextval('s'); nextval --------- 500 (1 row) postgres_limitless=> SELECT currval('s'); currval --------- 500 (1 row)
- Funzioni di manipolazione di sequenze
-
postgres=# CREATE TABLE t(a bigint primary key, b bigint); CREATE TABLE postgres=# CREATE SEQUENCE s minvalue 0 START 0; CREATE SEQUENCE postgres=# INSERT INTO t VALUES (nextval('s'), currval('s')); INSERT 0 1 postgres=# INSERT INTO t VALUES (nextval('s'), currval('s')); INSERT 0 1 postgres=# SELECT * FROM t; a | b ---+--- 0 | 0 1 | 1 (2 rows) postgres=# ALTER SEQUENCE s RESTART 10000; ALTER SEQUENCE postgres=# INSERT INTO t VALUES (nextval('s'), currval('s')); INSERT 0 1 postgres=# SELECT * FROM t; a | b -------+------- 0 | 0 1 | 1 10000 | 10000 (3 rows)
viste in sequenza
Aurora PostgreSQL Limitless Database offre le seguenti viste per le sequenze.
- rds_aurora.limitless_distributed_sequence
-
Questa vista mostra lo stato e la configurazione della sequenza distribuiti. Le
cache
colonneminvalue
maxvalue
,start
,inc
, e hanno lo stesso significato della vista pg_sequencese mostrano le opzioni con cui è stata creata la sequenza. La lastval
colonna mostra l'ultimo valore allocato o riservato in un oggetto di sequenza distribuito. Ciò non significa che il valore sia già stato utilizzato, poiché i router mantengono localmente i blocchi di sequenza.postgres_limitless=> SELECT * FROM rds_aurora.limitless_distributed_sequence WHERE sequence_name='test_serial_b_seq'; schema_name | sequence_name | lastval | minvalue | maxvalue | start | inc | cache -------------+-------------------+---------+----------+------------+-------+-----+------- public | test_serial_b_seq | 1250000 | 1 | 2147483647 | 1 | 1 | 1 (1 row)
- rds_aurora.limitless_sequence_metadata
-
Questa vista mostra i metadati di sequenza distribuiti e aggrega i metadati di sequenza dai nodi del cluster. Utilizza le seguenti colonne:
-
subcluster_id
— L'ID del nodo del cluster che possiede un blocco. -
Blocco attivo: un blocco di una sequenza che viene utilizzato (
active_minvalue
,).active_maxvalue
-
Chunk riservato: il blocco locale che verrà utilizzato successivamente (,).
reserved_minvalue
reserved_maxvalue
-
local_last_value
— L'ultimo valore osservato da una sequenza locale. -
chunk_size
— La dimensione di un blocco, come configurato al momento della creazione.
postgres_limitless=> SELECT * FROM rds_aurora.limitless_sequence_metadata WHERE sequence_name='test_serial_b_seq' order by subcluster_id; subcluster_id | sequence_name | schema_name | active_minvalue | active_maxvalue | reserved_minvalue | reserved_maxvalue | chunk_size | chunk_state | local_last_value ---------------+-------------------+-------------+-----------------+-----------------+-------------------+-------------------+------------+-------------+------------------ 1 | test_serial_b_seq | public | 500001 | 750000 | 1000001 | 1250000 | 250000 | 1 | 550010 2 | test_serial_b_seq | public | 250001 | 500000 | 750001 | 1000000 | 250000 | 1 | (2 rows)
-
Risoluzione dei problemi relativi alla sequenza
I seguenti problemi possono verificarsi con le sequenze.
- La dimensione del blocco non è sufficientemente grande
-
Se la dimensione del blocco non è sufficientemente grande e il tasso di transazione è elevato, i lavoratori in background potrebbero non avere abbastanza tempo per richiedere nuovi blocchi prima che i blocchi attivi siano esauriti. Ciò può portare a situazioni di contesa e attesa come,, e.
LIMITLESS:AuroraLimitlessSequenceReplace
LWLock:LockManager
Lockrelation
LWlock:bufferscontent
Incrementa il valore del parametro
rds_aurora.limitless_sequence_chunk_size
. - La cache delle sequenze è troppo alta
-
In PostgreSQL, la memorizzazione nella cache delle sequenze avviene a livello di sessione. Ogni sessione assegna valori di sequenza successivi durante un accesso all'oggetto sequenza e aumenta di conseguenza quelli dell'oggetto sequenza.
last_value
Quindi, gli usinextval
successivi di quella sessione restituiscono semplicemente i valori preallocati senza toccare l'oggetto della sequenza.Tutti i numeri assegnati ma non utilizzati all'interno di una sessione vengono persi al termine di tale sessione, con conseguenti «buchi» nella sequenza. Ciò può consumare rapidamente sequence_chunk e portare a eventi di contesa e attesa come,, e.
LIMITLESS:AuroraLimitlessSequenceReplace
LWLock:LockManager
Lockrelation
LWlock:bufferscontent
Riduci l'impostazione della cache della sequenza.
La figura seguente mostra gli eventi di attesa causati da problemi di sequenza.
