【OceanBase系列】—— 常用 SQL

作者简介:

花名:绪宁,OceanBase 数据库解决方案架构师

对使用OB过程中常用的一些SQL进行了整理,对应的版本是 4.x。

集群信息

查看版本

show variables like 'version_comment';

查看集群ID和集群名

show parameters like '%cluster%';

查看当前服务器信息

select * from DBA_OB_SERVERS;

查看集群的zone信息

SELECT * FROM dba_ob_zones;

查看集群支持的字符集

select * from information_schema.collations;

租户信息

查看租户创建基本信息

show create tenant xxx;

查看对应 Unit 的配置。

SELECT * FROM oceanbase.dba_ob_units;

查看租户对应的资源池(可以加 tenant_id 筛选)。

SELECT * FROM oceanbase.dba_ob_resource_pools;

查看租户基本信息。

SELECT * FROM oceanbase.dba_ob_tenants;

当前集群内的租户

select tenant_id,tenant_name,primary_zone,compatibility_mode from oceanbase.__all_tenant;

RS 相关

切换rs leader

alter system switch rootservice leader zone='z1';

查看 RS 任务

select * from __all_rootservice_event_history order by 1 desc limit 10;

查看 rs 列表

show parameters like '%rootservice_list%';

查看 rs leader,WITH_ROOTSERVER=yes

SELECT * FROM oceanbase.DBA_OB_SERVERS;

资源分配

资源分配查询

服务器资源分配

select * from GV$OB_SERVERS;

各租户资源分配

select t1.name resource_pool_name, t2.`name` unit_config_name, 
t2.max_cpu, t2.min_cpu, 
round(t2.memory_size/1024/1024/1024,2) mem_size_gb,
round(t2.log_disk_size/1024/1024/1024,2) log_disk_size_gb, t2.max_iops, 
t2.min_iops, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,
t4.tenant_id, t4.tenant_name
from __all_resource_pool t1
join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;

查看 observer 内存、磁盘配置大小

select zone,svr_ip,svr_port,name,value 
from __all_virtual_sys_parameter_stat 
where 
name in ('memory_limit','memory_limit_percentage','system_memory','datafile_size','datafile_disk_percentage') 
order by svr_ip,svr_port;

容量使用统计

默认情况下统计的是三/多副本的大小,可以通过增加 role 来获取单副本大小。

统计租户的大小

select t.tenant_name,
round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,
round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb
from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2
where t.tenant_id=t1.tenant_id
and t1.svr_ip=t2.svr_ip
and t1.tenant_id=t2.tenant_id
and t1.ls_id=t2.ls_id
and t1.tablet_id=t2.tablet_id
-- and t1.role='leader'
group by t.tenant_name
order by 3 desc;

统计库的大小

select t1.database_name,
round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,
round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb
from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2
where t.tenant_id=t1.tenant_id
and t1.svr_ip=t2.svr_ip
and t1.tenant_id=t2.tenant_id
and t1.ls_id=t2.ls_id
and t1.tablet_id=t2.tablet_id
-- and t1.role='leader'
and t.tenant_name='test1'
group by t1.database_name
order by 3 desc;

统计表/索引的大小

select t1.table_name,
round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,
round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb
from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2
where t.tenant_id=t1.tenant_id
and t1.svr_ip=t2.svr_ip
and t1.tenant_id=t2.tenant_id
and t1.ls_id=t2.ls_id
and t1.tablet_id=t2.tablet_id
-- and t1.role='leader'
and t.tenant_name='test1'
and t1.database_name='sbtest'
and t1.table_name='sbtest1'
group by t1.table_name
order by 3 desc;

统计表对应的分区大小

select t1.table_name,t1.partition_name,
round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,
round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb
from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2
where t.tenant_id=t1.tenant_id
and t1.svr_ip=t2.svr_ip
and t1.tenant_id=t2.tenant_id
and t1.ls_id=t2.ls_id
and t1.tablet_id=t2.tablet_id
and t1.role='leader'
and t.tenant_name='test1'
and t1.database_name='sbtest'
and t1.table_name='sbtest1_part'
group by t1.table_name,t1.partition_name;

