From b1cb7fae3aae9dff8e2e33c81f1cd8318e119068 Mon Sep 17 00:00:00 2001 From: liyang0608 <2643278072qq.com> Date: Wed, 26 Aug 2020 11:23:43 +0800 Subject: [PATCH] fix bugs in MOT --- ...tended-fdw-and-other-opengauss-features.md | 2 +- ...w-latency-90th-performance-benchmarks.png} | Bin ...action-average-performance-benchmarks.png} | Bin .../en/docs/Developerguide/mot-concepts.md | 29 --- content/en/docs/Developerguide/mot-indexes.md | 2 +- .../Developerguide/mot-isolation-levels.md | 189 +++++++++--------- .../mot-logging-wal-redo-log-concepts.md | 145 +++++++------- .../en/docs/Developerguide/mot-low-latency.md | 4 +- .../mot-scale-up-architecture.md | 4 +- .../mot-sql-coverage-and-limitations.md | 122 +++++------ content/en/docs/Developerguide/mot.md | 6 +- content/en/menu/index.md | 24 +-- .../MOT\351\231\220\345\210\266.md" | 2 +- ...15\350\256\276\345\217\202\346\225\260.md" | 2 +- 14 files changed, 252 insertions(+), 279 deletions(-) rename content/en/docs/Developerguide/figures/{low-latency-(90th-)-performance-benchmarks.png => low-latency-90th-performance-benchmarks.png} (100%) rename content/en/docs/Developerguide/figures/{low-latency-(90th-transaction-average)-performance-benchmarks.png => low-latency-90th-transaction-average-performance-benchmarks.png} (100%) delete mode 100644 content/en/docs/Developerguide/mot-concepts.md diff --git a/content/en/docs/Developerguide/extended-fdw-and-other-opengauss-features.md b/content/en/docs/Developerguide/extended-fdw-and-other-opengauss-features.md index 4574a663f..111993a91 100644 --- a/content/en/docs/Developerguide/extended-fdw-and-other-opengauss-features.md +++ b/content/en/docs/Developerguide/extended-fdw-and-other-opengauss-features.md @@ -9,7 +9,7 @@ We refer to all the components that are in use or are accessing the MOT storage The following figure shows how the MOT storage engine is embedded inside openGauss and its bi‑directional access to database functionality. **Figure 1** MOT Storage Engine Embedded inside openGauss – FDW Access to External Databases -![](figures/mot-architecture.png "mot-architecture") + We have extended the capabilities of FDW by extending and modifying the FdwRoutine structure in order to introduce features and calls that were not required before the introduction of MOT. For example, support for The following new features was added – Add Index, Drop Index/Table, Truncate, Vacuum and Table/Index Memory Statistics. A significant emphasis was put on integration with openGauss logging, replication and checkpointing mechanisms in order to provide consistency for cross-table transactions through failures. In this case, the MOT itself sometimes initiates calls to openGauss functionality through the FDW layer. diff --git a/content/en/docs/Developerguide/figures/low-latency-(90th-)-performance-benchmarks.png b/content/en/docs/Developerguide/figures/low-latency-90th-performance-benchmarks.png similarity index 100% rename from content/en/docs/Developerguide/figures/low-latency-(90th-)-performance-benchmarks.png rename to content/en/docs/Developerguide/figures/low-latency-90th-performance-benchmarks.png diff --git a/content/en/docs/Developerguide/figures/low-latency-(90th-transaction-average)-performance-benchmarks.png b/content/en/docs/Developerguide/figures/low-latency-90th-transaction-average-performance-benchmarks.png similarity index 100% rename from content/en/docs/Developerguide/figures/low-latency-(90th-transaction-average)-performance-benchmarks.png rename to content/en/docs/Developerguide/figures/low-latency-90th-transaction-average-performance-benchmarks.png diff --git a/content/en/docs/Developerguide/mot-concepts.md b/content/en/docs/Developerguide/mot-concepts.md deleted file mode 100644 index c6562b6ea..000000000 --- a/content/en/docs/Developerguide/mot-concepts.md +++ /dev/null @@ -1,29 +0,0 @@ -# Mot Concepts - -This chapter describes how openGauss MOT is designed and how it works. It also sheds light on its advanced features and capabilities and how to use them. This chapter serves to educate the reader about various technical details of how MOT operates, details of important MOT features and innovative differentiators. The content of this chapter may be useful for decision-making regarding MOT’s suitability to specific application requirements and for using and managing it most efficiently. - -\[Orange\] - -- **[Scale-up Architecture](scale-up-architecture.md)** - -- **[Concurrency Control Mechanism](concurrency-control-mechanism.md)** - -- **[Memory Optimized Storage Engine](memory-optimized-storage-engine.md)** - -- **[Extended FDW and other GaussDB features ](extended-fdw-and-other-gaussdb-features.md)** - -- **[NUMA Awareness Allocation and Affinity](numa-awareness-allocation-and-affinity.md)** - -- **[Indexes](indexes.md)** - -- **[Durability](durability-20.md)** - -- **[Recovery](recovery-23.md)** - -- **[Query Native Compilation \(JIT\)](query-native-compilation_jit.md)** - -- **[Scale-out Distributed Database](scale-out-distributed-database.md)** - -- **[Comparison – Disk vs. MOT](comparison-disk-vs-mot.md)** - - diff --git a/content/en/docs/Developerguide/mot-indexes.md b/content/en/docs/Developerguide/mot-indexes.md index d6b5241a6..67c65373d 100644 --- a/content/en/docs/Developerguide/mot-indexes.md +++ b/content/en/docs/Developerguide/mot-indexes.md @@ -26,7 +26,7 @@ MOT supports both Primary, Secondary and Keyless indexes \(subject to the limita A non-unique index may contain multiple rows with the same key. Non-unique indexes are used solely to improve query performance by maintaining a sorted order of data values that are used frequently. For example, a database may use a non-unique index to group all people from the same family. However, the Masstree\[[Comparison – Disk vs. MOT](comparison-disk-vs-mot.md)\] data structure implementation does not allow the mapping of multiple objects to the same key. Our solution for enabling the creation of non-unique indexes \(as shown in the figure below\) is to add a symmetry-breaking suffix to the key, which maps the row. This added suffix is the pointer to the row itself, which has a constant size of 8 bytes and a value that is unique to the row. When inserting into a non-unique index, the insertion of the sentinel always succeeds, which enables the row allocated by the executing transaction to be used. This approach also enable MOT to have a fast, reliable, order-based iterator for a non-unique index. **Figure 1** Non-unique Indexes -![](figures/non-unique-indexes.png "non-unique-indexes") + The structure of an MOT table T that has three rows and two indexes is depicted in the figure above. The rectangles represent data rows, and the indexes point to sentinels \(the elliptic shapes\) which point to the rows. The sentinels are inserted into unique indexes with a key and into non-unique indexes with a key + a suffix. The sentinels facilitate maintenance operations so that the rows can be replaced without touching the index data structure. In addition, there are various flags and a reference count embedded in the sentinel in order to facilitate optimistic inserts. diff --git a/content/en/docs/Developerguide/mot-isolation-levels.md b/content/en/docs/Developerguide/mot-isolation-levels.md index cfdb0dd39..482f58e6e 100644 --- a/content/en/docs/Developerguide/mot-isolation-levels.md +++ b/content/en/docs/Developerguide/mot-isolation-levels.md @@ -5,107 +5,108 @@ Even though MOT is fully ACID-compliant \(as described in the section\), not all **Table 1** Isolation Levels - - - - - - - - - - - - - - - - - - - - +

