openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译

news2024/12/23 4:30:30

文章目录

    • openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译
      • 89.1 查询编译:PREPARE语句
      • 89.2 运行命令
      • 89.3 轻量执行支持的查询
      • 89.4 轻量执行不支持的查询
      • 89.5 JIT存储过程
      • 89.6 MOT JIT诊断
        • 89.6.1 mot_jit_detail
          • 89.6.1.1 使用示例
          • 89.6.1.2 输出说明
        • 89.6.2 mot_jit_profile
          • 89.6.2.1 使用示例
          • 89.6.2.2 输出说明
        • 89.6.3 其他

openGauss学习笔记-89 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用查询原生编译

MOT的另一个特性是,在预编译的完整查询需要执行之前,能够以原生格式(使用PREPARE语句)准备并解析这些查询。

这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好的性能。

这种分工避免了重复的解析分析操作。查询和事务语句可以交互执行。此功能有时称为即时(Just-In-Time,JIT)查询编译。

89.1 查询编译:PREPARE语句

若要使用MOT的原生查询编译,请在执行查询之前调用PREPARE客户端语句。MOT将预编译查询和(或)从缓存预加载先前预编译的代码。

下面是SQL中PREPARE语法的示例:

PREPARE name [ ( data_type [, ...] ) ] AS statement 

PREPARE在数据库服务器中创建一个预处理语句,该语句是一个可用于优化性能的服务器端对象。

89.2 运行命令

发出EXECUTE命令时,将解析、分析、重写和执行预处理语句。这种分工避免了重复的解析分析操作,同时使执行计划依赖于特定的设置值。

下面是在Java应用程序中调用PREPARE和EXECUTE语句的示例。

conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword); 

// Example 1: PREPARE without bind settings 
String query = "SELECT * FROM getusers";  
PreparedStatement prepStmt1 = conn.prepareStatement(query); 
ResultSet rs1 = pstatement.executeQuery()) 
while (rs1.next()) {…} 

// Example 2: PREPARE with bind settings 
String sqlStmt = "SELECT * FROM employees where first_name=? and last_name like ?"; 
PreparedStatement prepStmt2 = conn.prepareStatement(sqlStmt); 
prepStmt2.setString(1, "Mark"); // first name “Mark” 
prepStmt2.setString(2, "%n%"); // last name contains a letter “n” 
ResultSet rs2 = prepStmt2.executeQuery()) 
while (rs2.next()) {…}

MOT编译支持的特性和不支持的特性见下文。

89.3 轻量执行支持的查询

以下查询类型适合轻量执行:

  • 简单点查询
    • SELECT (including SELECT for UPDATE)
    • UPDATE
    • DELETE
  • INSERT查询
  • 引用主键的完整前缀的范围UPDATE查询
  • 引用主键的完整前缀的范围SELECT查询
  • JOIN查询,其中一部分或两部分重叠为点查询
  • 引用每个连接表中主键的完整前缀的JOIN查询

89.4 轻量执行不支持的查询

任何特殊的查询属性都不适用于轻量执行。特别是如果以下条件中的任何一项适用,则该查询不适合轻量执行。有关更多信息,请参阅“原生编译和轻量执行不支持的查询”。

需要强调一点,如果查询语句不适用原生编译和轻量执行,不向客户端报告错误,查询仍以正常和规范的方式执行。

有关MOT原生编译功能的详细信息,请参阅 “查询原生编译”或“查询原生编译(JIT)”的有关内容。

89.5 JIT存储过程

JIT存储过程(JIT SP)由openGauss MOT引擎(从5.0版本开始)支持,其目标是提供更高的性能和更低的延迟。

JIT SP是指通过LLVM运行时代码生成和执行库来生成代码、编译和执行存储过程。JIT SP仅对访问MOT表的存储过程可用,对用户完全透明。跨引擎事务的存储过程将由标准的PL/pgSQL执行。加速级别取决于存储过程逻辑复杂度。例如,一个真实的客户应用程序为不同的存储过程实现了20%、44%、300%和500%的加速,将存储过程延迟减少到数十毫秒。

在调用存储过程的查询PREPARE阶段或第一次执行存储过程时,JIT模块尝试将存储过程SQL转换为基于C的函数,并在运行时(使用LLVM)编译。如果成功,连续存储过程调用,MOT将执行编译函数,从而获得性能增益。如果无法生成编译函数,存储过程将由标准的PL/pgSQL执行。这两种情况对用户完全透明。

您可以参考MOT JIT诊断了解有用的诊断信息。

89.6 MOT JIT诊断

89.6.1 mot_jit_detail

该内置函数用于查询JIT编译(代码生成)的详细信息。

89.6.1.1 使用示例
select * from mot_jit_detail();