内存占用

租户内存参数:

show parameters where name in ('memstore_limit_percentage','freeze_trigger_percentage');

租户内存持有:

select TENANT_ID,SVR_IP,SVR_PORT,HOLD/1024/1024/1024,FREE/1024/1024/1024 
from oceanbase.GV$OB_TENANT_MEMORY 
where tenant_id =1002;

租户内存模块占用:

select * from V$OB_MEMORY where tenant_id=1002;

memstore占用:

select * from V$OB_MEMSTORE where tenant_id=1002;

总体实际占用的memory 大小以及大小限制:

select * from oceanbase.GV$OB_SERVERS;

memory_limit字段代表实际的memory_limit大小。

MEM_CAPACITY 是 memory_limit - system_memory

  • 内存资源:包括两个配置,MIN_MEMORY和MAX_MEMORY,他们含义如下:
    • MIN_MEMORY:表示为租户分配的最小内存规格,observer上,所有租户的MIN_MEMORY的总和不能超过物理可用内存大小MEM_CAPACITY
    • MAX_MEMORY:表示为租户分配的最大内存规格,observer上,所有租户的MAX_MEMORY的总和不能超过物理可用内存的超卖值:MEM_CAPACITY * resource_hard_limit

表分区和日志流分布

表及分区

查看当前所有表详情

select * from __all_table

查看所有分区详情

select * from __all_part

查看表及分区leader分布

select * from oceanbase.DBA_OB_TABLE_LOCATIONS where ROLE='LEADER'  and table_name='xxx'

查看表及分区的预估数据量

select * from OCEANBASE.DBA_TAB_STATISTICS

日志流

日志流分布

select SVR_IP,ROLE,count(*) from CDB_OB_LS_LOCATIONS group by SVR_IP,ROLE;

查看日志流状态

select * from GV$OB_LOG_STAT;

查看日志流详情

select svr_ip,svr_port,tenant_id,ls_id,replica_type,ls_state,tablet_count from __all_virtual_ls_info;

常用hint

OceanBase Hint 用法

  • 支持不带参数,如 /*+ FUNC */
  • 支持带参数,如 /*+ FUNC(param) */
  • 多个hint可以写到同一个注释中,用逗号分隔,如/*+ FUNC1, FUNC2(param) */
  • SELECT语句的hint必须近接在关键字SELECT之后,其他词之前。如:SELECT /*+ FUNC */ …
  • UPDATE, DELETE 语句的 hint 必须紧接在关键字 UPDATE,DELETE 之后

Hint 参数

Hint 相关参数名称、语义和语法如下表所示。

