自研分区表
最近更新时间: 2025-02-18 16:02:00
#创建测试表2048个子表
drop table t_time_range;
create table t_time_range
(
f1 bigint not null, f2 timestamp ,f3 bigint
)
partition by range (f2) begin (timestamp without time zone '2017-09-01 0:0:0')
step (interval '1 month')
partitions (2048) distribute by shard(f1)
to group default_group;
#每个分区插入一条数据
psql -At -c "select 'insert into t_time_range values(1,'''||startyf||''',1);' from (select ('2017-09-01'::date + (t::text||' months')::interval)::date::text as startyf from generate_series(0,2047) as t) as t"|psql -d pgbench
#编写测试存储过程
create or replace function get_t_time_range() returns t_time_range as
$$
declare
v_start timestamp;
v_end timestamp;
v_random integer;
v_rec t_time_range%rowtype;
begin
v_random:=(random()*50000)::integer;
v_start:=(to_char('2017-09-01'::date+v_random,'YYYY-MM')||'-01')::timestamp;
v_end:=(to_char('2017-09-01'::date+v_random,'YYYY-MM')||'-01')::DATE+'1 months'::interval;
select * into v_rec from t_time_range where f2>=v_start and f2<v_end;
return v_rec;
end;
$$
LANGUAGE plpgsql;
#pgbench sql脚本
[tbase@eg-9-117-182-250 pgbench]$ cat select_t_time_range.sql
select * from get_t_time_range();
#pgbench方法
pgbench -h 9.117.183.12 -p 15432 -d pgbench -U tbase -c 64 -j 1 -n -M prepared -T 60 -r -f select_t_time_range.sql > select_t_time_range.log 2>&1
#测试结果
scaling factor: 1
query mode: prepared
number of clients: 64
number of threads: 1
duration: 60 s
number of transactions actually processed: 1002843
latency average = 3.829 ms
tps = 16712.957914 (including connections establishing)
tps = 16713.547319 (excluding connections establishing)
script statistics:
- statement latencies in milliseconds:
3.813 select * from get_t_time_range();