34.8. Результаты тестов производительности #

В этом разделе приведены результаты стандартных аналитических тестов производительности TCP-H и TCP-DS. Вы можете использовать результаты этих тестов для планирования ресурсов, а также выделения вычислительных ресурсов.

Описание теста:

  • Размер данных: 100 ГБ. Соответствует коэффициенту масштабирования 100 в параметрах теста производительности.

  • Сервер: 64 виртуальных ядра и 128 ГБ оперативной памяти.

  • Ограничения:

    • Параметры конфигурации Postgres Pro не оказали влияния на результаты тестов производительности.

    • Для параметра конфигурации duckdb.max_memory было указано значение 32Gb. За более подробной информацией обратитесь к официальной документации Postgres Pro по параметрам конфигурации duckdb.max_memory / duckdb.memory_limit.

    • Для параметра конфигурации duckdb.threads было указано значение 8. За более подробной информацией обратитесь к официальной документации Postgres Pro по параметрам конфигурации duckdb.threads / duckdb.worker_threads.

В дополнение ко времени выполнения запросов были измерены системные метрики, описанные в таблице ниже.

Таблица 34.5. Системные метрики

Метрика

Единицы измерения

Описание

user time

Секунды

Количество секунд, в течение которых ЦП использовался процессом в режиме пользователя

sys time

Секунды

Количество секунд, в течение которых ЦП использовался процессом в режиме ядра

max RSS

МБ

Максимальный объём памяти, занимаемый процессом

avg RSS

МБ

Среднее количество памяти, занимаемое процессом

read IO

МБ

Объём данных, прочитанных процессом из хранилища

write IO

МБ

Объём данных, записанных процессом в хранилище


34.8.1. Подготовка тестовых данных и таблиц #

  1. Были сгенерированы тестовые данные в формате CSV. За более подробной информацией об используемых инструментах и процедуре в целом обратитесь к: https://tpc.org.

  2. CSV-файлы были загружены в таблицы куч Postgres Pro.

  3. Тестовые данные были экспортированы в Parquet-файлы, после чего для них были созданы представления.

    Обратите внимание, что при создании представлений вам нужно указать типы столбцов, соответствующие типам столбцов таблиц Postgres Pro. Это необходимо для нормального функционирования аналитических запросов.

34.8.2. Результаты теста производительности TCP-H #

Создание тестовых таблиц:

      COPY nation
    TO '/home/test/tpch_tables100/nation.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY region
    TO '/home/test/tpch_tables100/region.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY part
    TO '/home/test/tpch_tables100/part.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY supplierF
    TO '/home/test/tpch_tables100/supplier.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY partsupp
    TO '/home/test/tpch_tables100/partsupp.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY customer
    TO '/home/test/tpch_tables100/customer.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY orders
    TO '/home/test/tpch_tables100/orders.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY lineitem
    TO '/home/test/tpch_tables100/lineitem.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    CREATE VIEW nation_parquet AS SELECT
      r['n_nationkey']::integer AS n_nationkey,
      r['n_name']::text AS n_name,
      r['n_regionkey']::integer AS n_regionkey,
      r['n_comment']::text AS n_comment from
    read_parquet('/home/test/tpch_tables100/nation.parquet', binary_as_string => true) r;
    CREATE VIEW region_parquet AS SELECT
      r['r_regionkey']::integer AS r_regionkey,
      r['r_name']::text AS r_name,
      r['r_comment']::text AS r_comment from
    read_parquet('/home/test/tpch_tables100/region.parquet', binary_as_string => true) r;
    CREATE VIEW part_parquet AS SELECT
      r['p_partkey']::integer AS p_partkey,
      r['p_name']::text AS p_name,
      r['p_mfgr']::text AS p_mfgr,
      r['p_brand']::text AS p_brand,
      r['p_type']::text AS p_type,
      r['p_size']::integer AS p_size,
      r['p_container']::text AS p_container,
      r['p_retailprice']::decimal(15,2) AS p_retailprice,
      r['p_comment']::text AS p_comment from
    read_parquet('/home/test/tpch_tables100/part.parquet', binary_as_string => true) r;
    CREATE VIEW supplier_parquet AS SELECT
      r['s_suppkey']::integer AS s_suppkey,
      r['s_name']::text AS s_name,
      r['s_address']::text AS s_address,
      r['s_nationkey']::integer AS s_nationkey,
      r['s_phone']::text AS s_phone,
      r['s_acctbal']::decimal(15,2) AS s_acctbal,
      r['s_comment']::text AS s_comment from
    read_parquet('/home/test/tpch_tables100/supplier.parquet', binary_as_string => true) r;
    CREATE VIEW nation_parquet AS SELECT
      r['n_nationkey']::integer AS n_nationkey,
      r['n_name']::text AS n_name,
      r['n_regionkey']::integer AS n_regionkey,
      r['n_comment']::text AS n_comment from
    read_parquet('/home/test/tpch_tables100/nation.parquet', binary_as_string => true) r;
    CREATE VIEW region_parquet AS SELECT
      r['r_regionkey']::integer AS r_regionkey,
      r['r_name']::text AS r_name,
      r['r_comment']::text AS r_comment from
    read_parquet('/home/test/tpch_tables100/region.parquet', binary_as_string => true) r;
    CREATE VIEW part_parquet AS SELECT
      r['p_partkey']::integer AS p_partkey,
      r['p_name']::text AS p_name,
      r['p_mfgr']::text AS p_mfgr,
      r['p_brand']::text AS p_brand,
      r['p_type']::text AS p_type,
      r['p_size']::integer AS p_size,
      r['p_container']::text AS p_container,
      r['p_retailprice']::decimal(15,2) AS p_retailprice,
      r['p_comment']::text AS p_comment from
    read_parquet('/home/test/tpch_tables100/part.parquet', binary_as_string => true) r;
    CREATE VIEW supplier_parquet AS SELECT
      r['s_suppkey']::integer AS s_suppkey,
      r['s_name']::text AS s_name,
      r['s_address']::text AS s_address,
      r['s_nationkey']::integer AS s_nationkey,
      r['s_phone']::text AS s_phone,
      r['s_acctbal']::decimal(15,2) AS s_acctbal,
      r['s_comment']::text AS s_comment from
    read_parquet('/home/test/tpch_tables100/supplier.parquet', binary_as_string => true) r;
    CREATE VIEW lineitem_parquet AS SELECT
      r['l_orderkey']::integer AS l_orderkey,
      r['l_partkey']::integer AS l_partkey,
      r['l_suppkey']::integer AS l_suppkey,
      r['l_linenumber']::integer AS l_linenumber,
      r['l_quantity']::decimal(15,2) AS l_quantity,
      r['l_extendedprice']::decimal(15,2) AS l_extendedprice,
      r['l_discount']::decimal(15,2) AS l_discount,
      r['l_tax']::decimal(15,2) AS l_tax,
      r['l_returnflag']::text AS l_returnflag,
      r['l_linestatus']::text AS l_linestatus,
      r['l_shipdate']::date AS l_shipdate,
      r['l_commitdate']::date AS l_commitdate,
      r['l_receiptdate']::date AS l_receiptdate,
      r['l_shipinstruct']::text AS l_shipinstruct,
      r['l_shipmode']::text AS l_shipmode,
      r['l_comment']::text AS l_comment from
    read_parquet('/home/test/tpch_tables100/lineitem.parquet', binary_as_string => true) r;
  
 

Таблица 34.6. Данные теста производительности TCP-H

Таблица

Количество строк

customer