select proc_oid, substr(query, 0, 50), namespace, jittable_status, valid_status, last_updated, plan_type, codegen_time from mot_jit_detail();
89.6.1.2 输出说明
字段说明
proc_oid过程OID(数据库中过程的真实对象ID)。0表示查询。
query查询字符串或存储过程名称。
namespace查询或过程所属的命名空间。对于过程和顶级查询,值为GLOBAL。对于所有调用查询、子查询,此字段将显示父信息。
jittable_status是否为JIT查询或过程:jittable:JIT查询或过程unjittable:不是JIT查询或过程invalid:无效状态(DDL或JIT编译进行中导致失效后的临时状态)
valid_status查询或过程是否有效:valid:查询或过程有效unavailable:JIT编译进行中error:错误状态dropped:过程已删除replaced:过程已替换
last_updated上次更新状态时的时间戳。
plan_type表示存储过程或查询类型。
codegen_time代码生成(JIT编译)所需的总时间,单位为微秒。
verify_timeLLVM验证时间(内部),单位为微秒。
finalize_timeLLVM完成时间(内部),单位为微秒。
compile_timeLLVM编译时间(内部),单位为微秒。
89.6.2 mot_jit_profile

此内置函数用于查找查询或存储过程执行的分析数据(性能数据)。

89.6.2.1 使用示例
select * from mot_jit_profile();

select proc_oid, id, parent_id, substr(query, 0, 50), namespace, weight, total, self, child_gross, child_net from mot_jit_profile();
89.6.2.2 输出说明
字段说明
proc_oid过程OID(数据库中过程的真实对象ID)。0表示查询。
id用于操控输出的内部ID。
parent_id父ID(内部ID)。仅适用于子查询和子过程。-1用于顶级查询和过程。
query查询字符串或存储过程名称。
namespace查询或过程所属的命名空间。对于过程和顶级查询,值为GLOBAL。对于所有调用查询、子查询,此字段将显示父信息。
weight执行子查询或子过程的平均次数(每执行一次父存储过程),单位为微秒。
total执行查询或过程所需的总时间,单位为微秒。
self查询或过程所花费的时间,不包括子查询和子过程所花费的时间,单位为微秒。
child_gross执行所有子查询和子过程所花费的总时间(child_net+准备执行所有子查询和子过程所花费的时间),单位为微秒。
child_net所有子查询和子过程所花费的总时间,即,∑(child总数*weight),单位为微秒。
def_vars定义变量(内部)所需的时间,单位为微秒。
init_vars初始化变量(内部)所需的时间,单位为微秒。
89.6.3 其他

另外,PG_PROC系统表也可用于获取存储过程和函数的有关信息。

例如,存储过程内容的查询如下:

select proname,prosrc from pg_proc where proname='sp_call_filter_rules_100_1';

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!

图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 函数签名器

文章目录 MATLAB 函数签名器注释规范模板参数类型 kind数据格式 type选项的支持 使用可执行程序封装为m函数程序输出 编译待办事项推荐阅读附录 MATLAB 函数签名器 MATLAB 函数签名器 (FUNCSIGN) ,在规范注释格式的基础上为函数文件或类文件自动生成函数签名&#…

c++ 基础知识(一)

文章目录 1. C关键字 2. 命名空间 3. C输入&输出 4. 缺省参数 文章内容 1. C关键字(C98) C总计63个关键字,C语言32个关键字 ps:下面我们只是看一下C有多少关键字,不对关键字进行具体的讲解。后面我学了以后再细讲。 2. 命名空间 …

简单查找重复文本文件

声明这是最初 我的提问给个文本分类清单input查找文件夹下 .py .txt .excel .word 一模一样的文本不是找文件名 找相同格式下的文件文本是否一样 文件单独复制到文件夹下两个文件全部复制到文件夹下 print 打印相同文本文件的名字 比如查找到了3.py与4.5.是.py文件中的文本文件…

Java基础API---euqals 小知识

导入: 大家有没有遇到自定义的类,无法用equals方法比较成员属性呀?那是因为需要重写equals方法 重写原理这里偷个懒,idea中 altinsert 快捷键,快速实现重写equals噢! Student类: package ob…

【C++】基础入门

万字复习C基础入门语法&#xff0c;适合学过C的朋友用来复习查阅&#xff0c;可能不太适合0基础的朋友。 一.c初识 (1) 第一个c程序 最简单的格式&#xff1a; // 导入头文件 #include<iostream> // 简化对命名空间std下函数和对象的使用 using namespace std; // …

阿里云服务器免费申请入口_注册阿里云免费领4台服务器

