> 文章列表 > Doris(12):高级设置

Doris(12):高级设置

Doris(12):高级设置

1 增大内存

内存不够时, 查询可能会出现‘Memory limit exceeded’, 这是因为doris对每个用户默认设置内存限制为 2g

SHOW VARIABLES LIKE "%mem_limit%";

 

exec_mem_limit 的单位是 byte,可以通过 SET 命令改变 exec_mem_limit 的值。如改为 8GB。

SET exec_mem_limit = 8589934592;

 

上述设置仅仅在当前session有效, 如果想永久有效, 需要添加 global 参数

SET GLOBAL exec_mem_limit = 8589934592;

2 修改超时时间

doris默认最长查询时间为300s, 如果仍然未完成, 会被cancel掉

SHOW VARIABLES LIKE "%query_timeout%";

 

可以修改为60s

SET query_timeout = 60;

 

同样, 如果需要全局生效需要添加参数 global

set global query_timeout = 60;

 

 

 

3 Broadcast/Shuffle Join

doris在join操作的时候时候, 默认使用broadcast的方式进行join, 即将小表通过广播的方式广播到大表所在的节点, 形成内存hash, 然后流式读出大表数据进行hashjoin

但如果小表的数据量也很大的时候, 就会造成内存溢出, 此时需要通过shuffle join的方式进行, 也被称为partition join. 即将大表小表都按照join的key进行hash, 然后进行分布式join

  • 使用 Broadcast Join(默认)
select sum(table1.pv) from table1 join table2 where table1.siteid = 12;

 

  • 显示指定braodcast
select sum(table1.pv) from table1 join [broadcast] table2 where table1.siteid = 12;

 

  • 使用suffle join
select sum(table1.pv) from table1 join [shuffle] table2 where table1.siteid = 12;

 

4 doris的高可用方案

当部署多个 FE 节点时,用户可以在多个fe上部署负载均衡实现或者通过mysql connect 自动重连

jdbc:mysql://[host:port],[host:port].../[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

或者应用可以连接到和应用部署到同一机器上的 MySQL Proxy,通过配置 MySQL Proxy 的 Failover 和 Load Balance 功能来达到目的。