数据仓库服务 GAUSSDB(DWS)-为什么GaussDB(DWS)普通用户比dbadmin用户执行的慢?:场景二:执行计划中的or条件对普通用户执行语句逐一判断耗时
场景二:执行计划中的or条件对普通用户执行语句逐一判断耗时
执行计划中的or条件里有权限相关的判断,此场景多发生在使用系统视图时。例如以下sql:
1 2 3 4 5 6 7 8 |
SELECT distinct(dtp.table_name), ta.table_catalog, ta.table_schema, ta.table_name, ta.table_type from information_schema.tables ta left outer join DBA_TAB_PARTITIONS dtp on (dtp.schema = ta.table_schema and dtp.table_name = ta.table_name) where ta.table_schema = 'public'; |
一部分执行计划如下:
可以看到系统视图中的权限判断中多用or条件判断:
1
|
pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFEREN CES , TRIGGER'::text) OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text) |
由于dbadmin用户pg_has_role总能返回true,因此or之后的条件无需继续判断;
而普通用户的or条件需要逐一判断,如果数据库中表个数比较多,最终会导致普通用户比dbadmin需要更长的执行时间。
这种场景如果输出结果集很少,可以考虑尝试设置set enable_hashjoin = off; set enable_seqscan = off; 走index + nestloop的计划。
- 数据库监控DMS_数据库智能运维_了解Auto Pilot_DMS_DWS节点监控
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- MapReduce服务_什么是HetuEngine_如何使用HetuEngine
- DWS资源管理_GaussDB(DWS)资源管理作用_DWS资源管控
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- GAUSS(DWS)工具_gsql工具_DataStudio工具_DSC工具
- GaussDB计算性能_gaussdb递归_高斯数据库计算性能_华为云