mirror of https://github.com/citusdata/citus.git
114 lines
3.9 KiB
Plaintext
114 lines
3.9 KiB
Plaintext
CREATE SCHEMA adaptive_executor;
|
|
SET search_path TO adaptive_executor;
|
|
CREATE TABLE test (x int, y int);
|
|
SET citus.shard_count TO 4;
|
|
SET citus.shard_replication_factor TO 1;
|
|
SET citus.next_shard_id TO 801009000;
|
|
SELECT create_distributed_table('test','x');
|
|
create_distributed_table
|
|
---------------------------------------------------------------------
|
|
|
|
(1 row)
|
|
|
|
-- Add 1 row to each shard
|
|
SELECT get_shard_id_for_distribution_column('test', 1);
|
|
get_shard_id_for_distribution_column
|
|
---------------------------------------------------------------------
|
|
801009000
|
|
(1 row)
|
|
|
|
INSERT INTO test VALUES (1,2);
|
|
SELECT get_shard_id_for_distribution_column('test', 3);
|
|
get_shard_id_for_distribution_column
|
|
---------------------------------------------------------------------
|
|
801009001
|
|
(1 row)
|
|
|
|
INSERT INTO test VALUES (3,2);
|
|
SELECT get_shard_id_for_distribution_column('test', 6);
|
|
get_shard_id_for_distribution_column
|
|
---------------------------------------------------------------------
|
|
801009002
|
|
(1 row)
|
|
|
|
INSERT INTO test VALUES (8,2);
|
|
SELECT get_shard_id_for_distribution_column('test', 11);
|
|
get_shard_id_for_distribution_column
|
|
---------------------------------------------------------------------
|
|
801009003
|
|
(1 row)
|
|
|
|
INSERT INTO test VALUES (11,2);
|
|
-- Set a very high slow start to avoid opening parallel connections
|
|
SET citus.executor_slow_start_interval TO '60s';
|
|
SET citus.max_adaptive_executor_pool_size TO 2;
|
|
BEGIN;
|
|
SELECT count(*) FROM test a JOIN (SELECT x, pg_sleep(0.1) FROM test) b USING (x);
|
|
count
|
|
---------------------------------------------------------------------
|
|
4
|
|
(1 row)
|
|
|
|
SELECT sum(result::bigint) FROM run_command_on_workers($$
|
|
SELECT count(*) FROM pg_stat_activity
|
|
WHERE pid <> pg_backend_pid() AND query LIKE '%8010090%'
|
|
$$);
|
|
sum
|
|
---------------------------------------------------------------------
|
|
2
|
|
(1 row)
|
|
|
|
END;
|
|
-- SELECT takes longer than slow start interval, should open multiple connections
|
|
SET citus.executor_slow_start_interval TO '10ms';
|
|
BEGIN;
|
|
SELECT count(*) FROM test a JOIN (SELECT x, pg_sleep(0.2) FROM test) b USING (x);
|
|
count
|
|
---------------------------------------------------------------------
|
|
4
|
|
(1 row)
|
|
|
|
SELECT sum(result::bigint) FROM run_command_on_workers($$
|
|
SELECT count(*) FROM pg_stat_activity
|
|
WHERE pid <> pg_backend_pid() AND query LIKE '%8010090%'
|
|
$$);
|
|
sum
|
|
---------------------------------------------------------------------
|
|
4
|
|
(1 row)
|
|
|
|
END;
|
|
CREATE OR REPLACE FUNCTION select_for_update()
|
|
RETURNS void
|
|
AS $$
|
|
DECLARE
|
|
my int;
|
|
BEGIN
|
|
SELECT y INTO my FROM test WHERE x = 1 FOR UPDATE;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
-- so that we can prove that we open a transaction block by logging below:
|
|
-- "NOTICE: issuing BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;..."
|
|
SET citus.log_remote_commands TO on;
|
|
SELECT select_for_update();
|
|
NOTICE: issuing BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;SELECT assign_distributed_transaction_id(xx, xx, 'xxxxxxx');
|
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
|
CONTEXT: SQL statement "SELECT y FROM test WHERE x = 1 FOR UPDATE"
|
|
PL/pgSQL function select_for_update() line XX at SQL statement
|
|
NOTICE: issuing SELECT y FROM adaptive_executor.test_801009000 test WHERE (x OPERATOR(pg_catalog.=) 1) FOR UPDATE OF test
|
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
|
CONTEXT: SQL statement "SELECT y FROM test WHERE x = 1 FOR UPDATE"
|
|
PL/pgSQL function select_for_update() line XX at SQL statement
|
|
NOTICE: issuing COMMIT
|
|
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
|
select_for_update
|
|
---------------------------------------------------------------------
|
|
|
|
(1 row)
|
|
|
|
SET citus.log_remote_commands TO off;
|
|
DROP SCHEMA adaptive_executor CASCADE;
|
|
NOTICE: drop cascades to 2 other objects
|
|
DETAIL: drop cascades to table test
|
|
drop cascades to function select_for_update()
|