注册阿里云账号&#xff0c;免费领云服务器&#xff0c;最高领取4台云服务器&#xff0c;每月750小时&#xff0c;3个月免费试用时长&#xff0c;可快速搭建网站/小程序&#xff0c;部署开发环境&#xff0c;开发多种企业应用。阿里云百科分享阿里云服务器免费领取入口、免费云…

调度程序以及调度算法的评价指标

1.调度器/调度程序 调度程序决定调度算法&#xff0c;时间片大小 ②&#xff0c;③由调度程序引起&#xff0c;调度程序决定: 1.调度时机 创建新进程进程退出运行进程阻塞I/O中断发生&#xff08;可能唤醒某些阻塞进程)非抢占式调度策略&#xff0c;只有运行进程阻塞或退出…

深度学习笔记_4、CNN卷积神经网络+全连接神经网络解决MNIST数据

1、首先&#xff0c;导入所需的库和模块&#xff0c;包括NumPy、PyTorch、MNIST数据集、数据处理工具、模型层、优化器、损失函数、混淆矩阵、绘图工具以及数据处理工具。 import numpy as np import torch from torchvision.datasets import mnist import torchvision.transf…

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

1300*C. Rumor(并查集贪心)

解析&#xff1a; 并查集&#xff0c;求每个集合的最小费用。 每次合并集合的时候&#xff0c;根节点保存当前集合最小的费用。 #include<bits/stdc.h> using namespace std; #define int long long const int N1e55; int n,m,a[N],p[N],cnt[N]; int find(int x){retur…

如何在springboot2中利用mybatis-plus进行分页查询操作。

1.创建配置mp的配置类 在mp的拦截器中加入分页拦截器 package com.example.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springfra…

微信小程序template界面模板导入

我们有些时候 会有一些比较大但并不复杂的界面结构 这个时候 你可以试试这种导入模板的形式 我们在根目录创建一个 template 目录 然后下面创建一个 text文件夹下面创建一个 test.wxml 参考代码如下 <template name"textIndex"><text class "testw&…

微服务技术栈-Nacos配置管理和Feign远程调用

文章目录 前言一、统一配置管理1.添加配置文件2.微服务拉取配置3.配置共享 三、Feign远程调用总结 前言 在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念&#xff0c;Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式…

阿里云免费服务器无法领取限制说明

阿里云提供免费服务器供用户申请&#xff0c;但是领取免费服务器是有条件的&#xff0c;并不是有所的阿里云用户均可领取免费云服务器&#xff0c;免费服务器领取条件为&#xff1a;账号从未使用过阿里云服务器的用户&#xff0c;阿里云百科来举例说明免费服务器领取说明&#…

强化学习环境 - robogym - 学习 - 1

强化学习环境 - robogym - 学习 - 1 项目地址 https://github.com/openai/robogym 为什么选择 robogym 自己的项目需要做一些机械臂 table-top 级的多任务操作 robogym 基于 mujoco 搭建&#xff0c;构建了一个仿真机械臂桌面物体操作&#xff08;pick-place、stack、rearr…

System Generator学习——将代码导入System Generator

文章目录 前言一、步骤 1&#xff1a;用 M-Code 建模控制1、引言2、目标3、步骤 二、步骤 2&#xff1a;用 HDL 建模模块1、引言2、目标3、步骤 三、用 C/C 代码建模块1、引言2、目标3、步骤4、第 1 部分&#xff1a;从 Vivado HLS 创建一个系统生成器包5、第 2 部分&#xff1…

《机器学习实战》学习记录-ch2

PS: 个人笔记&#xff0c;建议不看 原书资料&#xff1a;https://github.com/ageron/handson-ml2 2.1数据获取 import pandas as pd data pd.read_csv(r"C:\Users\cyan\Desktop\AI\ML\handson-ml2\datasets\housing\housing.csv")data.head() data.info()<clas…

优先级队列的模拟实现

目录 1. 优先级队列的概念 1.1堆的概念 1.2堆的性质 1.3堆的存储方式 2. 堆的创建 2.1堆的创建代码解析 2.2建堆的时间复杂度 2.3堆的插入 2.4 堆的删除 2.5常见习题 1. 优先级队列的概念 队列是一种先进先出 (FIFO) 的数据结构 &#xff0c;但有些情况下&#xff0c; 操作的数…

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导 在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。 如下图 如何关闭…

【再识C进阶4】详细介绍自定义类型——结构体、枚举和联合

学习目标&#xff1a; 在上一篇博客中&#xff0c;我们已经详细地学习了字符分类函数、字符转换函数和内存函数。那这一篇博客和上一篇博客的关系不是那么相连。 这一篇博客主要介绍一下自定义类型&#xff0c;因为在解决实际问题时&#xff0c;由于世界上的因素有很多&#xf…