Isolation Level

-

Description

-

READ UNCOMMITTED

-

Not supported by MOT.

-

READ COMMITTED

-

Supported by MOT.

-

The READ COMMITTED isolation level that guarantees that any data that is read was already committed when it was read. It simply restricts the reader from seeing any intermediate, uncommitted or dirty reads. Data is free to be changed after it has been read so that READ COMMITTED does not guarantee that if the transaction re-issues the read, that the same data will be found.

-

SNAPSHOT

-

Not supported by MOT.

-

The SNAPSHOT isolation level makes the same guarantees as SERIALIZABLE, except that concurrent transactions can modify the data. Instead, it forces every reader to see its own version of the world (its own snapshot). This makes it very easy to program, plus it is very scalable, because it does not block concurrent updates. However, in many implementations this isolation level requires higher server resources.

-

REPEATABLE READ

-

Supported by MOT.

-

REPEATABLE READ is a higher isolation level that (in addition to the guarantees of the READ COMMITTED isolation level) guarantees that any data that is read cannot change. If a transaction reads the same data again, it will find the same previously read data in place, unchanged and available to be read.

-

Because of the optimistic model, concurrent transactions are not prevented from updating rows read by this transaction. Instead, at commit time this transaction validates that the REPEATABLE READ isolation level has not been violated. If it has, this transaction is rolled back and must be retried.

-

SERIALIZABLE

-

Not supported by MOT.

-