1 500 000

lineitem

59 985 781

nation

25

orders

15 000 000

part

2 000 000

partsupp

8 000 000

region

5

supplier

100 000

time_statistics

105


Таблица 34.7. Тест производительности TCP-H: результаты первого запуска теста

SF100 Parquet

Продолжительность (с)

user time (с)

sys time (с)

max RSS (МБ)

avg RSS (МБ)

read IO (МБ)

write IO (МБ)

Q1

0.51

1.96

0.16

92

61

150

0

Q2

0.25

0.03

0.05

59

20

31

0

Q3

0.39

1.18

0.18

110

76

205

0

Q4

0.34

0.41

0.11

101

46

97

0

Q5

0.42

0.83

0.18

120

63

181

0

Q6

0.3

0.67

0.12

80

40

144

0

Q7

0.46

1.18

0.25

125

74

244

0

Q8

0.5

1.06

0.25

132

77

227

0

Q9

0.54

1.66

0.23

309

180

287

0

Q10

0.5

1.09

0.21

129

68

197

0

Q11

0.31

0.34

0.08

100

46

55

0

Q12

0.37

1.25

0.17

91

64

156

0

Q13

0.27

0.43

0.2

247

84

95

0

Q14

0.51

0.62

0.18

563

141

153

0

Q15

0.44

1.4

0.27

128

76

217

0.008

Q16

0.25

0.07

0.06

93

31

38

0

Q17

0.41

1.33

0.34

214

113

247

0

Q18

0.45

1.56

0.31

326

159

101

0

Q19

0.47

1.38

0.27

129

80

277

0

Q20

0.38

0.64

0.16

119

57

186

0

Q21

0.71

2.56

0.61

687

314

196

0

Q22

0.22

0.06

0.04

69

23

36

0


Таблица 34.8. Тест производительности TCP-H: результаты второго запуска теста

SF100 Parquet

Продолжительность (с)

user time (с)

sys time (с)

max RSS (МБ)

avg RSS (МБ)

read IO (МБ)

write IO (МБ)

Q1

0.33

1.74

0.07

92

46

0

0

Q2

0.11

0.03

0.03

47

13

0

0

Q3

0.21

0.85

0.07

108

36

0

0

Q4

0.14

0.35

0.06

80

30

0

0

Q5

0.22

0.83

0.1

121

40

0

0

Q6

0.14

0.58

0.06

63

26

0

0

Q7

0.23

0.88

0.09

114

38

0

0

Q8

0.23

0.66

0.1

132

44

0.13

0

Q9

0.33

1.66

0.23

311

199

0

0

Q10

0.25

1.19

0.13

118

73

0

0

Q11

0.18

0.33

0.05

79

30

0

0

Q12

0.22

0.97

0.06

92

31

0

0

Q13

0.14

0.37

0.11

196

56

0

0

Q14

0.22

0.38

0.08

114

38

0

0

Q15

0.23

0.93

0.09

128

43

0

0

Q16

0.13

0.06

0.03

74

21

0

0

Q17

0.25

1.36

0.24

271

148

0

0

Q18

0.31

1.72

0.24

320

173

0

0

Q19

0.25

1.37

0.12

126

72

0.13

0

Q20

0.16

0.77

0.11

122

61

0

0

Q21

0.49

2.51

0.57

690

406

0.13

0

Q22

0.09

0.05

0.02

55

15

0

0


34.8.3. Результаты теста производительности TCP-DS #

Создание тестовых таблиц:

      COPY dbgen_version
    TO '/home/test/tpcds_tables100/dbgen_version.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY customer_address
    TO '/home/test/tpcds_tables100/customer_address.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY customer_demographics
    TO '/home/test/tpcds_tables100/customer_demographics.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY date_dim
    TO '/home/test/tpcds_tables100/date_dim.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY warehouse
    TO '/home/test/tpcds_tables100/warehouse.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY ship_mode
    TO '/home/test/tpcds_tables100/ship_mode.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY time_dim
    TO '/home/test/tpcds_tables100/time_dim.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY reason
    TO '/home/test/tpcds_tables100/reason.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY income_band
    TO '/home/test/tpcds_tables100/income_band.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY item
    TO '/home/test/tpcds_tables100/item.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY store
    TO '/home/test/tpcds_tables100/store.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY call_center
    TO '/home/test/tpcds_tables100/call_center.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY customer
    TO '/home/test/tpcds_tables100/customer.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY web_site
    TO '/home/test/tpcds_tables100/web_site.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY store_returns
    TO '/home/test/tpcds_tables100/store_returns.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY household_demographics
    TO '/home/test/tpcds_tables100/household_demographics.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY web_page
    TO '/home/test/tpcds_tables100/web_page.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY promotion
    TO '/home/test/tpcds_tables100/promotion.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY catalog_page
    TO '/home/test/tpcds_tables100/catalog_page.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY inventory
    TO '/home/test/tpcds_tables100/inventory.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY catalog_returns
    TO '/home/test/tpcds_tables100/catalog_returns.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY web_returns
    TO '/home/test/tpcds_tables100/web_returns.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY web_sales
    TO '/home/test/tpcds_tables100/web_sales.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY catalog_sales
    TO '/home/test/tpcds_tables100/catalog_sales.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    COPY store_sales
    TO '/home/test/tpcds_tables100/store_sales.parquet'
    (FORMAT 'parquet', COMPRESSION 'zstd');

    CREATE VIEW dbgen_version_parquet AS SELECT
      r['dv_version']::text AS dv_version,
      r['dv_create_date']::date AS dv_create_date,
      r['dv_create_time']::time AS dv_create_time,
      r['dv_cmdline_args']::text AS dv_cmdline_args from
    read_parquet('/home/test/tpcds_tables100/dbgen_version.parquet', binary_as_string => true) r;
    CREATE VIEW customer_address_parquet AS SELECT
      r['ca_address_sk']::integer AS ca_address_sk,
      r['ca_address_id']::text AS ca_address_id,
      r['ca_street_number']::text AS ca_street_number,
      r['ca_street_name']::text AS ca_street_name,
      r['ca_street_type']::text AS ca_street_type,
      r['ca_suite_number']::text AS ca_suite_number,
      r['ca_city']::text AS ca_city,
      r['ca_county']::text AS ca_county,
      r['ca_state']::text AS ca_state,
      r['ca_zip']::text AS ca_zip,
      r['ca_country']::text AS ca_country,
      r['ca_gmt_offset']::decimal(5,2) AS ca_gmt_offset,
      r['ca_location_type']::text AS ca_location_type from
    read_parquet('/home/test/tpcds_tables100/customer_address.parquet', binary_as_string => true) r;
    CREATE VIEW customer_demographics_parquet AS SELECT
      r['cd_demo_sk']::integer AS cd_demo_sk,
      r['cd_gender']::text AS cd_gender,
      r['cd_marital_status']::text AS cd_marital_status,
      r['cd_education_status']::text AS cd_education_status,
      r['cd_purchase_estimate']::integer AS cd_purchase_estimate,
      r['cd_credit_rating']::text AS cd_credit_rating,
      r['cd_dep_count']::integer AS cd_dep_count,
      r['cd_dep_employed_count']::integer AS cd_dep_employed_count,
      r['cd_dep_college_count']::integer AS cd_dep_college_count from
    read_parquet('/home/test/tpcds_tables100/customer_demographics.parquet', binary_as_string => true) r;
    CREATE VIEW date_dim_parquet AS SELECT
      r['d_date_sk']::integer AS d_date_sk,
      r['d_date_id']::text AS d_date_id,
      r['d_date']::date AS d_date,
      r['d_month_seq']::integer AS d_month_seq,
      r['d_week_seq']::integer AS d_week_seq,
      r['d_quarter_seq']::integer AS d_quarter_seq,
      r['d_year']::integer AS d_year,
      r['d_dow']::integer AS d_dow,
      r['d_moy']::integer AS d_moy,
      r['d_dom']::integer AS d_dom,
      r['d_qoy']::integer AS d_qoy,
      r['d_fy_year']::integer AS d_fy_year,
      r['d_fy_quarter_seq']::integer AS d_fy_quarter_seq,
      r['d_fy_week_seq']::integer AS d_fy_week_seq,
      r['d_day_name']::text AS d_day_name,
      r['d_quarter_name']::text AS d_quarter_name,
      r['d_holiday']::text AS d_holiday,
      r['d_weekend']::text AS d_weekend,
      r['d_following_holiday']::text AS d_following_holiday,
      r['d_first_dom']::integer AS d_first_dom,
      r['d_last_dom']::integer AS d_last_dom,
      r['d_same_day_ly']::integer AS d_same_day_ly,
      r['d_same_day_lq']::integer AS d_same_day_lq,
      r['d_current_day']::text AS d_current_day,
      r['d_current_week']::text AS d_current_week,
      r['d_current_month']::text AS d_current_month,
      r['d_current_quarter']::text AS d_current_quarter,
      r['d_current_year']::text AS d_current_year from
    read_parquet('/home/test/tpcds_tables100/date_dim.parquet', binary_as_string => true) r;
    CREATE VIEW warehouse_parquet AS SELECT
      r['w_warehouse_sk']::integer AS w_warehouse_sk,
      r['w_warehouse_id']::text AS w_warehouse_id,
      r['w_warehouse_name']::text AS w_warehouse_name,
      r['w_warehouse_sq_ft']::integer AS w_warehouse_sq_ft,
      r['w_street_number']::text AS w_street_number,
      r['w_street_name']::text AS w_street_name,
      r['w_street_type']::text AS w_street_type,
      r['w_suite_number']::text AS w_suite_number,
      r['w_city']::text AS w_city,
      r['w_county']::text AS w_county,
      r['w_state']::text AS w_state,
      r['w_zip']::text AS w_zip,
      r['w_country']::text AS w_country,
      r['w_gmt_offset']::decimal(5,2) AS w_gmt_offset from
    read_parquet('/home/test/tpcds_tables100/warehouse.parquet', binary_as_string => true) r;
    CREATE VIEW ship_mode_parquet AS SELECT
      r['sm_ship_mode_sk']::integer AS sm_ship_mode_sk,
      r['sm_ship_mode_id']::text AS sm_ship_mode_id,
      r['sm_type']::text AS sm_type,
      r['sm_code']::text AS sm_code,
      r['sm_carrier']::text AS sm_carrier,
      r['sm_contract']::text AS sm_contract from
    read_parquet('/home/test/tpcds_tables100/ship_mode.parquet', binary_as_string => true) r;
    CREATE VIEW time_dim_parquet AS SELECT
      r['t_time_sk']::integer AS t_time_sk,
      r['t_time_id']::text AS t_time_id,
      r['t_time']::integer AS t_time,
      r['t_hour']::integer AS t_hour,
      r['t_minute']::integer AS t_minute,
      r['t_second']::integer AS t_second,
      r['t_am_pm']::text AS t_am_pm,
      r['t_shift']::text AS t_shift,
      r['t_sub_shift']::text AS t_sub_shift,
      r['t_meal_time']::text AS t_meal_time from
    read_parquet('/home/test/tpcds_tables100/time_dim.parquet', binary_as_string => true) r;
    CREATE VIEW reason_parquet AS SELECT
      r['r_reason_sk']::integer AS r_reason_sk,
      r['r_reason_id']::text AS r_reason_id,
      r['r_reason_desc']::text AS r_reason_desc from
    read_parquet('/home/test/tpcds_tables100/reason.parquet', binary_as_string => true) r;
    CREATE VIEW income_band_parquet AS SELECT
      r['ib_income_band_sk']::integer AS ib_income_band_sk,
      r['ib_lower_bound']::integer AS ib_lower_bound,
      r['ib_upper_bound']::integer AS ib_upper_bound from
    read_parquet('/home/test/tpcds_tables100/income_band.parquet', binary_as_string => true) r;
    CREATE VIEW item_parquet AS SELECT
      r['i_item_sk']::integer AS i_item_sk,
      r['i_item_id']::text AS i_item_id,
      r['i_rec_start_date']::date AS i_rec_start_date,
      r['i_rec_end_date']::date AS i_rec_end_date,
      r['i_item_desc']::text AS i_item_desc,
      r['i_current_price']::decimal(7,2) AS i_current_price,
      r['i_wholesale_cost']::decimal(7,2) AS i_wholesale_cost,
      r['i_brand_id']::integer AS i_brand_id,
      r['i_brand']::text AS i_brand,
      r['i_class_id']::integer AS i_class_id,
      r['i_class']::text AS i_class,
      r['i_category_id']::integer AS i_category_id,
      r['i_category']::text AS i_category,
      r['i_manufact_id']::integer AS i_manufact_id,
      r['i_manufact']::text AS i_manufact,
      r['i_size']::text AS i_size,
      r['i_formulation']::text AS i_formulation,
      r['i_color']::text AS i_color,
      r['i_units']::text AS i_units,
      r['i_container']::text AS i_container,
      r['i_manager_id']::integer AS i_manager_id,
      r['i_product_name']::text AS i_product_name from
    read_parquet('/home/test/tpcds_tables100/item.parquet', binary_as_string => true) r;
    CREATE VIEW store_parquet AS SELECT
      r['s_store_sk']::integer AS s_store_sk,
      r['s_store_id']::text AS s_store_id,
      r['s_rec_start_date']::date AS s_rec_start_date,
      r['s_rec_end_date']::date AS s_rec_end_date,
      r['s_closed_date_sk']::integer AS s_closed_date_sk,
      r['s_store_name']::text AS s_store_name,
      r['s_number_employees']::integer AS s_number_employees,
      r['s_floor_space']::integer AS s_floor_space,
      r['s_hours']::text AS s_hours,
      r['s_manager']::text AS s_manager,
      r['s_market_id']::integer AS s_market_id,
      r['s_geography_class']::text AS s_geography_class,
      r['s_market_desc']::text AS s_market_desc,
      r['s_market_manager']::text AS s_market_manager,
      r['s_division_id']::integer AS s_division_id,
      r['s_division_name']::text AS s_division_name,
      r['s_company_id']::integer AS s_company_id,
      r['s_company_name']::text AS s_company_name,
      r['s_street_number']::text AS s_street_number,
      r['s_street_name']::text AS s_street_name,
      r['s_street_type']::text AS s_street_type,
      r['s_suite_number']::text AS s_suite_number,
      r['s_city']::text AS s_city,
      r['s_county']::text AS s_county,
      r['s_state']::text AS s_state,
      r['s_zip']::text AS s_zip,
      r['s_country']::text AS s_country,
      r['s_gmt_offset']::decimal(5,2) AS s_gmt_offset,
      r['s_tax_precentage']::decimal(5,2) AS s_tax_precentage from
    read_parquet('/home/test/tpcds_tables100/store.parquet', binary_as_string => true) r;
    CREATE VIEW call_center_parquet AS SELECT
      r['cc_call_center_sk']::integer AS cc_call_center_sk,
      r['cc_call_center_id']::text AS cc_call_center_id,
      r['cc_rec_start_date']::date AS cc_rec_start_date,
      r['cc_rec_end_date']::date AS cc_rec_end_date,
      r['cc_closed_date_sk']::integer AS cc_closed_date_sk,
      r['cc_open_date_sk']::integer AS cc_open_date_sk,
      r['cc_name']::text AS cc_name,
      r['cc_class']::text AS cc_class,
      r['cc_employees']::integer AS cc_employees,
      r['cc_sq_ft']::integer AS cc_sq_ft,
      r['cc_hours']::text AS cc_hours,
      r['cc_manager']::text AS cc_manager,
      r['cc_mkt_id']::integer AS cc_mkt_id,
      r['cc_mkt_class']::text AS cc_mkt_class,
      r['cc_mkt_desc']::text AS cc_mkt_desc,
      r['cc_market_manager']::text AS cc_market_manager,
      r['cc_division']::integer AS cc_division,
      r['cc_division_name']::text AS cc_division_name,
      r['cc_company']::integer AS cc_company,
      r['cc_company_name']::text AS cc_company_name,
      r['cc_street_number']::text AS cc_street_number,
      r['cc_street_name']::text AS cc_street_name,
      r['cc_street_type']::text AS cc_street_type,
      r['cc_suite_number']::text AS cc_suite_number,
      r['cc_city']::text AS cc_city,
      r['cc_county']::text AS cc_county,
      r['cc_state']::text AS cc_state,
      r['cc_zip']::text AS cc_zip,
      r['cc_country']::text AS cc_country,
      r['cc_gmt_offset']::decimal(5,2) AS cc_gmt_offset,
      r['cc_tax_percentage']::decimal(5,2) AS cc_tax_percentage from
    read_parquet('/home/test/tpcds_tables100/call_center.parquet', binary_as_string => true) r;
    CREATE VIEW customer_parquet AS SELECT
      r['c_customer_sk']::integer AS c_customer_sk,
      r['c_customer_id']::text AS c_customer_id,
      r['c_current_cdemo_sk']::integer AS c_current_cdemo_sk,
      r['c_current_hdemo_sk']::integer AS c_current_hdemo_sk,
      r['c_current_addr_sk']::integer AS c_current_addr_sk,
      r['c_first_shipto_date_sk']::integer AS c_first_shipto_date_sk,
      r['c_first_sales_date_sk']::integer AS c_first_sales_date_sk,
      r['c_salutation']::text AS c_salutation,
      r['c_first_name']::text AS c_first_name,
      r['c_last_name']::text AS c_last_name,
      r['c_preferred_cust_flag']::text AS c_preferred_cust_flag,
      r['c_birth_day']::integer AS c_birth_day,
      r['c_birth_month']::integer AS c_birth_month,
      r['c_birth_year']::integer AS c_birth_year,
      r['c_birth_country']::text AS c_birth_country,
      r['c_login']::text AS c_login,
      r['c_email_address']::text AS c_email_address,
      r['c_last_review_date_sk']::integer AS c_last_review_date_sk from
    read_parquet('/home/test/tpcds_tables100/customer.parquet', binary_as_string => true) r;
    CREATE VIEW web_site_parquet AS SELECT
      r['web_site_sk']::integer AS web_site_sk,
      r['web_site_id']::text AS web_site_id,
      r['web_rec_start_date']::date AS web_rec_start_date,
      r['web_rec_end_date']::date AS web_rec_end_date,
      r['web_name']::text AS web_name,
      r['web_open_date_sk']::integer AS web_open_date_sk,
      r['web_close_date_sk']::integer AS web_close_date_sk,
      r['web_class']::text AS web_class,
      r['web_manager']::text AS web_manager,
      r['web_mkt_id']::integer AS web_mkt_id,
      r['web_mkt_class']::text AS web_mkt_class,
      r['web_mkt_desc']::text AS web_mkt_desc,
      r['web_market_manager']::text AS web_market_manager,
      r['web_company_id']::integer AS web_company_id,
      r['web_company_name']::text AS web_company_name,
      r['web_street_number']::text AS web_street_number,
      r['web_street_name']::text AS web_street_name,
      r['web_street_type']::text AS web_street_type,
      r['web_suite_number']::text AS web_suite_number,
      r['web_city']::text AS web_city,
      r['web_county']::text AS web_county,
      r['web_state']::text AS web_state,
      r['web_zip']::text AS web_zip,
      r['web_country']::text AS web_country,
      r['web_gmt_offset']::decimal(5,2) AS web_gmt_offset,
      r['web_tax_percentage']::decimal(5,2) AS web_tax_percentage from
    read_parquet('/home/test/tpcds_tables100/web_site.parquet', binary_as_string => true) r;
    CREATE VIEW store_returns_parquet AS SELECT
      r['sr_returned_date_sk']::integer AS sr_returned_date_sk,
      r['sr_return_time_sk']::integer AS sr_return_time_sk,
      r['sr_item_sk']::integer AS sr_item_sk,
      r['sr_customer_sk']::integer AS sr_customer_sk,
      r['sr_cdemo_sk']::integer AS sr_cdemo_sk,
      r['sr_hdemo_sk']::integer AS sr_hdemo_sk,
      r['sr_addr_sk']::integer AS sr_addr_sk,
      r['sr_store_sk']::integer AS sr_store_sk,
      r['sr_reason_sk']::integer AS sr_reason_sk,
      r['sr_ticket_number']::integer AS sr_ticket_number,
      r['sr_return_quantity']::integer AS sr_return_quantity,
      r['sr_return_amt']::decimal(7,2) AS sr_return_amt,
      r['sr_return_tax']::decimal(7,2) AS sr_return_tax,
      r['sr_return_amt_inc_tax']::decimal(7,2) AS sr_return_amt_inc_tax,
      r['sr_fee']::decimal(7,2) AS sr_fee,
      r['sr_return_ship_cost']::decimal(7,2) AS sr_return_ship_cost,
      r['sr_refunded_cash']::decimal(7,2) AS sr_refunded_cash,
      r['sr_reversed_charge']::decimal(7,2) AS sr_reversed_charge,
      r['sr_store_credit']::decimal(7,2) AS sr_store_credit,
      r['sr_net_loss']::decimal(7,2) AS sr_net_loss from
    read_parquet('/home/test/tpcds_tables100/store_returns.parquet', binary_as_string => true) r;
    CREATE VIEW household_demographics_parquet AS SELECT
      r['hd_demo_sk']::integer AS hd_demo_sk,
      r['hd_income_band_sk']::integer AS hd_income_band_sk,
      r['hd_buy_potential']::text AS hd_buy_potential,
      r['hd_dep_count']::integer AS hd_dep_count,
      r['hd_vehicle_count']::integer AS hd_vehicle_count from
    read_parquet('/home/test/tpcds_tables100/household_demographics.parquet', binary_as_string => true) r;
    CREATE VIEW web_page_parquet AS SELECT
      r['wp_web_page_sk']::integer AS wp_web_page_sk,
      r['wp_web_page_id']::text AS wp_web_page_id,
      r['wp_rec_start_date']::date AS wp_rec_start_date,
      r['wp_rec_end_date']::date AS wp_rec_end_date,
      r['wp_creation_date_sk']::integer AS wp_creation_date_sk,
      r['wp_access_date_sk']::integer AS wp_access_date_sk,
      r['wp_autogen_flag']::text AS wp_autogen_flag,
      r['wp_customer_sk']::integer AS wp_customer_sk,
      r['wp_url']::text AS wp_url,
      r['wp_type']::text AS wp_type,
      r['wp_char_count']::integer AS wp_char_count,
      r['wp_link_count']::integer AS wp_link_count,
      r['wp_image_count']::integer AS wp_image_count,
      r['wp_max_ad_count']::integer AS wp_max_ad_count from
    read_parquet('/home/test/tpcds_tables100/web_page.parquet', binary_as_string => true) r;
    CREATE VIEW promotion_parquet AS SELECT
      r['p_promo_sk']::integer AS p_promo_sk,
      r['p_promo_id']::text AS p_promo_id,
      r['p_start_date_sk']::integer AS p_start_date_sk,
      r['p_end_date_sk']::integer AS p_end_date_sk,
      r['p_item_sk']::integer AS p_item_sk,
      r['p_cost']::decimal(15,2) AS p_cost,
      r['p_response_target']::integer AS p_response_target,
      r['p_promo_name']::text AS p_promo_name,
      r['p_channel_dmail']::text AS p_channel_dmail,
      r['p_channel_email']::text AS p_channel_email,
      r['p_channel_catalog']::text AS p_channel_catalog,
      r['p_channel_tv']::text AS p_channel_tv,
      r['p_channel_radio']::text AS p_channel_radio,
      r['p_channel_press']::text AS p_channel_press,
      r['p_channel_event']::text AS p_channel_event,
      r['p_channel_demo']::text AS p_channel_demo,
      r['p_channel_details']::text AS p_channel_details,
      r['p_purpose']::text AS p_purpose,
      r['p_discount_active']::text AS p_discount_active from
    read_parquet('/home/test/tpcds_tables100/promotion.parquet', binary_as_string => true) r;
    CREATE VIEW catalog_page_parquet AS SELECT
      r['cp_catalog_page_sk']::integer AS cp_catalog_page_sk,
      r['cp_catalog_page_id']::text AS cp_catalog_page_id,
      r['cp_start_date_sk']::integer AS cp_start_date_sk,
      r['cp_end_date_sk']::integer AS cp_end_date_sk,
      r['cp_department']::text AS cp_department,
      r['cp_catalog_number']::integer AS cp_catalog_number,
      r['cp_catalog_page_number']::integer AS cp_catalog_page_number,
      r['cp_description']::text AS cp_description,
      r['cp_type']::text AS cp_type from
    read_parquet('/home/test/tpcds_tables100/catalog_page.parquet', binary_as_string => true) r;
    CREATE VIEW inventory_parquet AS SELECT
      r['inv_date_sk']::integer AS inv_date_sk,
      r['inv_item_sk']::integer AS inv_item_sk,
      r['inv_warehouse_sk']::integer AS inv_warehouse_sk,
      r['inv_quantity_on_hand']::integer AS inv_quantity_on_hand from
    read_parquet('/home/test/tpcds_tables100/inventory.parquet', binary_as_string => true) r;
    CREATE VIEW catalog_returns_parquet AS SELECT
      r['cr_returned_date_sk']::integer AS cr_returned_date_sk,
      r['cr_returned_time_sk']::integer AS cr_returned_time_sk,
      r['cr_item_sk']::integer AS cr_item_sk,
      r['cr_refunded_customer_sk']::integer AS cr_refunded_customer_sk,
      r['cr_refunded_cdemo_sk']::integer AS cr_refunded_cdemo_sk,
      r['cr_refunded_hdemo_sk']::integer AS cr_refunded_hdemo_sk,
      r['cr_refunded_addr_sk']::integer AS cr_refunded_addr_sk,
      r['cr_returning_customer_sk']::integer AS cr_returning_customer_sk,
      r['cr_returning_cdemo_sk']::integer AS cr_returning_cdemo_sk,
      r['cr_returning_hdemo_sk']::integer AS cr_returning_hdemo_sk,
      r['cr_returning_addr_sk']::integer AS cr_returning_addr_sk,
      r['cr_call_center_sk']::integer AS cr_call_center_sk,
      r['cr_catalog_page_sk']::integer AS cr_catalog_page_sk,
      r['cr_ship_mode_sk']::integer AS cr_ship_mode_sk,
      r['cr_warehouse_sk']::integer AS cr_warehouse_sk,
      r['cr_reason_sk']::integer AS cr_reason_sk,
      r['cr_order_number']::integer AS cr_order_number,
      r['cr_return_quantity']::integer AS cr_return_quantity,
      r['cr_return_amount']::decimal(7,2) AS cr_return_amount,
      r['cr_return_tax']::decimal(7,2) AS cr_return_tax,
      r['cr_return_amt_inc_tax']::decimal(7,2) AS cr_return_amt_inc_tax,
      r['cr_fee']::decimal(7,2) AS cr_fee,
      r['cr_return_ship_cost']::decimal(7,2) AS cr_return_ship_cost,
      r['cr_refunded_cash']::decimal(7,2) AS cr_refunded_cash,
      r['cr_reversed_charge']::decimal(7,2) AS cr_reversed_charge,
      r['cr_store_credit']::decimal(7,2) AS cr_store_credit,
      r['cr_net_loss']::decimal(7,2) AS cr_net_loss from
    read_parquet('/home/test/tpcds_tables100/catalog_returns.parquet', binary_as_string => true) r;
    CREATE VIEW web_returns_parquet AS SELECT
      r['wr_returned_date_sk']::integer AS wr_returned_date_sk,
      r['wr_returned_time_sk']::integer AS wr_returned_time_sk,
      r['wr_item_sk']::integer AS wr_item_sk,
      r['wr_refunded_customer_sk']::integer AS wr_refunded_customer_sk,
      r['wr_refunded_cdemo_sk']::integer AS wr_refunded_cdemo_sk,
      r['wr_refunded_hdemo_sk']::integer AS wr_refunded_hdemo_sk,
      r['wr_refunded_addr_sk']::integer AS wr_refunded_addr_sk,
      r['wr_returning_customer_sk']::integer AS wr_returning_customer_sk,
      r['wr_returning_cdemo_sk']::integer AS wr_returning_cdemo_sk,
      r['wr_returning_hdemo_sk']::integer AS wr_returning_hdemo_sk,
      r['wr_returning_addr_sk']::integer AS wr_returning_addr_sk,
      r['wr_web_page_sk']::integer AS wr_web_page_sk,
      r['wr_reason_sk']::integer AS wr_reason_sk,
      r['wr_order_number']::integer AS wr_order_number,
      r['wr_return_quantity']::integer AS wr_return_quantity,
      r['wr_return_amt']::decimal(7,2) AS wr_return_amt,
      r['wr_return_tax']::decimal(7,2) AS wr_return_tax,
      r['wr_return_amt_inc_tax']::decimal(7,2) AS wr_return_amt_inc_tax,
      r['wr_fee']::decimal(7,2) AS wr_fee,
      r['wr_return_ship_cost']::decimal(7,2) AS wr_return_ship_cost,
      r['wr_refunded_cash']::decimal(7,2) AS wr_refunded_cash,
      r['wr_reversed_charge']::decimal(7,2) AS wr_reversed_charge,
      r['wr_account_credit']::decimal(7,2) AS wr_account_credit,
      r['wr_net_loss']::decimal(7,2) AS wr_net_loss from
    read_parquet('/home/test/tpcds_tables100/web_returns.parquet', binary_as_string => true) r;
    CREATE VIEW web_sales_parquet AS SELECT
      r['ws_sold_date_sk']::integer AS ws_sold_date_sk,
      r['ws_sold_time_sk']::integer AS ws_sold_time_sk,
      r['ws_ship_date_sk']::integer AS ws_ship_date_sk,
      r['ws_item_sk']::integer AS ws_item_sk,
      r['ws_bill_customer_sk']::integer AS ws_bill_customer_sk,
      r['ws_bill_cdemo_sk']::integer AS ws_bill_cdemo_sk,
      r['ws_bill_hdemo_sk']::integer AS ws_bill_hdemo_sk,
      r['ws_bill_addr_sk']::integer AS ws_bill_addr_sk,
      r['ws_ship_customer_sk']::integer AS ws_ship_customer_sk,
      r['ws_ship_cdemo_sk']::integer AS ws_ship_cdemo_sk,
      r['ws_ship_hdemo_sk']::integer AS ws_ship_hdemo_sk,
      r['ws_ship_addr_sk']::integer AS ws_ship_addr_sk,
      r['ws_web_page_sk']::integer AS ws_web_page_sk,
      r['ws_web_site_sk']::integer AS ws_web_site_sk,
      r['ws_ship_mode_sk']::integer AS ws_ship_mode_sk,
      r['ws_warehouse_sk']::integer AS ws_warehouse_sk,
      r['ws_promo_sk']::integer AS ws_promo_sk,
      r['ws_order_number']::integer AS ws_order_number,
      r['ws_quantity']::integer AS ws_quantity,
      r['ws_wholesale_cost']::decimal(7,2) AS ws_wholesale_cost,
      r['ws_list_price']::decimal(7,2) AS ws_list_price,
      r['ws_sales_price']::decimal(7,2) AS ws_sales_price,
      r['ws_ext_discount_amt']::decimal(7,2) AS ws_ext_discount_amt,
      r['ws_ext_sales_price']::decimal(7,2) AS ws_ext_sales_price,
      r['ws_ext_wholesale_cost']::decimal(7,2) AS ws_ext_wholesale_cost,
      r['ws_ext_list_price']::decimal(7,2) AS ws_ext_list_price,
      r['ws_ext_tax']::decimal(7,2) AS ws_ext_tax,
      r['ws_coupon_amt']::decimal(7,2) AS ws_coupon_amt,
      r['ws_ext_ship_cost']::decimal(7,2) AS ws_ext_ship_cost,
      r['ws_net_paid']::decimal(7,2) AS ws_net_paid,
      r['ws_net_paid_inc_tax']::decimal(7,2) AS ws_net_paid_inc_tax,
      r['ws_net_paid_inc_ship']::decimal(7,2) AS ws_net_paid_inc_ship,
      r['ws_net_paid_inc_ship_tax']::decimal(7,2) AS ws_net_paid_inc_ship_tax,
      r['ws_net_profit']::decimal(7,2) AS ws_net_profit from
    read_parquet('/home/test/tpcds_tables100/web_sales.parquet', binary_as_string => true) r;
    CREATE VIEW catalog_sales_parquet AS SELECT
      r['cs_sold_date_sk']::integer AS cs_sold_date_sk,
      r['cs_sold_time_sk']::integer AS cs_sold_time_sk,
      r['cs_ship_date_sk']::integer AS cs_ship_date_sk,
      r['cs_bill_customer_sk']::integer AS cs_bill_customer_sk,
      r['cs_bill_cdemo_sk']::integer AS cs_bill_cdemo_sk,
      r['cs_bill_hdemo_sk']::integer AS cs_bill_hdemo_sk,
      r['cs_bill_addr_sk']::integer AS cs_bill_addr_sk,
      r['cs_ship_customer_sk']::integer AS cs_ship_customer_sk,
      r['cs_ship_cdemo_sk']::integer AS cs_ship_cdemo_sk,
      r['cs_ship_hdemo_sk']::integer AS cs_ship_hdemo_sk,
      r['cs_ship_addr_sk']::integer AS cs_ship_addr_sk,
      r['cs_call_center_sk']::integer AS cs_call_center_sk,
      r['cs_catalog_page_sk']::integer AS cs_catalog_page_sk,
      r['cs_ship_mode_sk']::integer AS cs_ship_mode_sk,
      r['cs_warehouse_sk']::integer AS cs_warehouse_sk,
      r['cs_item_sk']::integer AS cs_item_sk,
      r['cs_promo_sk']::integer AS cs_promo_sk,
      r['cs_order_number']::integer AS cs_order_number,
      r['cs_quantity']::integer AS cs_quantity,
      r['cs_wholesale_cost']::decimal(7,2) AS cs_wholesale_cost,
      r['cs_list_price']::decimal(7,2) AS cs_list_price,
      r['cs_sales_price']::decimal(7,2) AS cs_sales_price,
      r['cs_ext_discount_amt']::decimal(7,2) AS cs_ext_discount_amt,
      r['cs_ext_sales_price']::decimal(7,2) AS cs_ext_sales_price,
      r['cs_ext_wholesale_cost']::decimal(7,2) AS cs_ext_wholesale_cost,
      r['cs_ext_list_price']::decimal(7,2) AS cs_ext_list_price,
      r['cs_ext_tax']::decimal(7,2) AS cs_ext_tax,
      r['cs_coupon_amt']::decimal(7,2) AS cs_coupon_amt,
      r['cs_ext_ship_cost']::decimal(7,2) AS cs_ext_ship_cost,
      r['cs_net_paid']::decimal(7,2) AS cs_net_paid,
      r['cs_net_paid_inc_tax']::decimal(7,2) AS cs_net_paid_inc_tax,
      r['cs_net_paid_inc_ship']::decimal(7,2) AS cs_net_paid_inc_ship,
      r['cs_net_paid_inc_ship_tax']::decimal(7,2) AS cs_net_paid_inc_ship_tax,
      r['cs_net_profit']::decimal(7,2) AS cs_net_profit from
    read_parquet('/home/test/tpcds_tables100/catalog_sales.parquet', binary_as_string => true) r;
    CREATE VIEW store_sales_parquet AS SELECT
      r['ss_sold_date_sk']::integer AS ss_sold_date_sk,
      r['ss_sold_time_sk']::integer AS ss_sold_time_sk,
      r['ss_item_sk']::integer AS ss_item_sk,
      r['ss_customer_sk']::integer AS ss_customer_sk,
      r['ss_cdemo_sk']::integer AS ss_cdemo_sk,
      r['ss_hdemo_sk']::integer AS ss_hdemo_sk,
      r['ss_addr_sk']::integer AS ss_addr_sk,
      r['ss_store_sk']::integer AS ss_store_sk,
      r['ss_promo_sk']::integer AS ss_promo_sk,
      r['ss_ticket_number']::integer AS ss_ticket_number,
      r['ss_quantity']::integer AS ss_quantity,
      r['ss_wholesale_cost']::decimal(7,2) AS ss_wholesale_cost,
      r['ss_list_price']::decimal(7,2) AS ss_list_price,
      r['ss_sales_price']::decimal(7,2) AS ss_sales_price,
      r['ss_ext_discount_amt']::decimal(7,2) AS ss_ext_discount_amt,
      r['ss_ext_sales_price']::decimal(7,2) AS ss_ext_sales_price,
      r['ss_ext_wholesale_cost']::decimal(7,2) AS ss_ext_wholesale_cost,
      r['ss_ext_list_price']::decimal(7,2) AS ss_ext_list_price,
      r['ss_ext_tax']::decimal(7,2) AS ss_ext_tax,
      r['ss_coupon_amt']::decimal(7,2) AS ss_coupon_amt,
      r['ss_net_paid']::decimal(7,2) AS ss_net_paid,
      r['ss_net_paid_inc_tax']::decimal(7,2) AS ss_net_paid_inc_tax,
      r['ss_net_profit']::decimal(7,2) AS ss_net_profit from
    read_parquet('/home/test/tpcds_tables100/store_sales.parquet', binary_as_string => true) r;
  
 