名称语法语义
NO_REWRITENO_REWRITE禁止 SQL 改写。
READ_CONSISTENCYREAD_CONSISTENCY (WEAK[STRONGFROZEN])读一致性设置(弱/强)。
INDEX_HINT/*+ INDEX(table_name index_name) */设置表索引。
QUERY_TIMEOUTQUERY_TIMEOUT(INTNUM)设置超时时间。
LOG_LEVELLOG_LEVEL([']log_level['])设置日志级别,当设置模块级别语句时候,以第一个单引号(')作为开始,第二个单引号(')作为结束;例如'DEBUG'。
LEADINGLEADING([qb_name] TBL_NAME_LIST)设置联接顺序。
ORDEREDORDERED设置按照 SQL 中的顺序进行联接。
FULLFULL([qb_name] TBL_NAME)设置表访问路径为主表等价于 INDEX(TBL_NAME PRIMARY)。
USE_PLAN_CACHEUSE_PLAN_CACHE(NONE[DEFAULT])设置是否使用计划缓存:NONE:表示不使用计划缓存。DEFAULT:表示按照服务器本身的设置来决定是否使用计划缓存。
USE_MERGEUSE_MERGE([qb_name] TBL_NAME_LIST)设置指定表在作为右表时使用 Merge Join。
USE_HASHUSE_HASH([qb_name] TBL_NAME_LIST)设置指定表在作为右表时使用 Hash Join。
NO_USE_HASHNO_USE_HASH([qb_name] TBL_NAME_LIST)设置指定表在作为右表时不使用 Hash Join。
USE_NLUSE_NL([qb_name] TBL_NAME_LIST)设置指定表在作为右表时使用 Nested Loop Join。
USE_BNLUSE_BNL([qb_name] TBL_NAME_LIST)设置指定表在作为右表时使用 Block Nested Loop Join
USE_HASH_AGGREGATIONUSE_HASH_AGGREGATION([qb_name])设置聚合算法为 Hash。例如 Hash Group By 或者 Hash Distinct。
NO_USE_HASH_AGGREGATIONNO_USE_HASH_AGGREGATION([qb_name])设置 Aggregate 方法不使用 Hash Aggregate,使用 Merge Group By 或者 Merge Distinct。
USE_LATE_MATERIALIZATIONUSE_LATE_MATERIALIZATION设置使用晚期物化。
NO_USE_LATE_MATERIALIZATIONNO_USE_LATE_MATERIALIZATION设置不使用晚期物化。
TRACE_LOGTRACE_LOG设置收集 Trace 记录用于 SHOW TRACE 展示。
QB_NAMEQB_NAME( NAME )设置 Query Block 的名称。
PARALLELPARALLEL(INTNUM)设置分布式执行并行度。
TOPKTOPK(PRECISION MINIMUM_ROWS)设置模糊查询的精度和最小行数。 其中 PRECSION 为整型,取值范围[0,100],表示模糊查询的行数百分比;MINIMUM_ROWS 为最小返回行数。

sql audit

查询资源占用最多的SQL

select SQL_ID, avg(ELAPSED_TIME), 
avg(QUEUE_TIME), 
avg(ROW_CACHE_HIT + BLOOM_FILTER_CACHE_HIT + BLOCK_CACHE_HIT + DISK_READS) avg_logical_read, 
avg(execute_time) avg_exec_time, 
count(*) cnt, 
avg(execute_time - TOTAL_WAIT_TIME_MICRO ) avg_cpu_time, 
avg( TOTAL_WAIT_TIME_MICRO ) avg_wait_time, 
WAIT_CLASS, avg(retry_cnt) from v$OB_SQL_AUDIT 
group by 1 
order by avg_exec_time * cnt desc 
limit 10;

最近100s某个租户的TOP SQL耗时监控

select /*+read_consistency(weak),query_timeout(100000000)*/ SQL_ID,count(1),avg(ELAPSED_TIME),avg(EXECUTE_TIME),avg(QUEUE_TIME),avg(AFFECTED_ROWS),avg(GET_PLAN_TIME) 
from gv$ob_sql_audit  
where time_to_usec(now(6))-request_time <1000000000 
and tenant_name='test_tenant' 
group by SQL_ID order by avg(ELAPSED_TIME)*count(1) desc limit 20;

某个时间段请求次数排在 TOP-N 的 SQL

select SQL_ID, count(*) as QPS, avg(t1.elapsed_time) RT
from oceanbase.gv$ob_sql_audit t1
where   tenant_id = 1001       and IS_EXECUTOR_RPC = 0
and request_time > (time_to_usec(now()) - 10000000)
and request_time < time_to_usec(now())
group by t1.sql_id order by QPS desc limit 10;

定位所有SQL中消耗CPU最多的sql(或者不做聚合直接查询)

select sql_id, substr(query_sql, 1, 200) as query_sql, 
      sum(elapsed_time - queue_time) sum_t, count(*) cnt, 
      avg(get_plan_time), avg(execute_time)    