Serializable isolation makes an even stronger guarantee. In addition to everything that the REPEATABLE READ isolation level guarantees, it also guarantees that no new data can be seen by a subsequent read.

-

It is named SERIALIZABLE because the isolation is so strict that it is almost a bit like having the transactions run in series rather than concurrently.

-
+ + + + + + + + + + + + + + + + + + +

Isolation Level

+

Description

+

READ UNCOMMITTED

+

Not supported by MOT.

+

READ COMMITTED

+

Supported by MOT.

+

The READ COMMITTED isolation level that guarantees that any data that is read was already committed when it was read. It simply restricts the reader from seeing any intermediate, uncommitted or dirty reads. Data is free to be changed after it has been read so that READ COMMITTED does not guarantee that if the transaction re-issues the read, that the same data will be found.

+

SNAPSHOT

+

Not supported by MOT.

+

The SNAPSHOT isolation level makes the same guarantees as SERIALIZABLE, except that concurrent transactions can modify the data. Instead, it forces every reader to see its own version of the world (its own snapshot). This makes it very easy to program, plus it is very scalable, because it does not block concurrent updates. However, in many implementations this isolation level requires higher server resources.

+

REPEATABLE READ

+

Supported by MOT.

+

REPEATABLE READ is a higher isolation level that (in addition to the guarantees of the READ COMMITTED isolation level) guarantees that any data that is read cannot change. If a transaction reads the same data again, it will find the same previously read data in place, unchanged and available to be read.

+

Because of the optimistic model, concurrent transactions are not prevented from updating rows read by this transaction. Instead, at commit time this transaction validates that the REPEATABLE READ isolation level has not been violated. If it has, this transaction is rolled back and must be retried.

+

SERIALIZABLE

+

Not supported by MOT.

+

Serializable isolation makes an even stronger guarantee. In addition to everything that the REPEATABLE READ isolation level guarantees, it also guarantees that no new data can be seen by a subsequent read.

+

It is named SERIALIZABLE because the isolation is so strict that it is almost a bit like having the transactions run in series rather than concurrently.

+
+ The following table shows the concurrency side effects enabled by the different isolation levels. **Table 2** Concurrency Side Effects Enabled by Isolation Levels - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

Isolation Level

-

Description

-

Non-repeatable Read

-

Phantom

-

READ UNCOMMITTED

-

Yes

-

Yes

-

Yes

-

READ COMMITTED

-

No

-

Yes

-

Yes

-

REPEATABLE READ

-

No

-

No

-

Yes

-

SNAPSHOT

-

No

-

No

-

No

-

SERIALIZABLE

-

No

-

No

-

No

-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Isolation Level

+

Description

+

Non-repeatable Read

+

Phantom

+

READ UNCOMMITTED

+

Yes

+

Yes

+

Yes

+

READ COMMITTED

+

No

+

Yes

+

Yes

+

REPEATABLE READ

+

No

+

No

+

Yes

+

SNAPSHOT

+

No

+

No

+

No

+

SERIALIZABLE

+

No

+

No

+

No