Таблица 34.9. Данные теста производительности TCP-DS

Таблица

Количество строк

call_center

30

catalog_page

20400

catalog_returns

14 404 374

catalog_sales

143 997 065

customer_address

1 000 000

customer_demographics

1 920 800

customer

2 000 000

date_dim

73049

household_demographics

7200

income_band

20

inventory

399 330 000

item

204 000

promotion

1000

reason

55

ship_mode

20

store

402

store_returns

28 795 080

store_sales

287 997 024

time_dim

86400

warehouse

15

web_page

2040

web_returns

7 197 670

web_sales

72 001 237

web_site

24


Таблица 34.10. Тест производительности TCP-DS: результаты первого запуска теста

SF100 Parquet

Продолжительность (с)

user time (с)

sys time (с)

max RSS (МБ)

avg RSS (МБ)

read IO (МБ)

write IO (МБ)

Q1

2.29

4.52

8.87

1204

495

466

0

Q2

2.99

11.16

1.11

143

130

1084

0

Q3

3.28

9.34

2.14

119

111

2146

0

Q4

18.86

94.62

26.26

3787

2665

6172

0

Q5

7.13

20.25

4.03

588

319

4244

0

Q6

2.93

8.34

1.73

543

170

1565

0

Q7

5.54

24.81

