检测到您已登录华为云国际站账号,为了您更好的体验,建议您访问国际站服务网站 https://www.huaweicloud.com/intl/zh-cn
不再显示此消息
Total runtime: 3.587 ms (4 rows) 优化分析 从业务层确认表数据(在time字段上)有明显的日期特征,符合分区表的特征。重新规划normal_date表的表定义:字段time为分区键、月为间隔单位定义分区表normal_date_part。修改后结果如下,性能提升近10倍。
应用程序开发教程 开发规范 驱动包获取 基于JDBC开发 基于ODBC开发 基于libpq开发 基于Psycopg开发
应用程序开发教程 开发规范 驱动包获取 基于JDBC开发 基于ODBC开发 基于libpq开发 基于Psycopg开发 基于Go驱动开发 基于ecpg开发 调试
其中two_sum()函数无法下推,导致走到RemoteQuery的计划: 首先下发select c1 from t1 where true语句到DN读取全部t1表的数据。 然后下发select c2 from t2 where true语句到DN读取全部t2表的数据。 获取需要的数据之后,在CN上做HASH JOIN。
案例:使排序下推 现象描述 在做场景性能测试时,发现某场景大部分时间是CN端在做window agg,占到总执行时间95%以上,系统资源不能充分利用。研究发现该场景的特点是:将两列分别求sum作为一个子查询,外层对两列的和再求和后做trunc,然后排序。 表结构如下所示: 1 2
导致走到RemoteQuery的计划: 首先下发select c1 from t1 where true语句到DN读取全部t1表的数据。 然后下发select c2 from t2 where true语句到DN读取全部t2表的数据。 获取需要的数据之后,在CN上做HASH JOIN。
访问特殊数据类型 ecpg支持numeric、decimal、date、timestamp和interval数据类型。由于这些数据类型的内部结构较为复杂,无法被映射到初级数据类型的宿主变量,因此应用程序通过声明特殊类型的宿主变量以及使用pgtypes库中的函数处理这些特殊类型。p
分析执行计划图1可知,在顺序扫描阶段耗时较多。 多表JOIN中,由于表PS.SDR_WEB_BSCRNC_1DAY的JOIN列“BSCRNC_ID”存在大量空值,JOIN性能差。 建议在语句中手动添加JOIN列的非空判断,修改后的语句如下所示。 1 2 3 4 5 6 7 8 9 10 11 12
Total runtime: 3.587 ms (4 rows) 优化分析 从业务层确认表数据(在time字段上)有明显的日期特征,符合分区表的特征。重新规划normal_date表的表定义:字段time为分区键、月为间隔单位定义分区表normal_date_part。修改后结果如下,性能提升近10倍。
连接数据库 使用psycopg2.connect函数获得connection对象。 使用connection对象创建cursor对象。 父主题: 基于Psycopg开发
test1 t1, test2 t2 WHERE t1.a = t2.b ); 优化后的SQL查询由两个等值join的子查询构成,而每个子查询都可以走更适合此场景的hashjoin。优化后的执行计划如下 1 2 3 4 5 6 7 8 9 10 11 12 13
test1 t1, test2 t2 WHERE t1.a = t2.b ); 优化后的SQL查询由两个等值join的子查询构成,而每个子查询都可以走更适合此场景的hashjoin。优化后的执行计划如下: 1 2 3 4 5 6 7 8 9 10 11 12 13
通常优化器总会选择最优的执行计划,但是众所周知代价估算,尤其是中间结果集的代价估算一般会有比较大的偏差,这种比较大的偏差就可能会导致agg的计算方式出现比较大的偏差,这时候就需要通过best_agg_plan进行agg计算模型的干预。 一般来说,当agg汇聚的收敛度很小时,即结果集的个数在ag
rows) 由于目标列中的相关子查询(select avg(c2) from t2 where t2.c2=t1.c2)无法提升的缘故,导致每扫描t1的一行数据,就会触发子查询的一次执行,效率低下。如果打开intargetlist参数会把子查询提升转为JOIN,来提升查询的性能: openGauss=#
应用程序开发教程 开发规范 驱动包获取 基于JDBC开发 基于ODBC开发 基于libpq开发 基于Psycopg开发 基于Go驱动开发
应用程序开发教程 开发规范 获取驱动包 基于JDBC开发 基于ODBC开发 基于libpq开发 基于Psycopg开发 基于ecpg开发 基于Go驱动开发 调试
rows) 由于目标列中的相关子查询(select avg(c2) from t2 where t2.c2=t1.c2)无法提升的缘故,导致每扫描t1的一行数据,就会触发子查询的一次执行,效率低下。如果打开intargetlist参数会把子查询提升转为JOIN,来提升查询的性能: gaussdb=#
BY ls_pid_cusr1; 优化后的SQL查询由两个等值join的子查询构成,而每个子查询都可以走更适合此场景的hashjoin。优化后的执行计划如下 优化后,从超过1个小时未返回结果优化到7s返回结果。 父主题: 实际调优案例
ca_address_sk group by a.ca_address_sk; 为了保证改写的等效性,在customer_address_001. ca_address_sk加了not null约束。 父主题: 实际调优案例
案例:使排序下推 现象描述 在做场景性能测试时,发现某场景大部分时间是CN端在做window agg,占到总执行时间95%以上,系统资源不能充分利用。研究发现该场景的特点是:将两列分别求sum作为一个子查询,外层对两列的和再求和后做trunc,然后排序。 表结构如下所示: 1 2