原文链接:
http://click.aliyun.com/m/26674/
摘要: SQL慢查询在Greenplum/Deepgreen中的定位方法 在生产过程中,有的SQL查询往往会变得越来越慢,这时候,我们该怎么办呢?首当其冲的,我们可以通过查询计划来定位问题,今天就来谈谈如何在查询计划中定位这些慢查询产生的原因。
在生产过程中,有的SQL查询往往会变得越来越慢,这时候,我们该怎么办呢?首当其冲的,我们可以通过查询计划来定位问题,今天就来谈谈如何在查询计划中定位这些慢查询产生的原因。
1.查询计划中是否有操作耗时特别的长?
当我们分析查询计划时,是否有一个异常操作消耗了大部分的查询时间?比如,在执行索引扫描时,时间比预期的要长很多,这时候我们基本可以判断此索引可能已经超期了,需要重建。
2.查询计划预估的时间和真实的时间接近吗?
我们通过运行 EXPLAIN ANALYZE ,查看执行计划预估的返回行数与实际返回的行数是否接近,如果出入很大,说明统计信息是有问题的,我们需要对相关表/列收集更多的统计信息。
3.选择语句中的限定条件是否生效更早?
在执行计划中,选择性限定条件应该更早的应用,目的是让更少的数据返回到上层操作中。如果查询在选择性限定条件应用后表现并不好,返回的消耗依然很大,我们可以收集相关列的统计信息再看看是否会提高性能;另外,还可以通过调整SQL语句中不合理的 WHERE 条件来提高性能。
4.查询计划是否选择了最佳的JOIN顺序?
当我们的查询里面有很多连接操作(JOIN)时,要确保执行计划选择了一个最优连接顺序。拥有大量返回数据的连接应该尽早完成,以保证我们为上层操作返回更少的行。如果执行计划没有选择最佳的连接顺序,我们可以设置参数 join_collapse_limit=1 ,然后在SQL语句中使用明确的JOIN语法强迫执行计划按照特定的执行顺序执行。另外,我们可以收集相关列的统计信息再看看是否会提高性能。
5.查询计划是否有选择性的扫描分区表?
如果我们使用查询中涉及到了分区表数据查询,那么查询计划是否直接定位到扫描满足条件的分区,而不是扫描整张表。
6.查询计划是否适当的选择Hash Aggregate和Hash Join操作?
Hash操作比其他类型的聚合或者连接操作要快很多,行数据的比较和分类操作是在内存中进行,而不是通过读写磁盘完成。为了能够使用Hash操作,我们必须保证有足够的 work memory 可以容纳查询计划返回的行数据,所以我们可以通过尝试增加work memory来提高查询性能。通过运行EXPLAIN ANALYZE命令,这样可以看出哪些计划会有数据使用到磁盘,需要多少额外的work memory等,为work memory的调整提供参考。例如:
Work_mem used: 23430K bytes avg, 23430K bytes max (seg0).
Work_mem wanted: 33649K bytes avg, 33649K bytes max (seg0) to lessen workfile I/O
affecting 2 workers.
原文链接:
http://click.aliyun.com/m/26674/
分享到:
相关推荐
SQL谓词是SQL语句中用来筛选结果集的关键部分,DB2与GreenPlum/PostgreSQL之间在SQL谓词的语法和可用性上可能存在差异。 ##### 2.3.1 BETWEEN谓词 DB2和GreenPlum/PostgreSQL都支持BETWEEN谓词,但在处理边界值时...
`greenplum-1.0.jar`正是Greenplum数据库的Java驱动程序,它允许Java应用程序通过JDBC(Java Database Connectivity)接口连接到Greenplum数据库,执行SQL语句,进行数据操作和查询。 接下来,我们讨论PostgreSQL,...
《SQL Server向Greenplum移植参考手册》是一份详尽的指南,旨在帮助数据库管理员和开发人员将原有的SQL Server系统平滑过渡到Greenplum平台。这份手册涵盖了从数据移植、SQL语法转换、存储过程迁移,到各种开发工具...
spark 并行加载 greenplum 数据,为正确运行,需引入 spark 相关包和 greenplum 驱动。 <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core --> <groupId>org.apache.spark</groupId>...
- [Postgresql 指南](postgresql_greenplum/Postgresql.png) - [Greenplum代码结构](postgresql_greenplum/Greenplum代码结构.png) - [Greenplum系统表](postgresql_greenplum/Greenplum系统表.png) - [Greenplum gp...
在数据管理系统中,查询优化器扮演着至关重要的角色。查询优化器的性能直接影响着查询的执行速度和资源利用率。随着大数据时代的到来,查询优化器的重要性日益凸显。高效的查询优化器可以帮助企业快速地分析和处理...
- **段(Segment)**:数据在Greenplum中被分片存储在各个段上,每个段都是一个完整的PostgreSQL实例。 - **主节点(Master)**:负责查询解析、规划、分布以及协调各个段的工作。 - **段节点(Segment)**:实际...
由于你提到免费的jar包不易寻找,这里提供了一个解决方案:在压缩包“GREENPLUM_5.1.4”中,包含了Greenplum的JDBC驱动,你可以直接使用这些驱动文件来实现Java连接。通常,JDBC驱动文件名可能为`greenplum-jdbc.jar...
- **角色**: 数据存储和查询处理的主要场所,用户的数据表和相应的索引分布在GPDB系统中的各个Segment上。 - **配置**: 每个有效的CPU核心通常对应一个Segment Instance。例如,如果一个Segment主机配备了两个双核...
本主题提供在Greenplum数据库中使用SQL的信息。 使用外部数据 外部表和外表都可以访问存储在Greenplum数据库之外的数据源中 的数据,就好像数据存储在常规数据库表中一样。您可以从外部表 和外表读取和写入数据...
在Greenplum数据库环境中,数据同步是常见的需求,尤其在多个集群或数据库之间。这可能出于备份、恢复、测试环境复制等目的。本文将详细介绍如何在Greenplum的不同集群之间同步数据,以及如何监控性能以确保过程的...
在实际应用中,开发者首先需要在项目中引入greenplum-jdbc-5.1.4.jar,这通常可以通过Maven或Gradle等构建工具完成,或者手动将jar包添加到项目的类路径中。一旦驱动被正确引入,就可以通过以下步骤建立数据库连接:...
在Greenplum中,创建表可以通过CREATE TABLE语句实现,并且可以指定数据类型、默认值,以及通过DISTRIBUTED BY子句来指定数据的分布键,这样有助于数据均匀分布在集群中,提高查询效率。例如,创建表时可以使用自增...
在实际开发中,使用Greenplum JDBC驱动,首先需要将其添加到项目类路径中,然后通过`DriverManager.getConnection()`方法建立连接,使用`Statement`或`PreparedStatement`对象执行SQL,最后通过`ResultSet`对象处理...
在大数据场景下,Greenplum能够提供高效的数据查询和分析能力。 2. **JDBC驱动的角色** JDBC(Java Database Connectivity)是Java语言中连接数据库的标准接口,它允许Java程序通过标准的API与各种数据库进行交互...
《基于Greenplum数据库的查询优化》这篇文章探讨了在大数据环境下,如何提高分布式数据库查询效率的问题,特别是针对Greenplum数据库。随着数据规模的增长,查询效率通常会下降,因此研究提出了一个基于代价的最优...
"jdbc:pivotal:greenplum://xxx:5432;DatabaseName=core_db", "gpadmin", "gpadmin"); Statement st = db.createStatement(); ResultSet rs = st .executeQuery("SELECT * FROM core_db.analysis_user limit 100"); ...
Greenplum官方驱动JDBC版本5.1.4 官方驱动,相比PG驱动肯定要好用点。 驱动类:com.pivotal.jdbc.GreenplumDriver 驱动URL头:jdbc:pivotal:greenplum:
在GREENPLUM数据库中,用户有时需要实现跨数据库的数据查询,类似于Oracle的DBLINK功能。虽然GREENPLUM本身不直接支持这种特性,但通过利用WEB EXTERNAL TABLE,我们可以间接实现跨数据库查询。以下是一个详细的过程...
在这个修改版中,开发者针对原版DataX增加了对Greenplum、SQL Server 2000、TBase以及Amazon S3的支持。接下来,我们将详细探讨这些技术及其在DataX中的应用。 首先,**Greenplum**是一种大规模并行处理(MPP)的...