Used: 438105027512, Limit: 438103947386. Mem usage has exceed the limit of single query, You can change the limit by set session variable exec_mem_limit目前我设置比较这个限制的值大,还是报错超出限制,

请问10TB是指一个表还是一个库。

我觉得64C512G的配置可以的,上POC吧

抱歉打扰了,我执行了您上面给的建议,但是还是报错
ERROR 1064 (HY000): Memory of Query8cb8f860-2505-11ed-90d8-fa163e88b465 exceed limit. Pipeline Backend: 10.0.0.83, fragment: 8cb8f860-2505-11ed-90d8-fa163e88b48a Used: 438106711304, Limit: 438103947386. Mem usage has exceed the limit of single query, You can change the limit by set session variable exec_mem_limit.

请问您的分区键和BUCKETS是如何设置的?

DISTRIBUTED BY HASH(ss_item_sk,ss_ticket_number,ss_item_sk) BUCKETS 950
PROPERTIES (
“replication_num” = “1”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“storage_medium” = “SSD”,
“enable_persistent_index” = “true”,
“bloom_filter_columns” = “ss_sold_date_sk,ss_sold_time_sk,ss_item_sk”
);

这个SQL是运行主键模型的表吧?请增加分区键PARTITION BY

这个是建表语句
CREATE TABLE store_sales (
ss_sold_date_sk bigint(20) NULL COMMENT “”,
ss_sold_time_sk bigint(20) NULL COMMENT “”,
ss_item_sk bigint(20) NULL COMMENT “”,
ss_customer_sk bigint(20) NULL COMMENT “”,
ss_cdemo_sk bigint(20) NULL COMMENT “”,
ss_hdemo_sk bigint(20) NULL COMMENT “”,
ss_addr_sk bigint(20) NULL COMMENT “”,
ss_store_sk bigint(20) NULL COMMENT “”,
ss_promo_sk bigint(20) NULL COMMENT “”,
ss_ticket_number bigint(20) NULL COMMENT “”,
ss_quantity int(11) NULL COMMENT “”,
ss_wholesale_cost decimal64(7, 2) NULL COMMENT “”,
ss_list_price decimal64(7, 2) NULL COMMENT “”,
ss_sales_price decimal64(7, 2) NULL COMMENT “”,
ss_ext_discount_amt decimal64(7, 2) NULL COMMENT “”,
ss_ext_sales_price decimal64(7, 2) NULL COMMENT “”,
ss_ext_wholesale_cost decimal64(7, 2) NULL COMMENT “”,
ss_ext_list_price decimal64(7, 2) NULL COMMENT “”,
ss_ext_tax decimal64(7, 2) NULL COMMENT “”,
ss_coupon_amt decimal64(7, 2) NULL COMMENT “”,
ss_net_paid decimal64(7, 2) NULL COMMENT “”,
ss_net_paid_inc_tax decimal64(7, 2) NULL COMMENT “”,
ss_net_profit decimal64(7, 2) NULL COMMENT “”,
INDEX index_name5 (ss_quantity) USING BITMAP COMMENT ‘Bitmap Index’
) ENGINE=OLAP
DUPLICATE KEY(ss_sold_date_sk, ss_sold_time_sk, ss_item_sk)
COMMENT “OLAP”
DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number, ss_item_sk) BUCKETS 950
PROPERTIES (
“replication_num” = “1”,
“bloom_filter_columns” = “ss_sold_time_sk, ss_sold_date_sk, ss_item_sk”,
“in_memory” = “false”,
“storage_format” = “DEFAULT”,
“storage_medium” = “SSD”
);
增加分区建,是支持追加的吧,不用drop表吧

分桶数量 = BE节点数量 * CPU 核数/2
麻烦您检查一下BUCKETS是否合适
增加分区键是否能直接追加我在看一下。

我是参考分桶说是一个桶不大于5个G ,压缩完之后就是1g ,大小表不一样的话,分桶都是您刚才说的规则吗

我们建议一个桶不大于1G,性能是最佳的。例子:时间分区键,一个月的数据是32G,那么BUCKETS是32就较合适了。分桶数量 = BE节点数量 * CPU 核数/2是一个较通用的配置。
由于您开始建表没有分区键,现在暂时不支持追加,有分区键后,是支持追加新分区。

那小表的话一个表就存几千条数据,那分桶我1-5个这样合适吗

只要每个桶少于1G就ok了,不用特意把BUCKETS设小。

分桶数量 = BE节点数量 * CPU 核数/2 其他数据量不大的表就按照这个公式吧

建议每个表都有PARTITION BY和DISTRIBUTED BY

之前我们建表都是用的这个两个模型DUPLICATE KEY DISTRIBUTED BY

明细模型是很成熟,主要是要PARTITION BY和DISTRIBUTED BY 这样性能才会最好

感谢您的支持,刚刚接触starrocks,有些东西把控不到位,多谢您的指导

PARTITION BY 后面跟几个字段,标准是什么呢?怎么才能达到最优呢

PARTITION BY 跟一个字段,通常是用时间来作范围分区

PRIMARY KEY (dt, order_id)
PARTITION BY RANGE(`dt`) (
    PARTITION p20210820 VALUES [('2021-08-20'), ('2021-08-21')),
    PARTITION p20210821 VALUES [('2021-08-21'), ('2021-08-22')),
    ...
    PARTITION p20210929 VALUES [('2021-09-29'), ('2021-09-30')),
    PARTITION p20210930 VALUES [('2021-09-30'), ('2021-10-01'))
) DISTRIBUTED BY HASH(order_id) BUCKETS 4
```我看案例是这个,我们还有加时间吗