3.75

287

216

4526

0

Q8

2.34

7.92

1.43

179

157

1451

0

Q9

19.58

122.32

5.66

678

652

2845

0

Q10

2.11

7.26

1.01

208

177

868

0

Q11

11.51

62.73

5.66

2705

2071

3165

0

Q12

0.94

1.8

0.61

179

103

568

0

Q13

7.35

34.44

5.05

357

338

5841

0

Q14

60

349.02

42.86

12492

6061

4065

0

Q15

0.62

1.22

0.33

329

174

78

0

Q16

0.94

2.12

0.7

639

238

165

0

Q17

5.23

19.3

3.38

1005

583

2827

0

Q18

2.22

3.55

0.95

1288

400

572

0

Q19

3.84

13.13

2.62

329

283

2804

0

Q20

0.46

0.52

0.16

214

101

54

0

Q21

0.39

0.29

0.11

125

42

48

0

Q22

24.12

97.97

86.39

32803

21644

330

2801

Q23

44.43

287.1

36.81

14943

6137

3598

0

Q24

9.95

52.08

7.07

4506

3048

2806

0

Q25

4.72

16.95

3.57

781

494

3030

0

Q26

1.04

2.73

0.59

200

134

449

0

Q27

5.38

21.96

3.8

200

172

4163

