1. 设置用户名和密码
1.1) 修改root密码
登陆
mysql -h FE_HOST -P9030 -uroot
fe_host
是任一 FE 节点的 ip 地址。9030
是 fe.conf 中的 query_port 配置。
设置密码:
SET PASSWORD FOR 'root' = PASSWORD('root');
1.2) 创建新用户
CREATE USER 'test' IDENTIFIED BY 'test_passwd';
后续登陆可以使用新创建的用户登陆
mysql -h FE_HOST -P9030 -uwenbronk -pa75
授权: 需要先建库
GRANT ALL ON example_db TO wenbronk;
2. 高级设置
2.1) 增大内存
内存不够时, 查询可能会出现‘Memory limit exceeded’, 这是因为doris对每个用户默认设置内存限制为 2g
mysql> show variables like '%mem_limit%'; +----------------+------------+ | Variable_name | Value | +----------------+------------+ | exec_mem_limit | 2147483648 | | load_mem_limit | 0 | +----------------+------------+ 2 rows in set (0.00 sec)
可以修改为 8g
SET exec_mem_limit = 8589934592;
上述设置仅仅在当前session有效, 如果想永久有效, 需要添加 global 参数
SET GLOBAL exec_mem_limit = 8589934592;
2.2) 修改超时时间
doris默认最长查询时间为300s, 如果仍然未完成, 会被cancel掉
mysql> SHOW VARIABLES LIKE "%query_timeout%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | QUERY_TIMEOUT | 300 | +---------------+-------+ 1 row in set (0.00 sec)
可以修改为60s
SET query_timeout = 60;
同样, 如果需要全局生效需要添加参数 global
set global query_timeout = 60;
2.3) Broadcast/Shuffle Join
doris在join操作的时候时候, 默认使用broadcast的方式进行join, 即将小表通过广播的方式广播到大表所在的节点, 形成内存hash, 然后流式读出大表数据进行hashjoin
但如果小表的数据量也很大的时候, 就会造成内存溢出, 此时需要通过shuffle join的方式进行, 也被称为partition join. 即将大表小表都按照join的key进行hash, 然后进行分布式join
braodcast join
select sum(table1.pv) from table1 join table2 where table1.siteid = 2;
显示制定braodcast
select sum(table1.pv) from table1 join [broadcast] table2 where table1.siteid = 2;
suffle join
select sum(table1.pv) from table1 join [shuffle] table2 where table1.siteid = 2;