+
In the near future release, openGauss MOT will also support both SNAPSHOT and SERIALIZABLE isolation levels. diff --git a/content/en/docs/Developerguide/mot-logging-wal-redo-log-concepts.md b/content/en/docs/Developerguide/mot-logging-wal-redo-log-concepts.md index 34d12b023..7bb264984 100644 --- a/content/en/docs/Developerguide/mot-logging-wal-redo-log-concepts.md +++ b/content/en/docs/Developerguide/mot-logging-wal-redo-log-concepts.md @@ -39,7 +39,7 @@ According to your configuration, one of the following types of logging is implem When a transaction ends, the SynchronousRedoLogHandler serializes its transaction buffer and write it to the XLOG iLogger implementation. **Figure 1** Synchronous Logging - ![](figures/synchronous-logging.png "synchronous-logging") + **Summary** @@ -47,41 +47,42 @@ According to your configuration, one of the following types of logging is implem The downside of the **Synchronous Redo Logging** option is that it is the slowest logging mechanism of the three options. This is because a client application must wait until all data is written to disk and because of the frequent disk writes \(which typically slow down the database\). -- **Group Synchronous Redo Logging** +- **Group Synchronous Redo Logging** - The **Group Synchronous Redo Logging** option is very similar to the **Synchronous Redo Logging** option, because it also ensures total durability with absolutely no data loss and total synchronization of the client application and the WAL \(Redo Log\) entries. The difference is that the **Group Synchronous Redo Logging** option writes _groups of transaction _redo entries to the WAL Redo Log on the disk at the same time, instead of writing each and every transaction as it is committed. Using Group Synchronous Redo Logging reduces the amount of disk I/Os and thus improves performance, especially when running a heavy workload. + The **Group Synchronous Redo Logging** option is very similar to the **Synchronous Redo Logging** option, because it also ensures total durability with absolutely no data loss and total synchronization of the client application and the WAL \(Redo Log\) entries. The difference is that the **Group Synchronous Redo Logging** option writes _groups of transaction _redo entries to the WAL Redo Log on the disk at the same time, instead of writing each and every transaction as it is committed. Using Group Synchronous Redo Logging reduces the amount of disk I/Os and thus improves performance, especially when running a heavy workload. - The MOT engine performs synchronous Group Commit logging with Non-Uniform Memory Access \(NUMA\)-awareness optimization by automatically grouping transactions according to the NUMA socket of the core on which the transaction is running. + The MOT engine performs synchronous Group Commit logging with Non-Uniform Memory Access \(NUMA\)-awareness optimization by automatically grouping transactions according to the NUMA socket of the core on which the transaction is running. - You may refer to the [NUMA Awareness Allocation and Affinity](numa-awareness-allocation-and-affinity.md) section for more information about NUMA-aware memory access. + You may refer to the [NUMA Awareness Allocation and Affinity](numa-awareness-allocation-and-affinity.md) section for more information about NUMA-aware memory access. - When a transaction commits, a group of entries are recorded in the WAL Redo Log, as follows – + When a transaction commits, a group of entries are recorded in the WAL Redo Log, as follows – - 1. While a transaction is in progress, it is stored in the memory. The MOT engine groups transactions in buckets according to the NUMA socket of the core on which the transaction is running. This means that all the transactions running on the same socket are grouped together and that multiple groups will be filling in parallel according to the core on which the transaction is running. + 1. While a transaction is in progress, it is stored in the memory. The MOT engine groups transactions in buckets according to the NUMA socket of the core on which the transaction is running. This means that all the transactions running on the same socket are grouped together and that multiple groups will be filling in parallel according to the core on which the transaction is running. - Writing transactions to the WAL is more efficient in this manner because all the buffers from the same socket are written to disk together. + Writing transactions to the WAL is more efficient in this manner because all the buffers from the same socket are written to disk together. - >![](public_sys-resources/icon-note.gif) **NOTE:** - >- Each thread runs on a single core/CPU which belongs to a single socket and each thread only writes to the socket of the core on which it is running. + >![](public_sys-resources/icon-note.gif) **NOTE:** + > + >- Each thread runs on a single core/CPU which belongs to a single socket and each thread only writes to the socket of the core on which it is running. - 2. After a transaction finishes and the client application sends a Commit command, the transaction redo log entries are serialized together with other transactions that belong to the same group. - 3. After the configured criteria are fulfilled for a specific group of transactions \(quantity of committed transactions or timeout period as describes in the [REDO LOG \(MOT\)](mot-configuration-settings.md#section361563811235)section\), the transactions in this group are written to the WAL on the disk. This means that while these log entries are being written to the log, the client applications that issued the commit are waiting for a response. - 4. As soon as all the transaction buffers in the NUMA-aware group have been written to the log, all the transactions in the group are performing the necessary changes to the memory store and the clients are notified that these transactions are complete. + 2. After a transaction finishes and the client application sends a Commit command, the transaction redo log entries are serialized together with other transactions that belong to the same group. + 3. After the configured criteria are fulfilled for a specific group of transactions \(quantity of committed transactions or timeout period as describes in the [REDO LOG \(MOT\)](mot-configuration-settings.md#section361563811235)section\), the transactions in this group are written to the WAL on the disk. This means that while these log entries are being written to the log, the client applications that issued the commit are waiting for a response. + 4. As soon as all the transaction buffers in the NUMA-aware group have been written to the log, all the transactions in the group are performing the necessary changes to the memory store and the clients are notified that these transactions are complete. - **Technical Description** + **Technical Description** - The four colors represent 4 NUMA nodes. Thus each NUMA node has its own memory log enabling a group commit of multiple connections. + The four colors represent 4 NUMA nodes. Thus each NUMA node has its own memory log enabling a group commit of multiple connections. - **Figure 2** Group Commit – with NUMA-awareness - ![](figures/group-commit-with-numa-awareness.png "group-commit-with-numa-awareness") + **Figure 2** Group Commit – with NUMA-awareness + - **Summary** + **Summary** - The **Group Synchronous Redo Logging** option is a an extremely safe and strict logging option because it ensures total synchronization of the client application and the WAL Redo log entries; thus ensuring total durability and consistency with absolutely no data loss. This logging option prevents the situation where a client application might mark a transaction as successful, when it has not yet been persisted to disk. + The **Group Synchronous Redo Logging** option is a an extremely safe and strict logging option because it ensures total synchronization of the client application and the WAL Redo log entries; thus ensuring total durability and consistency with absolutely no data loss. This logging option prevents the situation where a client application might mark a transaction as successful, when it has not yet been persisted to disk. - On one hand this option has fewer disk writes than the **Synchronous Redo Logging** option, which may mean that it is faster. The downside is that transactions are locked for longer, meaning that they are locked until after all the transactions in the same NUMA memory have been written to the WAL Redo Log on the disk. + On one hand this option has fewer disk writes than the **Synchronous Redo Logging** option, which may mean that it is faster. The downside is that transactions are locked for longer, meaning that they are locked until after all the transactions in the same NUMA memory have been written to the WAL Redo Log on the disk. - The benefits of using this option depend on the type of transactional workload. For example, this option benefits systems that have many transactions \(and less so for systems that have few transactions, because there are few disk writes anyway\). + The benefits of using this option depend on the type of transactional workload. For example, this option benefits systems that have many transactions \(and less so for systems that have few transactions, because there are few disk writes anyway\). - **Asynchronous Redo Logging** @@ -98,7 +99,7 @@ According to your configuration, one of the following types of logging is implem Upon transaction commit, the transaction buffer is moved \(pointer assignment – not a data copy\) to a centralized buffer and a new transaction buffer is allocated for the transaction. The transaction is released as soon as its buffer is moved to the centralized buffer and the transaction thread is not blocked. The actual write to the log uses the Postgres walwriter thread. When the walwriter timer elapses, it first calls the AsynchronousRedoLogHandler \(via registered callback\) to write its buffers and then continues with its logic and flushes the data to the XLOG. **Figure 3** Asynchronous Logging - ![](figures/asynchronous-logging.png "asynchronous-logging") + **Summary** @@ -111,7 +112,7 @@ According to your configuration, one of the following types of logging is implem The following describes the design details of each persistence-related component in the In-Memory Engine Module. **Figure 4** Three Logging Options - ![](figures/three-logging-options.png "three-logging-options") + The RedoLog component is used by both by backend threads that use the In-Memory Engine and by the WAL writer in order to persist their data. Checkpoints are performed using the Checkpoint Manager, which is triggered by the Postgres checkpointer. @@ -126,7 +127,7 @@ According to your configuration, one of the following types of logging is implem In the In-Memory Engine, the transaction log records are stored in a transaction buffer which is part of the transaction object \(TXN\). The transaction buffer is logged during the calls to addToLog\(\) – if the buffer exceeds a threshold it is then flushed and reused. When a transaction commits and passes the validation phase \(OCC SILO\[[Comparison – Disk vs. MOT](comparison-disk-vs-mot.md)\] validation\) or aborts for some reason, the appropriate message is saved in the log as well in order to make it possible to determine the transaction's state during a recovery. **Figure 5** Per-transaction Logging - ![](figures/per-transaction-logging.png "per-transaction-logging") + Parallel Logging is performed both by MOT and disk engines. However, the MOT engine enhances this design with a log-buffer per transaction, lockless preparation and a single log record. @@ -139,54 +140,54 @@ According to your configuration, one of the following types of logging is implem **Table 1** Exception Handling - - - - - - - - - - - - - - - - - - - - - - - - - - - +

Exception Condition

-

Exception Code

-

Scenario

-

Resulting Outcome

-

WAL write failure

-

ERRCODE_FDW_ERROR

-

On any case the WAL write fails

-

Transaction terminates

-

File IO error: write, open and so on

-

ERRCODE_IO_ERROR

-

Checkpoint – Called on any file access error

-

FATAL – process exists

-

Out of Memory

-

ERRCODE_INSUFFICIENT_RESOURCES

-

Checkpoint – Local memory allocation failures

-

FATAL – process exists

-

Logic, DB errors

-

ERRCODE_INTERNAL_

-

ERROR

-

Checkpoint: algorithm fails or failure to retrieve table data or indexes.

-

FATAL – process exists

-
+ + + + + + + + + + + + + + + + + + + + + + + + + +

Exception Condition

+

Exception Code

+

Scenario

+

Resulting Outcome

+

WAL write failure

+

ERRCODE_FDW_ERROR

+

On any case the WAL write fails

+

Transaction terminates

+

File IO error: write, open and so on

+

ERRCODE_IO_ERROR

+

Checkpoint – Called on any file access error

+

FATAL – process exists

+

Out of Memory

+

ERRCODE_INSUFFICIENT_RESOURCES

+

Checkpoint – Local memory allocation failures

+

FATAL – process exists

+

Logic, DB errors

+

ERRCODE_INTERNAL_

+

ERROR

+

Checkpoint: algorithm fails or failure to retrieve table data or indexes.

+

FATAL – process exists

+
diff --git a/content/en/docs/Developerguide/mot-low-latency.md b/content/en/docs/Developerguide/mot-low-latency.md index 9b0a93c5d..cf976caa5 100644 --- a/content/en/docs/Developerguide/mot-low-latency.md +++ b/content/en/docs/Developerguide/mot-low-latency.md @@ -3,7 +3,7 @@ The following was measured on ARM/Kunpeng 2-socket server \(128 cores\). The numbers scale is milliseconds \(ms\). **Figure 1** Low Latency \(90th%\) – Performance Benchmarks -![](figures/low-latency-(90th-)-performance-benchmarks.png "low-latency-(90th-)-performance-benchmarks") +![](figures/low-latency-90th-performance-benchmarks.png"low-latency-(90th-)-performance-benchmarks") MOT's average transaction speed is 2.5x, with MOT latency of 10.5 ms, compared to 23-25ms for disk tables. @@ -11,5 +11,5 @@ MOT's average transaction speed is 2.5x, with MOT latency of 10.5 ms, compared t >The average was calculated by taking into account all TPC-C 5 transaction percentage distributions. For more information, you may refer to the description of TPC-C transactions in the [MOT Sample TPC-C Benchmark](mot-sample-tpc-c-benchmark.md) section. **Figure 2** Low Latency \(90th%, Transaction Average\) – Performance Benchmarks -![](figures/low-latency-(90th-transaction-average)-performance-benchmarks.png "low-latency-(90th-transaction-average)-performance-benchmarks") +![](figures/low-latency-90th-transaction-average-performance-benchmarks.png "low-latency-(90th-transaction-average)-performance-benchmarks") diff --git a/content/en/docs/Developerguide/mot-scale-up-architecture.md b/content/en/docs/Developerguide/mot-scale-up-architecture.md index b1ce07484..658cea5bd 100644 --- a/content/en/docs/Developerguide/mot-scale-up-architecture.md +++ b/content/en/docs/Developerguide/mot-scale-up-architecture.md @@ -37,11 +37,11 @@ The PostgreSQL Foreign Data Wrapper \(FDW\) feature enables the creation of fore openGauss relies on the PostgreSQL Foreign Data Wrappers \(FDW\) and Index support so that SQL is entirely covered, including stored procedures, user defined functions, system functions calls. **Figure 1** MOT Architecture -![](figures/mot-architecture.png "mot-architecture") + In the diagram above, the MOT engine is represented in green, while the existing openGauss \(based on Postgres\) components are represented in the top part of this diagram in blue. As you can see, the Foreign Data Wrapper \(FDW\) mediates between the MOT engine and the openGauss components. -**MOT-Related FDW Customizations** +### MOT-Related FDW Customizations Integrating MOT through FDW enables the reuse of the most upper layer openGauss functionality and therefore significantly shortened MOT's time-to-market without compromising SQL coverage. diff --git a/content/en/docs/Developerguide/mot-sql-coverage-and-limitations.md b/content/en/docs/Developerguide/mot-sql-coverage-and-limitations.md index 0e37a852b..28a848ae0 100644 --- a/content/en/docs/Developerguide/mot-sql-coverage-and-limitations.md +++ b/content/en/docs/Developerguide/mot-sql-coverage-and-limitations.md @@ -8,9 +8,9 @@ The following describes the various types of SQL coverages and limitations – The following features are not supported by MOT – -- **Engine Interop –** No cross-engine \(Disk+MOT\) queries, views or transactions. Planned for 2021. -- **MVCC, Isolation –** No snapshot/serializable isolation. Planned for 2021. -- **Native Compilation **\(JIT\) **–** Limited SQL coverage. Also, JIT compilation of stored procedures is not supported. +- Engine Interop – No cross-engine \(Disk+MOT\) queries, views or transactions. Planned for 2021. +- MVCC, Isolation – No snapshot/serializable isolation. Planned for 2021. +- Native Compilation \(JIT\) – Limited SQL coverage. Also, JIT compilation of stored procedures is not supported. - LOCAL memory is limited to 1 GB. A transaction can only change data of less than 1 GB. - Capacity \(Data+Index\) is limited to available memory. Anti-caching + Data Tiering will be available in the future. - No full-text search index. @@ -97,64 +97,64 @@ The following lists the functionality limitations of MOT tables – ``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

Column Type

-

Column Size

-

Column Additional Size

-

Varchar

-

N

-

4

-

Tiny

-

1

-

1

-

Short

-

2

-

1

-

Int

-

4

-

1

-

Long

-

8

-

1

-

Float

-

4

-

2

-

Double

-

8

-

3

-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Column Type

+

Column Size

+

Column Additional Size

+

Varchar

+

N

+

4

+

Tiny

+

1

+

1

+

Short

+

2

+

1

+

Int

+

4

+

1

+

Long

+

8

+

1

+

Float

+

4

+

2

+

Double

+

8

+

3

+
Types that are not specified in above table, the column additional size is zero \(for instance timestamp\). diff --git a/content/en/docs/Developerguide/mot.md b/content/en/docs/Developerguide/mot.md index 71ef86250..befac669f 100644 --- a/content/en/docs/Developerguide/mot.md +++ b/content/en/docs/Developerguide/mot.md @@ -8,9 +8,9 @@ This user manual describes the openGauss Memory-Optimized Tables (MOT) engine, h - [Chapter 1, Introducing MOT](introducing-mot.md) introduces Huawei’s openGauss Memory-Optimized Tables (MOT), describes its features and benefits, key technologies, applicable scenarios, performance benchmarks and its competitive advantages. - [Chapter 2, Using MOT](using-mot.md) describes how to deploy, use and manage openGauss MOT. Using MOT tables is quite simple. The syntax of all MOT commands is the same as for openGauss diskbased tables. Only the create and drop table statements in MOT differ from the statements for disk-based tables in openGauss. You may refer to this chapter in order to learn how to get started, how to convert a diskbased table into a MOT table, how to use MOT’s Query Native Compilation feature and about MOT’s limitations and coverage. MOT administration options are also described here. This chapter also describes e how to perform a TPC-C benchmark. -- [Chapter 3, MOT Concepts ](mot-concepts.md) describes how openGauss MOT is designed and how it works. It also sheds light on its advanced features and capabilities and how to use them. This chapter serves to educate the reader about various technical details of how MOT operates, details of important MOT features and innovative differentiators. The content of this chapter may be useful for decision-making regarding MOT’s suitability to specific application requirements and for using and managing it most efficiently. +- [Chapter 3, MOT Concepts ](concepts-of-mot.md) describes how openGauss MOT is designed and how it works. It also sheds light on its advanced features and capabilities and how to use them. This chapter serves to educate the reader about various technical details of how MOT operates, details of important MOT features and innovative differentiators. The content of this chapter may be useful for decision-making regarding MOT’s suitability to specific application requirements and for using and managing it most efficiently. ## Audience -Database users, such as DBAs and application developers, should read [Chapter 1, Introducing MOT](introducing-mot.md), and pay special attention to [Chapter 2, Using MOT](using-mot.md). If needed, more answers can be found in [Chapter 3, MOT Concepts ](mot-concepts.md) . -Software architects and expert database developers may want to read [Chapter 3, MOT Concepts ](mot-concepts.md) closely in addition to the other chapters. \ No newline at end of file +Database users, such as DBAs and application developers, should read [Chapter 1, Introducing MOT](introducing-mot.md), and pay special attention to [Chapter 2, Using MOT](using-mot.md). If needed, more answers can be found in [Chapter 3, MOT Concepts ](concepts-of-mot.md) . +Software architects and expert database developers may want to read [Chapter 3, MOT Concepts ](concepts-of-mot.md) closely in addition to the other chapters. \ No newline at end of file diff --git a/content/en/menu/index.md b/content/en/menu/index.md index 12189e142..d10bdd199 100644 --- a/content/en/menu/index.md +++ b/content/en/menu/index.md @@ -372,18 +372,18 @@ headless: true - [Troubleshooting]({{< relref "./docs/Developerguide/troubleshooting-14.md" >}}) - [MOT Engine]({{< relref "./docs/Developerguide/mot.md" >}}) - [Introducing MOT]({{< relref "./docs/Developerguide/introducing-mot.md" >}}) - - [MOT Introduction]({{< relref "./docs/Developerguide/mot-introduction.md" >}}) - - [MOT Features and Benefits]({{< relref "./docs/Developerguide/mot-features-and-benefits.md" >}}) - - [MOT Key Technologies]({{< relref "./docs/Developerguide/mot-key-technologies.md" >}}) - - [MOT Usage Scenarios]({{< relref "./docs/Developerguide/mot-usage-scenarios.md" >}}) - - [MOT Performance Benchmarks]({{< relref "./docs/Developerguide/mot-performance-benchmarks.md" >}}) - - [MOT Hardware]({{< relref "./docs/Developerguide/mot-hardware.md" >}}) - - [MOT Results – Summary]({{< relref "./docs/Developerguide/mot-results-summary.md" >}}) - - [MOT High Throughput]({{< relref "./docs/Developerguide/mot-high-throughput.md" >}}) - - [MOT Low Latency]({{< relref "./docs/Developerguide/mot-low-latency.md" >}}) - - [MOT RTO and Cold-Start Time]({{< relref "./docs/Developerguide/mot-rto-and-cold-start-time.md" >}}) - - [MOT Resource Utilization]({{< relref "./docs/Developerguide/mot-resource-utilization.md" >}}) - - [MOT Data Ingestion Speed]({{< relref "./docs/Developerguide/mot-data-ingestion-speed.md" >}}) + - [MOT Introduction]({{< relref "./docs/Developerguide/mot-introduction.md" >}}) + - [MOT Features and Benefits]({{< relref "./docs/Developerguide/mot-features-and-benefits.md" >}}) + - [MOT Key Technologies]({{< relref "./docs/Developerguide/mot-key-technologies.md" >}}) + - [MOT Usage Scenarios]({{< relref "./docs/Developerguide/mot-usage-scenarios.md" >}}) + - [MOT Performance Benchmarks]({{< relref "./docs/Developerguide/mot-performance-benchmarks.md" >}}) + - [MOT Hardware]({{< relref "./docs/Developerguide/mot-hardware.md" >}}) + - [MOT Results – Summary]({{< relref "./docs/Developerguide/mot-results-summary.md" >}}) + - [MOT High Throughput]({{< relref "./docs/Developerguide/mot-high-throughput.md" >}}) + - [MOT Low Latency]({{< relref "./docs/Developerguide/mot-low-latency.md" >}}) + - [MOT RTO and Cold-Start Time]({{< relref "./docs/Developerguide/mot-rto-and-cold-start-time.md" >}}) + - [MOT Resource Utilization]({{< relref "./docs/Developerguide/mot-resource-utilization.md" >}}) + - [MOT Data Ingestion Speed]({{< relref "./docs/Developerguide/mot-data-ingestion-speed.md" >}}) - [Using MOT]({{< relref "./docs/Developerguide/using-mot.md" >}}) - [Using MOT Overview]({{< relref "./docs/Developerguide/using-mot-overview.md" >}}) - [MOT Preparation]({{< relref "./docs/Developerguide/mot-preparation.md" >}}) diff --git "a/content/zh/docs/Developerguide/MOT\351\231\220\345\210\266.md" "b/content/zh/docs/Developerguide/MOT\351\231\220\345\210\266.md" index d4b60bb38..ca5b24138 100644 --- "a/content/zh/docs/Developerguide/MOT\351\231\220\345\210\266.md" +++ "b/content/zh/docs/Developerguide/MOT\351\231\220\345\210\266.md" @@ -67,7 +67,7 @@ MOT不支持的索引DDL - 在小数和数值类型上创建索引 - 在列宽\>256的表上创建索引 - 在总列数\>256的表上创建索引 -- 创建索引总数>9 +- 单表创建索引总数>9 MOT不支持的DML diff --git "a/content/zh/docs/Developerguide/\351\207\215\350\256\276\345\217\202\346\225\260.md" "b/content/zh/docs/Developerguide/\351\207\215\350\256\276\345\217\202\346\225\260.md" index d935432d6..5bd020e5f 100644 --- "a/content/zh/docs/Developerguide/\351\207\215\350\256\276\345\217\202\346\225\260.md" +++ "b/content/zh/docs/Developerguide/\351\207\215\350\256\276\345\217\202\346\225\260.md" @@ -79,7 +79,7 @@ openGauss提供了六类GUC参数,具体分类和设置方式请参考[表1](# -openGauss提供了三种方式来修改GUC参数,具体操作请参考[表2](#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t290c8f15953843db8d8e53d867cd893d): +openGauss提供了四种方式来修改GUC参数,具体操作请参考[表2](#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t290c8f15953843db8d8e53d867cd893d): **表 2** GUC参数设置方式 -- Gitee