from oceanbase.gv$ob_sql_audit     
where   tenant_id = 1001      
       and request_time > (time_to_usec(now()) - 10000000)     
       and request_time < time_to_usec(now())
group by sql_id order by sum_t desc   limit 10;

巡检、运维相关

自增值

获取每张表的自增值(下一个自增值)

select 
  a.table_name,b.AUTO_INCREMENT_VALUE 
from 
  oceanbase.__all_table a, oceanbase.DBA_OB_AUTO_INCREMENT b 
where 
  a.table_id=b.AUTO_INCREMENT_KEY 
  and a.autoinc_column_id=b.COLUMN_ID 
  and a.TABLE_NAME='t3';

DDL

查询DDL进度

mysql> select * from oceanbase.gv$session_longops\G;
  1. sid:现在没有填值,为默认的 -1。
  2. trace_id: OBServer 程序日志的ID,可以用该ID来搜索相关的日志文件。
  3. opname:建索引时,会展示 create index 信息。
  4. target:建索引时,展示正在创建的索引名。
  5. svr_ip: 调度任务在哪个 OBServer 执行。
  6. svr_port:调度任务在哪个 OBServer 执行。
  7. start_time:索引构建开始时间,这里只精确到日期,跟 Oracle 是兼容的。
  8. elapsed_seconds: 索引构建执行的时间,单位为秒。
  9. time_remaining: 兼容 Oracle 的字段,暂时还没有实现剩余时间预测的能力。
  10. last_update_time: 统计信息收集的时间,也是精确到日期,跟 Oracle 是兼容的。
  11. message:里面包含了多个信息,ENANT_ID为租户 ID,TASK_ID为DDL 的任务 ID,STATUS 为 DDL 执行到的状态,REPLICA BUILD 指的是数据补全阶段,索引数据补全主要分为扫描主表数据,排序,写入到索引表阶段,三个阶段处理的行数分别对应于ROW_SCANNED, ROW_SORTED 和 ROW_INSERTED,因排序阶段可能会进行多轮归并,所以ROW_SORTED 的行数通常比 ROW_SCANNED 和 ROW_INSERTED 要多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/571629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux安装Matlab运行时

一般而言&#xff0c;安装Matlab的linux系统是带桌面版的&#xff0c;如果没带&#xff0c;不在本教程范围内。 一、下载Matlab 下载地址&#xff1a;MATLAB Runtime - MATLAB Compiler - MATLAB 本教程使用R2020b(9.9) 二、linux系统中进行解压 将zip传入linux系统&#xf…

微电子领域常见概念(八)靶材

微电子领域常见概念&#xff08;八&#xff09;靶材 靶材是用于物理气相沉积&#xff08;PVD&#xff09;技术中的一种关键材料&#xff0c;它在制备薄膜的过程中起到至关重要的作用。PVD技术包括多种不同的工艺&#xff0c;如磁控溅射、离子束溅射、分子束外延&#xff08;MBE…

Vue:vue的工程化

Vue前端工程化 前后端分离开发 即前端人员开发前端工程,将开发好的前端工程打包部署在前端服务器上 后端开发人员开发后端工程,再将后端工程打包部署在后端服务器上,这种模式称为前后端分离开发 而前后端要顺利对接的关键就是要遵循一定的开发规范 开发规范 这种开发规范定…

CCF区块链会议--Middleware 2024 截止5.24 附录用率

会议名称&#xff1a;Middleware CCF等级&#xff1a;CCF B类会议 类别&#xff1a;软件工程/系统软件/程序设计语言 录用率&#xff1a;2022年录用率38%&#xff08;8/21&#xff09; Topics of Interest The Middleware conference seeks original submissions of resear…

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux&#xff0c; Apache&#xff0c; MySQL&#xff0c; PHP组成的&#xff0c;即把Apache、MySQL以及PHP安装在Linux系统上&#xff0c;组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

科技赋能无人零售

科技赋能无人零售&#xff0c;使其具备以下独特优势&#xff1a; 1. 全天候无缝服务 &#xff1a;无人零售店依托科技&#xff0c;实现24小时不间断运营&#xff0c;不受人力限制&#xff0c;满足消费者随时购物需求&#xff0c;尤其惠及夜间工作者、夜猫子及急需购物者&…

微前端是如何实现作用域隔离的?

微前端是如何实现作用域隔离的&#xff1f; 一、前言 沙箱&#xff08;Sandbox&#xff09;是一种安全机制&#xff0c;目的是让程序运行在一个相对独立的隔离环境&#xff0c;使其不对外界的程序造成影响&#xff0c;保障系统的安全。作为开发人员&#xff0c;我们经常会同沙…

03-JAVA设计模式-访问者模式

访问者模式 什么是访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是软件设计模式中的一种行为模式&#xff0c;它用于将数据结构中的元素与操作这些元素的操作解耦。这种模式使得可以在不修改数据结构的情况下添加新的操作。 在访问者模式中&#xff0c;我们…

PHP+MYSQL多条件选一通用搜索系统功能单文件7KB

通用功能: 快速填写参数用于自己的mysql数据表搜索,ajax载入数据 <?php header("content-Type: text/html; charsetUTF-8"); //error_reporting(0);$dbhost "localhost"; //数据库地址本地localhost $dbuser "chalidecom"; //数据库账号 …

Tkinter是什么?

Tkinter是Python标准库中的一个模块&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;应用程序。它提供了一组工具和组件&#xff0c;使开发者能够在Python中创建窗口、按钮、标签、文本框、菜单等各种界面元素&#xff0c;并通过这些元素构建交互式的用户界面。 T…

稀碎从零算法笔记Day59-LeetCode: 感染二叉树需要的总时间

题型&#xff1a;树、图、BFS、DFS 链接&#xff1a;2385. 感染二叉树需要的总时间 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟…

Three.js入门学习笔记

学习资料&#xff1a; 【Three.js】Three.js快速上手教程_three.module.js-CSDN博客 2024年了&#xff0c;是该学学Three.js了_three.js 2024-CSDN博客 一、three.js简介 three.js是JavaScript编写的WebGL第三方库。 three.js&#xff0c;webGL&#xff0c;openGL三者的关…

微信小程序4~6章总结

目录 第四章 页面组件总结 4.1 组件的定义及属性 4.2 容器视图组件 4.2.1 view 4.2.2 scroll-view 4.2.3 swiper 4.3 基础内容组件 4.3.1 icon ​编辑 4.3.2 text 4.3.3 progress ​编辑 4.4 表单组件 4.4.1 button 4.4.2 radio 4.4.3 checkbox 4.4.4 switch …

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考&#xff1a;https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 长文本通知测试 多行文本通知测试 图片通知测试 进度条通知测试 通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、…

L1-099 帮助色盲 - java

L1-099 帮助色盲 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 题目描述&#xff1a; 在古老的红绿灯面前&#xff0c;红绿色盲患者无法分辨当前亮起的灯是红色还是绿色&#xff0c;有些聪明人通过路口的策略是这样的&#xff1a;当红灯或绿灯亮起时&am…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…

数据可视化-ECharts Html项目实战(14)

在之前的文章中&#xff0c;我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Html项目实战&#xff08;…

目标检测——YOLOv7算法解读

论文&#xff1a;YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6) 作者&#xff1a;Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2207.02696 代码&#xff1a;h…

Bayes判别示例数据:鸢尾花数据集

使用Bayes判别的R语言实例通常涉及使用朴素贝叶斯分类器。朴素贝叶斯分类器是一种简单的概率分类器&#xff0c;基于贝叶斯定理和特征之间的独立性假设。在R中&#xff0c;我们可以使用e1071包中的naiveBayes函数来实现这一算法。下面&#xff0c;我将通过一个简单的示例展示如…
最新文章