codecamp

OceanBase SQL调优概览

SQL 调优是指通过综合分析 SQL 的执行计划、执行监控信息、系统配置、系统负载等多方面因素,调整 SQL 的执行策略,以实现资源利用最大化。

SQL 调优方式一般可分为单条 SQL 调优和系统 SQL 调优。

单条 SQL 调优

单一的 SQL 调优的优化主体是被调试的 SQL 执行本身,一般调优的目标包括该 SQL 的执行时间、试行期的资源消耗等。常见的调优手段包括调整访问路径、执行顺序、逻辑改写等。

针对单条 SQL 的执行计划性能调优又可以分为单表访问和多表访问两种场景。

场景

SQL 调优的关注点

单表访问

  • 访问路径是否开启索引扫描:使用索引扫描可以减小数据的访问量。

  • 是否创建合适的索引:使用索引排序以减少排序或聚合等耗时操作。

  • 分区裁剪是否正确:适当的分区条件可以减少不必要的分区访问。

  • 是否提高查询的并行度:分区数目较多时,通过提高并行度以更多资源的代价获取单条 SQL 查询的性能提升。

多表访问

不仅要关注单表的 SQL 调优问题,还要关注多表间的联接问题:

  • 联接顺序

  • 联接算法

  • 跨机或并行联接的数据再分布方式

  • 查询改写

系统的 SQL 调优

系统的 SQL 调优的目的是提高整个系统的吞吐量或者系统利用率等。系统的 SQL 调优过程往往需要结合多条 SQL 的执行计划,综合分析当前系统的负载特征,主要关注热点行竞争、buffer cache 命中率等全局性的调优点。

针对吞吐量的性能调优主要是考虑在一定资源(CPU、IO、网络等)情况下,将数据库系统处理请求量最大化。主要关注以下几个方面:

主要方法

说明

优化慢 SQL

找到具体的慢 SQL 后,针对单条 SQL 进行性能调优,请参见示例 查询某段时间内执行时间排名 TOP N 的请求

均衡 SQL 的请求流量资源

请参见示例 查看集群 SQL 请求流量是否均衡

影响均衡的因素主要有:

  • ob_read_consistency 如何设置

  • Primary Zone 如何设置

  • Proxy 或 Java 客户端路由策略相关设置

  • 业务热点查询分区是否均衡

均衡子计划的 RPC 请求流量资源

请参见示例 查看分布式子计划 RPC 执行数是否均衡

影响子计划请求是否均匀的主要因素如下:

  • OBServer 内部路由策略相关设置

  • 业务热点查询的分区是否均衡


OceanBase 并行查询的参数调优
OceanBase SQL 调优基本流程
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OceanBase 控制台指南

OceanBase ODC 使用指南

OceanBase Web 版 ODC

OceanBase 客户端版 ODC

OceanBase Connector/J 开发者指南

OceanBase 什么是OceanBase Connector/J

OceanBase SQL 参考(MySQL 模式)

OceanBase SQL 参考(Oracle 模式)

OceanBase 基本元素

OceanBase 数据库对象

OceanBase 函数

OceanBase 单行函数

OceanBase 返回数字的字符串函数

OceanBase 通用比较函数

OceanBase 编码解码函数

OceanBase SQL 调优指南

OceanBase 相关协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }