SQL调优指南—调优基本概念

简介: 分布式数据库相对单机数据库架构有差异,所有在单机数据库的调优经验上分布式数据库又有着自身特点的调优手段。在使用PolarDB-X的过程中,我们会基于统计信息、执行计划和并发策略和执行之后反馈的运行时长等信息,找出导致SQL执行慢的原因,针对性调优。

基本架构

PolarDB-X是一款计算存储分离的分布式数据库产品。当一条查询SQL(称为逻辑SQL)发往PolarDB-X计算节点(CN)时,PolarDB-X会将其分成可下推的、和不可下推的两部分,可下推的部分也被称为物理SQL。不可下推的SQL在CN上执行,下推的SQL在DN上执行。222.png

原则上,PolarDB-X在查询优化过程中尽可能按照以下规则做执行优化:

  • 尽可能将用户SQL下推到DN上执行,除了可以避免CN和DN建数据网络交互以外,还可以充分利用多分片并发执行的能力,利用各个DN资源,加速查询。
  • 对于无法下推的部分算子,优化器会选择最优的方式来执行,比如选择合适的算子执行、选择合适的并行度策略以及是否使用mpp执行。

除此之外,在执行优化过程中会考虑尽可能选择最佳索引。

基本概念

在SQL调优过程中我们还需要理解下列概念:

  • 逻辑SQL: 用户侧发起的查询SQL;
  • 物理SQL:SQL经过查询优化后,一般会拆分为可下推和不可下推的SQL,其中可下推的SQL是发往DN执行的,叫物理SQL。如果逻辑SQL被全部下推到DN执行,那么物理SQL等价于逻辑SQL。
  • 并行度: 指查询过程中数据并行执行的最大数目,对于CN来说就是利用多核能力多线程计算,对DN来说就是同时执行多个下推物理SQL的并行数。
  • 执行计划:逻辑SQL发送到CN节点,会经过解析优化生成可执行的计划树,计划树的每个节点代表是算子。一条可以通过执行计划初步断定查询的快慢,比如是否命中索引、算子选择是否合适等。
  • 索引:PolarDB-X一般分为局部索引和全局索引,局部索引指的是单个DN节点的索引(MYSQL索引),全局索引是指构建在多个DN上的分布式索引。选择合适的索引,可以大大提高PolarDB-X的检索速度。

一条慢查询可能和物理SQL执行快慢、并发度数量、执行计划和索引选择是否合适都有关系。所以在分布式数据库中,SQL调优的成本一般会比单机数据库高。

相关文章
|
运维 安全 Cloud Native
Apsara Stack 技术百科 | 混合云全景智能化观测平台Sunfire
在企业数字化转型的浪潮中,核心业务的上云和迁云无疑是转型过程的重中之重,企业对于数字安全性及等保合规层面的需求也日益强烈,混合云成为诸多大型政府企业客户上云迁云的首选方案。随着企业云上业务的复杂化,云上云下技术栈的多样化,以及云上运维组织规模的扩大化,云上业务的稳定性和连续性面临着巨大的挑战。
3773 0
Apsara Stack 技术百科 | 混合云全景智能化观测平台Sunfire
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
360 1
|
新零售 运维 前端开发
理解中台
理解中台
|
存储 缓存 安全
ReflectionUtils提高反射性能!
【10月更文挑战第14天】本文介绍了如何使用Spring框架的`ReflectionUtils`工具类来提高反射操作的性能。通过对比原生反射API与`ReflectionUtils`在创建实例、调用方法和设置字段值等方面的性能,展示了`ReflectionUtils`在多次调用时显著的性能优势。文章还深入分析了`ReflectionUtils`的源码,揭示了其通过缓存机制和减少对象创建次数来提升性能的秘密。最后,作者建议在项目中遇到反射需求时优先考虑使用`ReflectionUtils`。
|
Oracle 关系型数据库 数据库
Oracle
【10月更文挑战第15天】Oracle
493 3
|
存储 SQL Oracle
oracle
oracle
250 1
|
架构师 搜索推荐
清晰!我们从来都反对“大中台,小前台”的架构设计!
在2020全球敏捷架构峰会上,快狗打车的架构师李洪英,分享了快狗打车业务中台的一些经验与思考。
清晰!我们从来都反对“大中台,小前台”的架构设计!
|
SQL 关系型数据库 测试技术
ORACLE SQL调优之'PLAN_TABLE' is old version
  在为国投做SQL调优时,他们开发说不要动现在的SQL,调整一下执行计划即可,即查询某个表时执行特定的执行计划。乍一听,我是吓了一跳!  由于他们开发不让动SQL结构(该SQL经过PLSQL优化后有500多行,其是2层嵌套递归查询,外边一个SQL如图1-2,外层SQL的每一个列是一个子查询如下图1-1,递归子查询有32个),所以只能从SQL涉及的表、索引下手,查找问题的具体原因及解决办法。
1408 0
|
存储 关系型数据库 MySQL
58同城MySQL使用规范30条军规
58同城MySQL使用规范30条军规
340 0