0

Q28

12.72

79.82

5

330

313

2534

0

Q29

5.32

20.89

3.23

399

285

3216

0

Q30

0.75

2.07

0.79

608

236

252

0

Q31

3.68

14.3

2.08

296

266

2336

0

Q32

0.6

0.26

0.1

126

61

34

0

Q33

3.92

12.34

2.7

248

221

3484

0

Q34

3.39

14.54

1.58

1313

256

979

0

Q35

3.72

15.07

1.95

1244

595

885

0

Q36

4.22

15.43

3.32

160

150

3510

0

Q37

1.21

3.28

0.52

160

124

522

0

Q38

3.69

19.16

1.91

1068

753

888

0

Q39

1.31

5.36

0.99

886

568

78

0

Q40

0.97

2.17

0.7

701

344

217

0

Q41

0.17

0.04

0.04

65

22

31

0

Q42

2.92

7.61

1.94

133

114

2328

0

Q43

2.72

11.65

1.38

127

116

1441

0

Q44

5.29

23.24

3.4

324

246

2158

0

Q45

1.12

2.99

0.76

350

224

585

0

Q46

4.72

20.62

2.75

265

170

2431

0

Q47

7.35

35.87

6.41

4769

2532

2374

0

Q48

5.46

24.95

3.23

342

