| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 三千字教你使用MOT -> 正文阅读 |
|
[大数据]三千字教你使用MOT |
上一期我们介绍了MOT特性及部署。说了为什么要用,接下来就是如何使用MOT。使用MOT非常简单,以下几个小节将会进行描述。 openGauss允许应用程序使用MOT和基于标准磁盘的表。MOT适用于最活跃、高竞争和对吞吐量敏感的应用程序表,也可用于所有应用程序的表。 以下命令介绍如何创建MOT,以及如何将现有的基于磁盘的表转换为MOT,以加速应用程序的数据库相关性能。MOT尤其有利于已证明是瓶颈的表。 工作流程概述 以下是与使用MOT相关的任务的简单概述: 本小节还介绍了如何执行各种与MOT相关的附加任务,以及MOT SQL覆盖和限制。
1.授予用户权限以授予数据库用户对MOT存储引擎的访问权限为例。每个数据库用户仅执行一次,通常在初始配置阶段完成。
要使特定用户能够创建和访问MOT(DDL、DML、SELECT),以下语句只执行一次:
所有关键字不区分大小写。 2.创建/删除MOT创建MOT非常简单。只有MOT中的创建和删除表语句与openGauss中基于磁盘的表的语句不同。SELECT、DML和DDL的所有其他命令的语法对于MOT表和openGauss基于磁盘的表是一样的。
3.为MOT创建索引支持标准的PostgreSQL创建和删除索引语句。 例如:
创建一个用于TPC-C的ORDER表,并创建索引:
有关MOT索引限制,请参见“MOT SQL覆盖和限制”的索引部分内容。 4.将磁盘表转换为MOT磁盘表直接转换为MOT尚不能实现,这意味着尚不存在将基于磁盘的表转换为MOT的ALTER TABLE语句。 下面介绍如何手动将基于磁盘的表转换为MOT,如何使用gs_dump工具导出数据,以及如何使用gs_restore工具导入数据。 4.1前置条件检查检查待转换为MOT的磁盘表的模式是否包含所有需要的列。 检查架构是否包含任何不支持的列数据类型,具体参见“不支持的数据类型”章节。 如果不支持特定列,则建议首先创建一个更新了模式的备磁盘表。此模式与原始表相同,只是所有不支持的类型都已转换为支持的类型。 使用以下脚本导出该备磁盘表,然后导入到MOT中。 4.2转换要将基于磁盘的表转换为MOT,请执行以下步骤:
4.3转换示例假设要将数据库benchmarksql中一个基于磁盘的表customer迁移到MOT中。 将customer表迁移到MOT,操作步骤如下:
5.查询原生编译MOT的另一个特性是,在预编译的完整查询需要执行之前,能够以原生格式(使用PREPARE语句)准备并解析这些查询。 这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好的性能。 这种分工避免了重复的解析分析操作。查询和事务语句可以交互执行。此功能有时称为即时(Just-In-Time,JIT)查询编译。 5.1 查询编译:PREPARE语句若要使用MOT的原生查询编译,请在执行查询之前调用PREPARE客户端语句。MOT将预编译查询和(或)从缓存预加载先前预编译的代码。 下面是SQL中PREPARE语法的示例:
PREPARE在数据库服务器中创建一个预处理语句,该语句是一个可用于优化性能的服务器端对象。 5.2?运行命令发出EXECUTE命令时,将解析、分析、重写和执行预处理语句。这种分工避免了重复的解析分析操作,同时使执行计划依赖于特定的设置值。 下面是在Java应用程序中调用PREPARE和EXECUTE语句的示例。
MOT编译支持的特性和不支持的特性见下文。 5.3 轻量执行支持的查询以下查询类型适合轻量执行:
5.4 轻量执行不支持的查询任何特殊的查询属性都不适用于轻量执行。特别是如果以下条件中的任何一项适用,则该查询不适合轻量执行。有关更多信息,请参阅“原生编译和轻量执行不支持的查询”。 需要强调一点,如果查询语句不适用原生编译和轻量执行,不向客户端报告错误,查询仍以正常和规范的方式执行。 有关MOT原生编译功能的详细信息,请参阅 “查询原生编译”或“查询原生编译(JIT)”的有关内容。 6. 重试中止事务在乐观并发控制(OCC)中,在COMMIT阶段前的事务期间(使用任何隔离级别)不会对记录进行锁定。这是一个能显著提高性能的强大优势。它的缺点是,如果另一个会话尝试更新相同的记录,则更新可能会失败。所以必须中止整个事务。这些所谓的更新冲突是由MOT在提交时通过版本检查机制检测到的。
这种更新冲突在常见的OLTP场景中非常少见,在使用MOT时尤其少见。但是,由于仍有可能发生这种情况,开发人员应该考虑使用事务重试代码来解决此问题。 下面以多个会话同时尝试更新同一个表为例,说明如何重试表命令。有关更多详细信息,请参阅“OCC与2PL的区别举例”部分。下面以TPC-C支付事务为例。
7. MOT外部支持工具为了支持MOT,修改了以下外部openGauss工具。请确保使用的工具是最新版本。下面将介绍与MOT相关的用法。有关这些工具及其使用方法的完整说明,请参阅openGauss工具参考。 此工具用于从主服务器创建备服务器,以及当服务器的时间线偏离后,将服务器与其副本进行同步。 在操作结束时,工具将获取最新的MOT检查点,同时考虑checkpoint_dir配置值。 检查点从源服务器的checkpoint_dir读取到目标服务器的checkpoint_dir。 目前MOT不支持增量检查点。因此,gs_ctl增量构建对于MOT来说不是以增量方式工作,而是以全量方式工作。Postgres磁盘表仍然可以增量构建。 gs_basebackup用于准备运行中服务器的基础备份,不影响其他数据库客户端。 MOT检查点也会在操作结束时获取。但是,检查点的位置是从源服务器中的checkpoint_dir获取的,并传输到源数据目录中,以便正确备份。 gs_dump用于将数据库模式和数据导出到文件中。支持MOT。 gs_restore用于从文件中导入数据库模式和数据。支持MOT。 8. MOT SQL覆盖和限制MOT设计几乎能够覆盖SQL和未来特性集。例如,大多数支持标准的Postgres SQL,也支持常见的数据库特性,如存储过程、自定义函数等。 下面介绍各种SQL覆盖和限制。 8.1 不支持的特性MOT不支持以下特性:
此外,下面详细列出了MOT、MOT索引、查询和DML语法的各种通用限制,以及查询原生编译的特点和限制。 8.2 MOT限制MOT功能限制:
8.3 不支持的DDL操作
8.4 不支持的数据类型
8.5 不支持的索引DDL和索引
上表中未指定的类型,列附加大小为零(例如时间戳)。 8.6 不支持的DML
8.7 原生编译和轻量执行不支持的查询
以下子句不支持轻量执行:
好了,今天的文章就到这里。你学会了吗? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 1:02:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |