首页 > 其他分享 >openGauss 查询原生编译

openGauss 查询原生编译

时间:2024-04-29 15:59:25浏览次数:20  
标签:原生 PREPARE 查询 编译 openGauss 执行 轻量

查询原生编译

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

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

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

查询编译:PREPARE语句

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

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

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

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

运行命令

发出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编译支持的特性和不支持的特性见下文。

轻量执行支持的查询

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

  • 简单点查询

    • SELECT (including SELECT for UPDATE)
    • UPDATE
    • DELETE
  • INSERT查询

  • 引用主键的完整前缀的范围UPDATE查询

  • 引用主键的完整前缀的范围SELECT查询

  • JOIN查询,其中一部分或两部分重叠为点查询

  • 引用每个连接表中主键的完整前缀的JOIN查询

轻量执行不支持的查询

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

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

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

详情查看:https://opengauss.org

详情查看:https://docs-opengauss.osinfra.cn

标签:原生,PREPARE,查询,编译,openGauss,执行,轻量
From: https://www.cnblogs.com/techbing/p/18165905

相关文章

  • openGauss 创建表
    创建表背景信息表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。创建表前请先规划存储模型。创建表执行如下命令创建表。openGauss=#CREATETABLEcustomer_t1(c_customer_skinteger,......
  • openGauss 查看数据
    查看数据使用系统表pg_tables查询数据库所有表的信息。openGauss=#SELECT*FROMpg_tables;使用gsql的\d+命令查询表的属性。openGauss=#\d+customer_t1;执行如下命令查询表customer_t1的数据量。openGauss=#SELECTcount(*)FROMcustomer_t1;执行如下命......
  • openGauss 查看数据库连接数
    查看数据库连接数背景信息当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。全局的最大连接数:由运行参数max_connections指定。某用户的连接数:在创建用户时由CREAT......
  • openGauss SSL证书管理
    SSL证书管理openGauss默认配置了通过openssl生成的安全证书、私钥。并且提供证书替换的接口,方便用户进行证书的替换。证书生成-TLS证书生成-TLCP证书替换主备证书认证配置详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss 查看参数值
    查看参数值openGauss安装后,有一套默认的运行参数,为了使openGauss与业务的配合度更高,用户需要根据业务场景和数据量的大小进行GUC参数调整。操作步骤以操作系统用户omm登录数据库主节点。使用如下命令连接数据库。gsql-dpostgres-p8000postgres为需要连接的数据库名......
  • openGauss 查看审计结果
    查看审计结果前提条件审计功能总开关已开启。需要审计的审计项开关已开启。数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。数据库各个节点审计日志单独记录。背景信息只有拥有AUDITADMIN属性的用户才可以查看审计记录。有......
  • openGauss mysql_fdw
    mysql_fdwmysql_fdw是一款开源插件。openGauss基于开源的mysql_fdwRelease2.5.3版本进行开发适配。编译和使用mysql_fdw需要环境上包含MariaDB的开发包,所以openGauss默认不编译mysql_fdw,下面依次介绍如何编译和使用mysql_fdw。编译mysql_fdw编译mysql_fdw需要安装MariaDB的......
  • openGauss NUMA-aware分配和亲和性
    NUMA-aware分配和亲和性非统一内存访问(NUMA)是一种计算机内存设计,用于多重处理,其中内存访问时间取决于内存相对于处理器的位置。处理器可以利用NUMA的优势,优先访问本地内存(速度更快),而不是访问非本地内存(这意味着它不会访问另一个处理器的本地内存或处理器之间共享的内存)。MOT内存......
  • openGauss Schema
    SchemaSchema又称作模式。通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。每个数据库包含一个或多个Schema。数据库中的每个Schema包含表和其他类型的对象。数据库创建初......
  • openGauss MOT资源利用率
    MOT资源利用率在4路96核512GBRAM的x86服务器上测试的资源利用率如下所示。MOT能够高效持续消耗几乎所有可用的CPU资源。例如,192核390万tpmC的CPU利用率几乎达到100%。tmpC:每分钟完成的TPC-C事务数以橙色条柱和左侧的Y轴tpmC表示。CPU利用率(%):CPU利用率由蓝色线条和右侧的Y轴......