321

3401

0

Q49

8.73

20.99

4.4

231

204

5412

0

Q50

4.27

20.9

1.93

170

156

1878

0

Q51

10.82

54.08

7.26

3865

2572

2741

0

Q52

2.57

7.95

2.15

140

119

2464

0

Q53

5.33

31.95

2.16

173

165

2343

0

Q54

11.12

50.96

10.19

342

263

10501

0

Q55

3.05

8.22

2.17

137

122

2461

0

Q56

4.91

12.41

2.89

280

239

3186

0

Q57

1.61

7.39

0.53

337

205

276

0

Q58

3.72

9.99

2.98

268

229

3107

0

Q59

4.65

25.68

3.69

3355

1703

1456

0

Q60

3.96

12.56

2.8

297

246

3382

0

Q61

0.68

0.47

0.14

189

116

47

0

Q62

1.31

5.38

0.55

104

77

479

0

Q63

5.35

31.9

1.93

163

155

2022

0

Q64

11.02

50.66

7.5

2045

1131

5786

0

Q65

6.18

32.07

4.82

2586

1688

2350

0

Q66

2.18

7.9

1.47

190

156

1673

0

Q67

74.37

374.16

176.26

34851

24686

3020

10145

Q68

5.92

22.14

4.05

175

155

4580

0

Q69

2.23

7.02

0.9

251

188

843

0

Q70

3.92

19.56

1.81

179

159

1483

0

Q71

4.19

12.42

3.02

232

184

3480

0

Q72

2.78

12.83

2.11

2032

1155

729

0

Q73

3.45

16.7

1.47

1229

244

979

0

Q74

9.41

42.75

3.81

1437

1079

2390

0

Q75

7.79

32.71

5.77

2632

1099

5250

0

Q76

6.01

18.61

3.72

219

202

4882

0

Q77

5.08

14.87

3.55

209

186

3994

0

Q78

12.55

61.71

11.85

9555

5413

5525

0

Q79

5.38

23.44

3.06

1512

412

2411

0

Q80

8

30.12

7.06

2168

1447

6405

0

Q81

0.83

2.76

0.82

758

405

220

0

Q82

1.6

4.54

0.96

174

141

1040

0

Q83

0.66

1.7

0.43

172

120

336

0

Q84

0.4

0.42

0.18

183

61

83

0

Q85

2.71

9.92

2.7

1805

1172

1501

0

Q86

1.08

3.59

0.58

123

84

603

0

Q87

3.8

20.43

1.74

1086

767

888

0

Q88

10.18

63.04

2.47

420

395

729

0

Q89

4.66

25.13

2.11

173

163

2374

0

Q90

1.03

3.71

0.51

113

88

333

0

Q91

0.32

0.27

0.11

110

55

67

0

Q92

1.55

3.39

0.76

127

82

688

0

Q93

1.38

3.5

1.19

1395

684

300

0

Q94

1.73

6.2

1.27

379

308

1080

0

Q95

11.17

55.62

5.67

3771

2646

1078

0

Q96

2.18

6.62

0.91

115

95

673

0

Q97

5.45

21.23

3.27

2680

1496

1670

0

Q98

3.16

9.22

2.4

290

197

2503

0

Q99

1.21

5.52

0.3

115

95

217

0


Таблица 34.11. Тест производительности TCP-DS : результаты второго запуска теста

SF100 Parquet

Продолжительность (с)

user time (с)

sys time (с)

max RSS (МБ)

avg RSS (МБ)

read IO (МБ)

write IO (МБ)

Q1

1.18

4.49

3.34

1164

664

0

0

Q2

1.63

10.03

0.36

143

122

0

0

Q3

1.49

8.26

0.53

120

91

0

0

Q4

14.47

91.58

9.82

3795

2595

0

0

Q5

3.28

20.21

1.27

596

318

0

0

Q6

1.6

7.56

0.71

603

191

0

0

Q7

3.32

23.4

1.16

290

217

0

0

Q8

1.27

7.1

0.46

177

144

0

0

Q9

17.95

119.98

4.19

680

657

0

0

Q10

1.37

7

0.34

210

171

0

0

Q11

8.97

60.38

3.87

2684

2040

0

0

Q12

0.46

2.11

0.24

184

116

0

0

Q13

4.3

30.22

1.4

362

324

0

0

Q14

54.7

349.17

28.4

12493

6007

0

0

Q15

0.45

1.15

0.25

330

183

0

0

Q16

0.69

1.64

0.5

641

303

0.04

0

Q17

2.96

17.94

1.5

1013

696

0

0

Q18

1.02

3.58

0.51

1497

490

0

0

Q19

1.91

12.29

0.76

330

284

0

0

Q20

0.35

0.26

0.08

148

74

0

0

Q21

0.26

0.91

0.22

191

95

0

0

Q22

18.13

92.43

44.23

32584

20969

0

2986

Q23

42.92

289.26

37.52

15624

8313

0

0

Q24

8.12

50.49

5.11

4384

3102

0

0

Q25

2.7

15.41

1.4

780

488

0

0

Q26

0.58

1.79

0.2

182

84

0

0

Q27

3.05

20.56

1.1

201

167

0

0

Q28

11.46

78.64

3.49

332

315

0

0

Q29

3.17

20.68

1.04

397

291

0.13

0

Q30

0.5

1.79

0.49

711

361

0

0

Q31

2.03

13.26

0.57

297

250

0

0

Q32

0.45

0.58

0.13

153

92

0.38

0

Q33

2.04

11.92

0.81

261

217

0

0

Q34

2.5

14.01

0.71

1353

366

0

0

Q35

2.79

14.17

1.37

1186

616

0.13

0

Q36

2.1

13.86

0.77

158

144

0

0

Q37

0.68

2.7

0.21

161

113

0

0

Q38

2.99

19.21

1.08

1056

771

0

0

Q39

1.18

5.25

0.96

922

669

0

0

Q40

0.72

1.47

0.51

709

412

0.44

0

Q41

0.07

0.02

0.02

71

24

0

0

Q42

1.22

7.09

0.48

134

113

0

0

Q43

1.74

11.55

0.38

127

113

0

0

Q44

3.88

22.12

2.02

315

241

0

0

Q45

0.65

3.12

0.34

351

260

0

0

Q46

2.93

20.2

0.96

304

178

0

0

Q47

5.1

34.23

4.47

4772

2537

0

0

Q48

3.25

22.24

0.98

344

302

0

0

Q49

3.14

18.99

1.14

233

186

0

0

Q50

2.85

19.75

0.6

173

157

0

0

Q51

8.8

53.3

5.83

3780

2779

0

0

Q52

1.19

7.12

0.52

139

115

0

0

Q53

3.98

28.33

0.66

169

153

0.13

0

Q54

6.93

47.86

3.35

351

271

0.38

0

Q55

1.2

7.36

0.52

139

115

0

0

Q56

2.01

10.79

0.81

286

207

0

0

Q57

1.2

7.4

0.37

344

220

0

0

Q58

1.64

7.87

0.71

278

197

0

0

Q59

3.75

25.48

2.69

3354

1739

0

0

Q60

2.1

12.03

0.8

296

235

0

0

Q61

0.55

0.33

0.08

150

73

0

0

Q62

0.9

5.33

0.2

105

70

0

0

Q63

3.99

28.84

0.66

167

158

0

0

Q64

7.45

49.47

3.27

2012

1102

0

0

Q65

4.71

31.11

3.38

2632

1850

0

0

Q66

1.33

8.02

0.51

193

150

0.39

0

Q67

66.32

359.58

139.16

35139

25197

0

10914

Q68

3.06

20.39

1.16

170

144

0

0

Q69

1.44

6.81

0.35

248

169

0

0

Q70

2.96

19.71

0.89

182

161

0

0

Q71

2.27

12.03

0.81

232

179

0

0

Q72

2.23

12.61

1.69

2023

1215

0.1

0

Q73

2.52

14.17

0.68

1285

329

0

0

Q74

6.76

41.18

2.64

1448

1030

0.13

0

Q75

4.97

31.29

2.83

2656

1180

0

0

Q76

2.73

16.88

0.91

222

185

0

0

Q77

2.34

14.11

0.96

211

171

0

0

Q78

9.97

60.36

9.25

9578

5418

0

0

Q79

3.81

23.07

1.42

1501

467

0

0

Q80

4.67

28.85

3.14

2166

1398

0

0

Q81

0.57

2.45

0.71

793

345

0.27

0

Q82

0.89

3.7

0.3

177

107

0

0

Q83

0.34

1.24

0.16

166

83

0

0

Q84

0.21

0.3

0.15

1801

1165

0

0

Q85

1.76

8.68

1.48

1804

1231

0

0

Q86

0.61

3.78

0.2

126

94

0

0

Q87

3.07

19.77

1.07

1066

729

0

0

Q88

9.32

61.28

1.89

421

399

0

0

Q89

3.13

22.42

0.58

175

164

0

0

Q90

0.71

3.38

0.18

116

68

0.13

0

Q91

0.14

0.22

0.09

112

58

0

0

Q92

0.63

3.37

0.33

126

90

0

0

Q93

1.14

3.72

1.09

1395

750

0

0

Q94

1.05

5.89

0.51

383

302

0

0

Q95

10.24

55.09

4.78

3772

2848

0

0

Q96

1.33

8.83

0.27

115

100

0

0

Q97

3.15

19.66

2.33

2692

1718

0

0

Q98

1.68

8.63

0.65

290

189

0

0

Q99

0.92

4.86

0.13

117

78

0.23

0


34.8.4. Выводы #

На основании выполненных тестов производительности можно сделать следующие выводы:

  • Расширение pgpro_duckdb продемонстрировало удовлетворительное время выполнения аналитических запросов в рамках обоих тестов производительности. Только нескольким ресурсоёмким аналитическим запросам TCP-DS для выполнения потребовались десятки секунд.

  • Для теста производительности TCP-H значения между первым и вторым запусками отличаются практически в два раза. Это значит, что половину времени потоки потратили на обработку операций ввода/вывода. Для теста производительности TCP-DS разница в значениях была ниже — 1.7. Это значит, что запускались более ресурсоёмкие аналитические запросы, и обработка операций ввода/вывода оказала меньшее влияние на время выполнения.

  • По сравнению с общим объёмом данных для выполнения аналитических запросов необходим значительно меньший объём данных.

  • Для ресурсоёмких аналитических запросов, превышающих установленное ограничение по объёму данных, был использован перенос данных на диск.

Эти выводы можно использовать для изначального планирования ресурсов. За более подробной информацией обратитесь к разделу Планирование ресурсов. Можно утверждать, что в тестах производительности результаты времени практически линейно зависят от коэффициента масштабирования.